Files
oidc-client-rx/src/public-events/public-events.service.spec.ts
2025-02-02 00:45:46 +08:00

83 lines
2.5 KiB
TypeScript

import { TestBed } from '@/testing';
import { ReplaySubject, firstValueFrom, timer } from 'rxjs';
import { filter, share } from 'rxjs/operators';
import { vi } from 'vitest';
import { EventTypes } from './event-types';
import { PublicEventsService } from './public-events.service';
describe('Events Service', () => {
let eventsService: PublicEventsService;
beforeEach(() => {
TestBed.configureTestingModule({
providers: [PublicEventsService],
});
eventsService = TestBed.inject(PublicEventsService);
});
it('should create', () => {
expect(eventsService).toBeTruthy();
});
it('registering to single event with one event emit works', async () => {
eventsService.fireEvent(EventTypes.ConfigLoaded, { myKey: 'myValue' });
const firedEvent = await firstValueFrom(eventsService.registerForEvents());
expect(firedEvent).toBeTruthy();
expect(firedEvent).toEqual({
type: EventTypes.ConfigLoaded,
value: { myKey: 'myValue' },
});
});
it('registering to single event with multiple same event emit works', async () => {
const spy = vi.fn();
eventsService.registerForEvents().subscribe((firedEvent) => {
spy(firedEvent);
expect(firedEvent).toBeTruthy();
});
eventsService.fireEvent(EventTypes.ConfigLoaded, { myKey: 'myValue' });
eventsService.fireEvent(EventTypes.ConfigLoaded, { myKey: 'myValue2' });
expect(spy.mock.calls.length).toBe(2);
expect(spy.mock.calls[0]?.[0]).toEqual({
type: EventTypes.ConfigLoaded,
value: { myKey: 'myValue' },
});
expect(spy.mock.calls.at(-1)?.[0]).toEqual({
type: EventTypes.ConfigLoaded,
value: { myKey: 'myValue2' },
});
await firstValueFrom(timer(0));
});
it('registering to single event with multiple emit works', async () => {
const o$ = eventsService.registerForEvents().pipe(
filter((x) => x.type === EventTypes.ConfigLoaded),
share({
connector: () => new ReplaySubject(1),
resetOnError: false,
resetOnComplete: false,
resetOnRefCountZero: true,
})
);
o$.subscribe((firedEvent) => {
expect(firedEvent).toBeTruthy();
expect(firedEvent).toEqual({
type: EventTypes.ConfigLoaded,
value: { myKey: 'myValue' },
});
return firedEvent;
});
eventsService.fireEvent(EventTypes.ConfigLoaded, { myKey: 'myValue' });
eventsService.fireEvent(EventTypes.NewAuthenticationResult, true);
await firstValueFrom(o$);
});
});