75 lines
2.2 KiB
TypeScript
75 lines
2.2 KiB
TypeScript
import { Test, TestingModule } from '@nestjs/testing';
|
|
import { PipelineTaskLogger } from './pipeline-task.logger';
|
|
import { PipelineTaskEvent } from './models/pipeline-task-event';
|
|
import { take, timeout } from 'rxjs/operators';
|
|
|
|
describe('PipelineTaskRunner', () => {
|
|
let logger: PipelineTaskLogger;
|
|
let module: TestingModule;
|
|
|
|
beforeEach(async () => {
|
|
module = await Test.createTestingModule({
|
|
providers: [PipelineTaskLogger],
|
|
}).compile();
|
|
|
|
logger = module.get(PipelineTaskLogger);
|
|
});
|
|
|
|
it('should be defined', () => {
|
|
expect(logger).toBeDefined();
|
|
});
|
|
|
|
describe('getMessage$', () => {
|
|
it('normal', async () => {
|
|
const event = new PipelineTaskEvent();
|
|
event.taskId = 'test';
|
|
const emittedAt = new Date();
|
|
event.emittedAt = emittedAt.toISOString() as any;
|
|
const message$ = logger.getMessage$('test');
|
|
|
|
let receiveEvent;
|
|
message$.pipe(take(1)).subscribe((value) => (receiveEvent = value));
|
|
await logger.handleEvent(event);
|
|
expect(receiveEvent).toMatchObject({
|
|
...event,
|
|
emittedAt,
|
|
});
|
|
});
|
|
it('no match', async () => {
|
|
const event = new PipelineTaskEvent();
|
|
event.taskId = 'test';
|
|
const message$ = logger.getMessage$('other');
|
|
setTimeout(() => {
|
|
logger.handleEvent(event);
|
|
});
|
|
expect(message$.pipe(take(1), timeout(100)).toPromise()).rejects.toMatch(
|
|
'timeout',
|
|
);
|
|
});
|
|
it('multiple subscribers', async () => {
|
|
const event = new PipelineTaskEvent();
|
|
event.taskId = 'test';
|
|
const message$ = logger.getMessage$('test');
|
|
const message2$ = logger.getMessage$('test');
|
|
setTimeout(() => {
|
|
logger.handleEvent(event);
|
|
});
|
|
expect(message$.pipe(take(1), timeout(100)).toPromise()).resolves.toEqual(
|
|
event,
|
|
);
|
|
expect(
|
|
message2$.pipe(take(1), timeout(100)).toPromise(),
|
|
).resolves.toEqual(event);
|
|
});
|
|
});
|
|
|
|
describe('onModuleDestroy', () => {
|
|
it('complete observable when destroying module', async () => {
|
|
logger.onModuleDestroy();
|
|
await expect(
|
|
(logger as any).message$.toPromise(),
|
|
).resolves.toBeUndefined();
|
|
});
|
|
});
|
|
});
|