Skip to content

Commit 1a3618b

Browse files
fix: adding more test cases according to the feedback provided, cs improvements
1 parent 5701639 commit 1a3618b

File tree

2 files changed

+99
-37
lines changed

2 files changed

+99
-37
lines changed

src/ActionParameterHandler.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,10 +96,8 @@ export class ActionParameterHandler<T extends BaseDriver> {
9696
protected async normalizeParamValue(value: any, param: ParamMetadata): Promise<any> {
9797
if (value === null || value === undefined) return value;
9898

99-
const isNormalisationNeeded =
100-
typeof value === 'object' &&
101-
['queries', 'headers', 'params', 'cookies'].some(paramType => paramType === param.type);
102-
const isTargetPrimitive = ['number', 'string', 'boolean'].indexOf(param.targetName) > -1;
99+
const isNormalisationNeeded = typeof value === 'object' && ['queries', 'headers', 'params', 'cookies'].includes(param.type);
100+
const isTargetPrimitive = ['number', 'string', 'boolean'].includes(param.targetName);
103101
const isTransformationNeeded = (param.parse || param.isTargetObject) && param.type !== 'param';
104102

105103
// if param value is an object and param type match, normalize its string properties

test/ActionParameterHandler.spec.ts

Lines changed: 97 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,63 +1,127 @@
1-
import { ActionParameterHandler } from '../src/ActionParameterHandler';
2-
import { ActionMetadata, ControllerMetadata, ExpressDriver, ParamMetadata } from '../src';
3-
import { ActionMetadataArgs } from '../src/metadata/args/ActionMetadataArgs';
4-
import { ControllerMetadataArgs } from '../src/metadata/args/ControllerMetadataArgs';
1+
import {ActionParameterHandler} from "../src/ActionParameterHandler";
2+
import {ActionMetadata, ControllerMetadata, ExpressDriver, ParamMetadata} from "../src";
3+
import {ActionMetadataArgs} from "../src/metadata/args/ActionMetadataArgs";
4+
import {ControllerMetadataArgs} from "../src/metadata/args/ControllerMetadataArgs";
55

6-
const expect = require('chakram').expect;
6+
const expect = require("chakram").expect;
77

8-
describe('ActionParameterHandler', () => {
9-
it('handle', async () => {
10-
const driver = new ExpressDriver();
11-
const actionParameterHandler = new ActionParameterHandler(driver);
12-
13-
const action = {
14-
request: {
15-
params: {
16-
id: '0b5ec98f-e26d-4414-b798-dcd35a5ef859',
17-
},
18-
},
19-
response: {},
20-
};
8+
describe("ActionParameterHandler", () => {
9+
const buildParamMetadata = (): ParamMetadata => {
2110
const controllerMetadataArgs: ControllerMetadataArgs = {
22-
target: function () {},
23-
route: '',
24-
type: 'json',
11+
target: function () {
12+
},
13+
route: "",
14+
type: "json",
2515
options: {},
2616
};
2717
const controllerMetadata = new ControllerMetadata(controllerMetadataArgs);
2818
const args: ActionMetadataArgs = {
29-
route: '',
30-
method: 'getProduct',
19+
route: "",
20+
method: "getProduct",
3121
options: {},
32-
target: function () {},
33-
type: 'get',
22+
target: function () {
23+
},
24+
type: "get",
3425
appendParams: undefined,
3526
};
3627
const actionMetadata = new ActionMetadata(controllerMetadata, args, {});
3728

38-
const param: ParamMetadata = {
39-
targetName: 'product',
29+
return {
30+
targetName: "product",
4031
isTargetObject: true,
4132
actionMetadata,
42-
target: () => {},
43-
method: 'getProduct',
44-
object: 'getProduct',
33+
target: () => {
34+
},
35+
method: "getProduct",
36+
object: "getProduct",
4537
extraOptions: undefined,
4638
index: 0,
47-
type: 'param',
48-
name: 'id',
39+
type: "param",
40+
name: "id",
4941
parse: undefined,
5042
required: false,
5143
transform: function (action, value) {
5244
return value;
5345
},
5446
classTransform: undefined,
5547
validate: undefined,
56-
targetType: function () {},
48+
targetType: function () {
49+
},
50+
};
51+
};
52+
53+
it("handle - should process string parameters", async () => {
54+
const driver = new ExpressDriver();
55+
const actionParameterHandler = new ActionParameterHandler(driver);
56+
const param = buildParamMetadata();
57+
58+
const action = {
59+
request: {
60+
params: {
61+
id: "0b5ec98f-e26d-4414-b798-dcd35a5ef859",
62+
},
63+
},
64+
response: {},
5765
};
5866

5967
const processedValue = await actionParameterHandler.handle(action, param);
6068

6169
expect(processedValue).to.be.eq(action.request.params.id);
6270
});
71+
72+
it("handle - should process string parameters, returns empty if a given string is empty", async () => {
73+
const driver = new ExpressDriver();
74+
const actionParameterHandler = new ActionParameterHandler(driver);
75+
const param = buildParamMetadata();
76+
77+
const action = {
78+
request: {
79+
params: {
80+
id: "",
81+
},
82+
},
83+
response: {},
84+
};
85+
86+
const processedValue = await actionParameterHandler.handle(action, param);
87+
88+
expect(processedValue).to.be.eq(action.request.params.id);
89+
});
90+
91+
it("handle - should process number parameters", async () => {
92+
const driver = new ExpressDriver();
93+
const actionParameterHandler = new ActionParameterHandler(driver);
94+
const param = buildParamMetadata();
95+
96+
const action = {
97+
request: {
98+
params: {
99+
id: 10000,
100+
},
101+
},
102+
response: {},
103+
};
104+
105+
const processedValue = await actionParameterHandler.handle(action, param);
106+
107+
expect(processedValue).to.be.eq(action.request.params.id);
108+
});
109+
110+
it("handle - undefined on empty object provided", async () => {
111+
const driver = new ExpressDriver();
112+
const actionParameterHandler = new ActionParameterHandler(driver);
113+
const param = buildParamMetadata();
114+
115+
const action = {
116+
request: {
117+
params: {},
118+
},
119+
response: {},
120+
};
121+
122+
const processedValue = await actionParameterHandler.handle(action, param);
123+
124+
expect(processedValue).to.be.eq(undefined);
125+
});
126+
63127
});

0 commit comments

Comments
 (0)