Skip to content

Commit c185a5b

Browse files
refactor: added validations to middleware factories (#4)
1 parent 0fb9147 commit c185a5b

File tree

2 files changed

+144
-4
lines changed

2 files changed

+144
-4
lines changed

lib/fixtureGenerator.js

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,15 @@ const createFixture = async (serviceManager) => {
1717
stop: () => {},
1818
middlewares: _.mapValues(middlewares, (service) =>
1919
_.mapValues(service, (method) => {
20+
let methodStub;
21+
2022
if (method.callback) {
21-
const callbackMock = sinon.stub().returns(sinon.stub().callsArg(2));
22-
callbackMock.callback = true;
23-
return callbackMock;
23+
methodStub = sinon.stub().returns(sinon.stub().callsArg(2));
24+
methodStub.callback = true;
25+
} else {
26+
methodStub = sinon.stub().callsArg(2);
2427
}
2528

26-
const methodStub = sinon.stub().callsArg(2);
2729
methodStub.validations = _.mapValues(method.validations, () => sinon.stub().callsArg(2));
2830

2931
return [...Object.values(methodStub.validations), methodStub];

tests/lib/fixtureGenerator.unit.js

Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
'use strict';
2+
3+
/* eslint-disable no-unused-expressions */
4+
5+
const { expect } = require('chai');
6+
7+
const { FixtureGenerator } = require('../../lib');
8+
9+
describe('createFixture', () => {
10+
it('returns correct fixtures', async () => {
11+
// middleware factory
12+
const method2 = () => () => {};
13+
method2.callback = true;
14+
// middleware validations
15+
const method3 = () => {};
16+
method3.validations = {
17+
validation1: () => {},
18+
validation2: () => {},
19+
};
20+
21+
const controllerMethod2 = () => {};
22+
controllerMethod2.validations = {
23+
validation1: () => {},
24+
};
25+
26+
const serviceManager = {
27+
middlewares: {
28+
middleware1: {
29+
method1: () => {},
30+
method2,
31+
method3,
32+
},
33+
},
34+
controllers: {
35+
controller1: {
36+
method1: () => {},
37+
method2: controllerMethod2,
38+
},
39+
},
40+
};
41+
const generatedFixtures = await FixtureGenerator.createFixture(serviceManager);
42+
// console.log(generatedFixtures);
43+
expect(typeof generatedFixtures.start).to.eql('function');
44+
expect(typeof generatedFixtures.stop).to.eql('function');
45+
expect(generatedFixtures.services).to.eql({ socket: null });
46+
expect(typeof generatedFixtures.clients.io.bindEvents).to.eql('function');
47+
expect(typeof generatedFixtures.clients.socketio.attach).to.eql('function');
48+
// middlewares
49+
expect(Object.keys(generatedFixtures.middlewares.middleware1)).to.eql(['method1', 'method2', 'method3']);
50+
expect(generatedFixtures.middlewares.middleware1.method1[0].callCount).to.eql(0); // check that stub is generated
51+
expect(generatedFixtures.middlewares.middleware1.method2[0]().callCount).to.eql(0); // check that stub factory is generated
52+
expect(generatedFixtures.middlewares.middleware1.method3.length).to.eql(3); // validations are added (2 validations + 1 middleware)
53+
const middlewareStub3 = generatedFixtures.middlewares.middleware1.method3[2];
54+
expect(middlewareStub3.validations.validation1.callCount).to.eql(0); // check that validation stub is generated
55+
expect(middlewareStub3.validations.validation2.callCount).to.eql(0); // check that validation stub is generated
56+
// controllers
57+
expect(Object.keys(generatedFixtures.controllers.controller1)).to.eql(['method1', 'method2']);
58+
expect(generatedFixtures.controllers.controller1.method1[0].callCount).to.eql(0); // check that stub is generated
59+
expect(generatedFixtures.controllers.controller1.method2[0].callCount).to.eql(0); // check that stub is generated
60+
expect(generatedFixtures.controllers.controller1.method2.length).to.eql(2); // validations are added (1 validations + 1 controller)
61+
// check that validation stub is generated
62+
expect(generatedFixtures.controllers.controller1.method2[1].validations.validation1.callCount).to.eql(0);
63+
});
64+
});
65+
66+
describe('checkFixtures', () => {
67+
it('asserts correctly', async () => {
68+
// middleware factory
69+
const method2 = () => () => {};
70+
method2.callback = true;
71+
// middleware validations
72+
const method3 = () => {};
73+
method3.validations = {
74+
validation1: () => {},
75+
validation2: () => {},
76+
};
77+
78+
const controllerMethod2 = () => {};
79+
controllerMethod2.validations = {
80+
validation1: () => {},
81+
};
82+
83+
const serviceManager = {
84+
middlewares: {
85+
middleware1: {
86+
method1: () => {},
87+
method2,
88+
method3,
89+
},
90+
},
91+
controllers: {
92+
controller1: {
93+
method1: () => {},
94+
method2: controllerMethod2,
95+
},
96+
},
97+
};
98+
const generatedFixtures = await FixtureGenerator.createFixture(serviceManager);
99+
await generatedFixtures.middlewares.middleware1.method1[0](null, null, () => {}); // call middleware1.method1
100+
await generatedFixtures.middlewares.middleware1.method2[0]()(null, null, () => {}); // call middleware1.method2
101+
await generatedFixtures.middlewares.middleware1.method3[0](null, null, () => {}); // call validation1 on middleware1.method3
102+
await generatedFixtures.controllers.controller1.method2[1](null, { json: (body) => body }, () => {}); // call controller1.method2
103+
await generatedFixtures.controllers.controller1.method2[0](null, null, () => {}); // call validation1 on controller1.method2
104+
105+
// console.log('generatedFixtures', generatedFixtures.middlewares.middleware1.method1[0]);
106+
const expected = {
107+
middlewares: {
108+
middleware1: {
109+
method1: 1,
110+
method2: 1,
111+
},
112+
},
113+
controllers: {
114+
controller1: {
115+
method2: 1,
116+
},
117+
},
118+
validations: {
119+
middlewares: {
120+
middleware1: {
121+
method3: {
122+
validation1: 1,
123+
},
124+
},
125+
},
126+
controllers: {
127+
controller1: {
128+
method2: {
129+
validation1: 1,
130+
},
131+
},
132+
},
133+
},
134+
};
135+
136+
await FixtureGenerator.checkFixture(generatedFixtures, expected);
137+
});
138+
});

0 commit comments

Comments
 (0)