Skip to content

Commit 62978f8

Browse files
test(microservices): add e2e tests for record builders
1 parent 5ed9e93 commit 62978f8

18 files changed

Lines changed: 184 additions & 12 deletions

File tree

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import { INestApplication } from '@nestjs/common';
2+
import { Transport } from '@nestjs/microservices';
3+
import { Test } from '@nestjs/testing';
4+
import * as request from 'supertest';
5+
import { MqttController } from '../src/mqtt/mqtt.controller';
6+
7+
describe('MQTT transport', () => {
8+
let server;
9+
let app: INestApplication;
10+
11+
beforeEach(async () => {
12+
const module = await Test.createTestingModule({
13+
controllers: [MqttController],
14+
}).compile();
15+
16+
app = module.createNestApplication();
17+
server = app.getHttpAdapter().getInstance();
18+
19+
app.connectMicroservice({
20+
transport: Transport.MQTT,
21+
options: {
22+
url: 'mqtt://0.0.0.0:1883',
23+
subscribeOptions: {
24+
qos: 1,
25+
},
26+
},
27+
});
28+
await app.startAllMicroservices();
29+
await app.init();
30+
});
31+
32+
it(`/POST (setting packet options with "RecordBuilder")`, () => {
33+
const payload = { items: [1, 2, 3] };
34+
return request(server)
35+
.post('/record-builder-duplex')
36+
.send(payload)
37+
.expect(200, {
38+
data: payload,
39+
qos: 1,
40+
});
41+
});
42+
43+
afterEach(async () => {
44+
await app.close();
45+
});
46+
});

integration/microservices/e2e/sum-nats.spec.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,19 @@ describe('NATS transport', () => {
9696
});
9797
});
9898

99+
it(`/POST (sending headers with "RecordBuilder")`, () => {
100+
const payload = { items: [1, 2, 3] };
101+
return request(server)
102+
.post('/record-builder-duplex')
103+
.send(payload)
104+
.expect(200, {
105+
data: payload,
106+
headers: {
107+
['x-version']: '1.0.0',
108+
},
109+
});
110+
});
111+
99112
afterEach(async () => {
100113
await app.close();
101114
});

integration/microservices/e2e/sum-rmq.spec.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,20 @@ describe('RabbitMQ transport', () => {
8989
});
9090
});
9191

92+
it(`/POST (sending options with "RecordBuilder")`, () => {
93+
const payload = { items: [1, 2, 3] };
94+
return request(server)
95+
.post('/record-builder-duplex')
96+
.send(payload)
97+
.expect(200, {
98+
data: payload,
99+
headers: {
100+
['x-version']: '1.0.0',
101+
},
102+
priority: 3,
103+
});
104+
});
105+
92106
afterEach(async () => {
93107
await app.close();
94108
});

integration/microservices/src/mqtt/mqtt.controller.ts

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,12 @@ import { Body, Controller, HttpCode, Post, Query } from '@nestjs/common';
22
import {
33
Client,
44
ClientProxy,
5+
Ctx,
56
EventPattern,
67
MessagePattern,
8+
MqttContext,
9+
MqttRecordBuilder,
10+
Payload,
711
Transport,
812
} from '@nestjs/microservices';
913
import { from, lastValueFrom, Observable, of } from 'rxjs';
@@ -32,7 +36,7 @@ export class MqttController {
3236
@HttpCode(200)
3337
async stream(@Body() data: number[]) {
3438
const result = lastValueFrom(
35-
await this.client
39+
this.client
3640
.send<number>({ cmd: 'streaming' }, data)
3741
.pipe(scan((a, b) => a + b, 0)),
3842
);
@@ -86,6 +90,25 @@ export class MqttController {
8690
return this.client.send<number>('wildcard-message2/test/test', data);
8791
}
8892

93+
@Post('record-builder-duplex')
94+
@HttpCode(200)
95+
useRecordBuilderDuplex(@Body() data: Record<string, any>) {
96+
const record = new MqttRecordBuilder(data).setQoS(2).build();
97+
return this.client.send('record-builder-duplex', record);
98+
}
99+
100+
@MessagePattern('record-builder-duplex')
101+
handleRecordBuilderDuplex(
102+
@Payload() data: Record<string, any>,
103+
@Ctx() context: MqttContext,
104+
) {
105+
const { qos } = context.getPacket();
106+
return {
107+
data,
108+
qos,
109+
};
110+
}
111+
89112
@MessagePattern('wildcard-message/#')
90113
wildcardMessageHandler(data: number[]): number {
91114
if ((data as any).response) {

integration/microservices/src/nats/nats.controller.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@ import {
66
EventPattern,
77
MessagePattern,
88
NatsContext,
9+
NatsRecordBuilder,
910
Payload,
1011
RpcException,
1112
Transport,
1213
} from '@nestjs/microservices';
14+
import * as nats from 'nats';
1315
import { from, lastValueFrom, Observable, of, throwError } from 'rxjs';
1416
import { catchError, scan } from 'rxjs/operators';
1517
import { NatsService } from './nats.service';
@@ -62,6 +64,28 @@ export class NatsController {
6264
.reduce(async (a, b) => (await a) && b);
6365
}
6466

67+
@Post('record-builder-duplex')
68+
@HttpCode(200)
69+
useRecordBuilderDuplex(@Body() data: Record<string, any>) {
70+
const headers = nats.headers();
71+
headers.set('x-version', '1.0.0');
72+
const record = new NatsRecordBuilder(data).setHeaders(headers).build();
73+
return this.client.send('record-builder-duplex', record);
74+
}
75+
76+
@MessagePattern('record-builder-duplex')
77+
handleRecordBuilderDuplex(
78+
@Payload() data: Record<string, any>,
79+
@Ctx() context: NatsContext,
80+
) {
81+
return {
82+
data,
83+
headers: {
84+
['x-version']: context.getHeaders().get('x-version'),
85+
},
86+
};
87+
}
88+
6589
@MessagePattern('math.*')
6690
sum(@Payload() data: number[], @Ctx() context: NatsContext): number {
6791
return (data || []).reduce((a, b) => a + b);

integration/microservices/src/rmq/rmq.controller.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,12 @@ import { Body, Controller, HttpCode, Post, Query } from '@nestjs/common';
22
import {
33
ClientProxy,
44
ClientProxyFactory,
5+
Ctx,
56
EventPattern,
67
MessagePattern,
8+
Payload,
9+
RmqContext,
10+
RmqRecordBuilder,
711
Transport,
812
} from '@nestjs/microservices';
913
import { from, lastValueFrom, Observable, of } from 'rxjs';
@@ -57,6 +61,34 @@ export class RMQController {
5761
.reduce(async (a, b) => (await a) && b);
5862
}
5963

64+
@Post('record-builder-duplex')
65+
@HttpCode(200)
66+
useRecordBuilderDuplex(@Body() data: Record<string, any>) {
67+
const record = new RmqRecordBuilder(data)
68+
.setOptions({
69+
headers: {
70+
['x-version']: '1.0.0',
71+
},
72+
priority: 3,
73+
})
74+
.build();
75+
76+
return this.client.send('record-builder-duplex', record);
77+
}
78+
79+
@MessagePattern('record-builder-duplex')
80+
handleRecordBuilderDuplex(
81+
@Payload() data: Record<string, any>,
82+
@Ctx() context: RmqContext,
83+
) {
84+
const originalMessage = context.getMessage();
85+
return {
86+
data,
87+
headers: originalMessage.properties.headers,
88+
priority: originalMessage.properties.priority,
89+
};
90+
}
91+
6092
@MessagePattern({ cmd: 'sum' })
6193
sum(data: number[]): number {
6294
return (data || []).reduce((a, b) => a + b);

packages/common/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*
22
* Nest @common
3-
* Copyright(c) 2017 - 2020 Kamil Mysliwiec
3+
* Copyright(c) 2017 - 2021 Kamil Mysliwiec
44
* https://nestjs.com
55
* MIT Licensed
66
*/

packages/core/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*
22
* Nest @core
3-
* Copyright(c) 2017 - 2020 Kamil Mysliwiec
3+
* Copyright(c) 2017 - 2021 Kamil Mysliwiec
44
* https://nestjs.com
55
* MIT Licensed
66
*/

packages/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*
22
* Nest
3-
* Copyright(c) 2017 - 2020 Kamil Mysliwiec
3+
* Copyright(c) 2017 - 2021 Kamil Mysliwiec
44
* https://nestjs.com
55
* MIT Licensed
66
*/

packages/microservices/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*
22
* Nest @microservices
3-
* Copyright(c) 2017 - 2020 Kamil Mysliwiec
3+
* Copyright(c) 2017 - 2021 Kamil Mysliwiec
44
* https://nestjs.com
55
* MIT Licensed
66
*/
@@ -15,5 +15,6 @@ export * from './helpers';
1515
export * from './interfaces';
1616
export * from './module';
1717
export * from './nest-microservice';
18+
export * from './record-builders';
1819
export * from './server';
1920
export * from './tokens';

0 commit comments

Comments
 (0)