Skip to content

Commit

Permalink
feat: add for root methods for global config registration
Browse files Browse the repository at this point in the history
  • Loading branch information
kamilmysliwiec committed Sep 21, 2020
1 parent 2394b9d commit 7d281d9
Show file tree
Hide file tree
Showing 13 changed files with 570 additions and 53 deletions.
240 changes: 224 additions & 16 deletions e2e/module.e2e-spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,14 @@ import { Queue } from 'bull';
import { BullModule, getQueueToken } from '../lib';

describe('BullModule', () => {
let module: TestingModule;
describe('registerQueue', () => {
let moduleRef: TestingModule;

describe('registerQueueQueue', () => {
describe('single configuration', () => {
const fakeProcessor = jest.fn();

beforeAll(async () => {
module = await Test.createTestingModule({
moduleRef = await Test.createTestingModule({
imports: [
BullModule.registerQueue({
name: 'test',
Expand All @@ -23,14 +24,16 @@ describe('BullModule', () => {
}).compile();
});
it('should inject the queue with the given name', () => {
const queue: Queue = module.get<Queue>(getQueueToken('test'));
const queue = moduleRef.get<Queue>(getQueueToken('test'));

expect(queue).toBeDefined();
expect(queue.name).toEqual('test');
});
});
describe('multiple configuration', () => {

describe('multiple configurations', () => {
beforeAll(async () => {
module = await Test.createTestingModule({
moduleRef = await Test.createTestingModule({
imports: [
BullModule.registerQueue(
{
Expand All @@ -52,23 +55,83 @@ describe('BullModule', () => {
}).compile();
});
it('should inject the queue with name "test1"', () => {
const queue: Queue = module.get<Queue>(getQueueToken('test1'));
const queue: Queue = moduleRef.get<Queue>(getQueueToken('test1'));
expect(queue).toBeDefined();
expect(queue.name).toEqual('test1');
});
it('should inject the queue with name "test2"', () => {
const queue: Queue = moduleRef.get<Queue>(getQueueToken('test2'));
expect(queue).toBeDefined();
expect(queue.name).toEqual('test2');
});
});
});

describe('forRoot + registerQueue', () => {
let moduleRef: TestingModule;

describe('single configuration', () => {
const fakeProcessor = jest.fn();
beforeAll(async () => {
moduleRef = await Test.createTestingModule({
imports: [
BullModule.forRoot({
redis: {
host: '0.0.0.0',
port: 6380,
},
}),
BullModule.registerQueue({
name: 'test',
processors: [fakeProcessor],
}),
],
}).compile();
});
it('should inject the queue with the given name', () => {
const queue: Queue = moduleRef.get<Queue>(getQueueToken('test'));
expect(queue).toBeDefined();
expect(queue.name).toEqual('test');
});
});

describe('multiple configurations', () => {
beforeAll(async () => {
moduleRef = await Test.createTestingModule({
imports: [
BullModule.forRoot({
redis: {
host: '0.0.0.0',
port: 6380,
},
}),
BullModule.registerQueue({ name: 'test1' }, { name: 'test2' }),
],
}).compile();
});
it('should inject the queue with name "test1"', () => {
const queue = moduleRef.get<Queue>(getQueueToken('test1'));

expect(queue).toBeDefined();
expect(queue.name).toEqual('test1');
});
it('should inject the queue with name "test2"', () => {
const queue: Queue = module.get<Queue>(getQueueToken('test2'));
const queue = moduleRef.get<Queue>(getQueueToken('test2'));

expect(queue).toBeDefined();
expect(queue.name).toEqual('test2');
});
});
});

describe('registerQueueAsync', () => {
let moduleRef: TestingModule;

describe('single configuration', () => {
describe('useFactory', () => {
const fakeProcessor = jest.fn();
beforeAll(async () => {
module = await Test.createTestingModule({
moduleRef = await Test.createTestingModule({
imports: [
BullModule.registerQueueAsync({
name: 'test',
Expand All @@ -84,19 +147,19 @@ describe('BullModule', () => {
}).compile();
});
it('should inject the queue with the given name', () => {
const queue: Queue = module.get<Queue>(getQueueToken('test'));
const queue: Queue = moduleRef.get<Queue>(getQueueToken('test'));
expect(queue).toBeDefined();
expect(queue.name).toEqual('test');
});
it('the injected queue should have the given processor', () => {
const queue: Queue = module.get<Queue>(getQueueToken('test'));
const queue: Queue = moduleRef.get<Queue>(getQueueToken('test'));
});
});
});
describe('multiple configuration', () => {
describe('multiple configurations', () => {
describe('useFactory', () => {
beforeAll(async () => {
module = await Test.createTestingModule({
moduleRef = await Test.createTestingModule({
imports: [
BullModule.registerQueueAsync(
{
Expand All @@ -122,18 +185,162 @@ describe('BullModule', () => {
}).compile();
});
it('should inject the queue with name "test1"', () => {
const queue: Queue = module.get<Queue>(getQueueToken('test1'));
const queue: Queue = moduleRef.get<Queue>(getQueueToken('test1'));
expect(queue).toBeDefined();
expect(queue.name).toEqual('test1');
});
it('should inject the queue with name "test2"', () => {
const queue: Queue = module.get<Queue>(getQueueToken('test2'));
const queue: Queue = moduleRef.get<Queue>(getQueueToken('test2'));
expect(queue).toBeDefined();
expect(queue.name).toEqual('test2');
});
});
});
});

describe('forRootAsync + registerQueueAsync', () => {
let moduleRef: TestingModule;

describe('single configuration', () => {
describe('useFactory', () => {
const fakeProcessor = jest.fn();
beforeAll(async () => {
moduleRef = await Test.createTestingModule({
imports: [
BullModule.forRootAsync({
useFactory: () => ({
redis: {
host: '0.0.0.0',
port: 6380,
},
}),
}),
BullModule.registerQueueAsync({
name: 'test',
useFactory: () => ({
processors: [fakeProcessor],
}),
}),
],
}).compile();
});
it('should inject the queue with the given name', () => {
const queue = moduleRef.get<Queue>(getQueueToken('test'));

expect(queue).toBeDefined();
expect(queue.name).toEqual('test');
});
it('the injected queue should have the given processor', () => {
const queue = moduleRef.get<Queue>(getQueueToken('test'));
});
});
});

describe('multiple configurations', () => {
describe('useFactory', () => {
beforeAll(async () => {
moduleRef = await Test.createTestingModule({
imports: [
BullModule.forRootAsync({
useFactory: () => ({
redis: {
host: '0.0.0.0',
port: 6380,
},
}),
}),
BullModule.registerQueueAsync({ name: 'test1' }),
BullModule.registerQueue({ name: 'test2' }),
],
}).compile();
});
it('should inject the queue with name "test1"', () => {
const queue = moduleRef.get<Queue>(getQueueToken('test1'));

expect(queue).toBeDefined();
expect(queue.name).toEqual('test1');
});
it('should inject the queue with name "test2"', () => {
const queue = moduleRef.get<Queue>(getQueueToken('test2'));

expect(queue).toBeDefined();
expect(queue.name).toEqual('test2');
});
});
});
});

describe('forRootAsync + registerQueueAsync', () => {
let moduleRef: TestingModule;

describe('single configuration', () => {
describe('useFactory', () => {
const fakeProcessor = jest.fn();
beforeAll(async () => {
moduleRef = await Test.createTestingModule({
imports: [
BullModule.forRootAsync({
useFactory: () => ({
redis: {
host: '0.0.0.0',
port: 6380,
},
}),
}),
BullModule.registerQueueAsync({
name: 'test',
useFactory: () => ({
processors: [fakeProcessor],
}),
}),
],
}).compile();
});
it('should inject the queue with the given name', () => {
const queue = moduleRef.get<Queue>(getQueueToken('test'));

expect(queue).toBeDefined();
expect(queue.name).toEqual('test');
});
});
});

describe('multiple shared configurations', () => {
describe('useFactory', () => {
beforeAll(async () => {
moduleRef = await Test.createTestingModule({
imports: [
BullModule.forRootAsync({
useFactory: () => ({
redis: {
host: '0.0.0.0',
port: 6380,
},
}),
}),
BullModule.registerQueueAsync({ name: 'test1' }),
BullModule.registerQueue({
name: 'test2',
}),
],
}).compile();
});
it('should inject the queue with name "test1"', () => {
const queue = moduleRef.get<Queue>(getQueueToken('test1'));

expect(queue).toBeDefined();
expect(queue.name).toEqual('test1');
});
it('should inject the queue with name "test2"', () => {
const queue = moduleRef.get<Queue>(getQueueToken('test2'));

expect(queue).toBeDefined();
expect(queue.name).toEqual('test2');
});
});
});
});

describe('full flow (job handling)', () => {
const fakeProcessor = jest.fn();
let testingModule: TestingModule;
Expand All @@ -154,7 +361,8 @@ describe('BullModule', () => {
});

it('should process jobs with the given processors', async () => {
const queue: Queue = testingModule.get<Queue>(getQueueToken('full_flow'));
const queue = testingModule.get<Queue>(getQueueToken('full_flow'));

await queue.add(null);
return new Promise(resolve => {
setTimeout(() => {
Expand Down

0 comments on commit 7d281d9

Please sign in to comment.