import { marbles } from 'rxjs-marbles/jest'; import { take, switchMap } from 'rxjs/operators'; import { createSelfSignedTokens } from '../selfSignedTokens'; import { of, timer } from 'rxjs'; describe('createSelfSignedTokens', () => { describe('given different tokens generated every time', () => { it( 'should work', marbles((m) => { const values = { a: { keyId: 'a', signedJwt: 'a', }, b: { keyId: 'b', signedJwt: 'b', }, c: { keyId: 'c', signedJwt: 'c', }, }; const results = { A: { keyId: 'a', signedJwt: 'a', expiresAtMillis: 6, }, B: { keyId: 'a', signedJwt: 'a', expiresAtMillis: 5 + 6, }, }; const signs = m.cold('a', values); const result = createSelfSignedTokens( { expireInMillis: 6, rollNewTokenInMillis: 5, scheduler: m.scheduler, }, { signJwt: () => signs, now: () => of(m.scheduler.frame), } ); m.expect(result.pipe(take(2))).toBeObservable('A----(B|)', results); const steps = timer(0, 1, m.scheduler).pipe( switchMap(() => result.pipe(take(1))), take(6) ); m.expect(steps).toBeObservable('AAAAA(B|)', results); }) ); }); });