Skip to content

Commit 9861f71

Browse files
fix: adding more test cases according to the feedback provided, negative cases
1 parent 1a3618b commit 9861f71

File tree

1 file changed

+58
-11
lines changed

1 file changed

+58
-11
lines changed

test/ActionParameterHandler.spec.ts

Lines changed: 58 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,16 @@ import {ActionParameterHandler} from "../src/ActionParameterHandler";
22
import {ActionMetadata, ControllerMetadata, ExpressDriver, ParamMetadata} from "../src";
33
import {ActionMetadataArgs} from "../src/metadata/args/ActionMetadataArgs";
44
import {ControllerMetadataArgs} from "../src/metadata/args/ControllerMetadataArgs";
5+
import {ParamType} from "../src/metadata/types/ParamType";
56

67
const expect = require("chakram").expect;
78

89
describe("ActionParameterHandler", () => {
9-
const buildParamMetadata = (): ParamMetadata => {
10+
const buildParamMetadata = (
11+
name: string = "id",
12+
type: ParamType = "param",
13+
isRequired: boolean = false,
14+
): ParamMetadata => {
1015
const controllerMetadataArgs: ControllerMetadataArgs = {
1116
target: function () {
1217
},
@@ -27,6 +32,8 @@ describe("ActionParameterHandler", () => {
2732
const actionMetadata = new ActionMetadata(controllerMetadata, args, {});
2833

2934
return {
35+
type,
36+
name,
3037
targetName: "product",
3138
isTargetObject: true,
3239
actionMetadata,
@@ -36,10 +43,8 @@ describe("ActionParameterHandler", () => {
3643
object: "getProduct",
3744
extraOptions: undefined,
3845
index: 0,
39-
type: "param",
40-
name: "id",
4146
parse: undefined,
42-
required: false,
47+
required: isRequired,
4348
transform: function (action, value) {
4449
return value;
4550
},
@@ -53,45 +58,45 @@ describe("ActionParameterHandler", () => {
5358
it("handle - should process string parameters", async () => {
5459
const driver = new ExpressDriver();
5560
const actionParameterHandler = new ActionParameterHandler(driver);
56-
const param = buildParamMetadata();
61+
const param = buildParamMetadata("uuid");
5762

5863
const action = {
5964
request: {
6065
params: {
61-
id: "0b5ec98f-e26d-4414-b798-dcd35a5ef859",
66+
uuid: "0b5ec98f-e26d-4414-b798-dcd35a5ef859",
6267
},
6368
},
6469
response: {},
6570
};
6671

6772
const processedValue = await actionParameterHandler.handle(action, param);
6873

69-
expect(processedValue).to.be.eq(action.request.params.id);
74+
expect(processedValue).to.be.eq(action.request.params.uuid);
7075
});
7176

7277
it("handle - should process string parameters, returns empty if a given string is empty", async () => {
7378
const driver = new ExpressDriver();
7479
const actionParameterHandler = new ActionParameterHandler(driver);
75-
const param = buildParamMetadata();
80+
const param = buildParamMetadata("uuid");
7681

7782
const action = {
7883
request: {
7984
params: {
80-
id: "",
85+
uuid: "",
8186
},
8287
},
8388
response: {},
8489
};
8590

8691
const processedValue = await actionParameterHandler.handle(action, param);
8792

88-
expect(processedValue).to.be.eq(action.request.params.id);
93+
expect(processedValue).to.be.eq(action.request.params.uuid);
8994
});
9095

9196
it("handle - should process number parameters", async () => {
9297
const driver = new ExpressDriver();
9398
const actionParameterHandler = new ActionParameterHandler(driver);
94-
const param = buildParamMetadata();
99+
const param = buildParamMetadata("id");
95100

96101
const action = {
97102
request: {
@@ -124,4 +129,46 @@ describe("ActionParameterHandler", () => {
124129
expect(processedValue).to.be.eq(undefined);
125130
});
126131

132+
it("handle - throws error if the parameter is required", async () => {
133+
const driver = new ExpressDriver();
134+
const actionParameterHandler = new ActionParameterHandler(driver);
135+
const param = buildParamMetadata("uuid", "param", true);
136+
137+
const action = {
138+
request: {},
139+
response: {},
140+
};
141+
let error;
142+
143+
try {
144+
await actionParameterHandler.handle(action, param);
145+
} catch (e) {
146+
error = e;
147+
}
148+
149+
expect(error.toString()).to.be.eq('TypeError: Cannot read property \'uuid\' of undefined');
150+
});
151+
152+
it("handle - throws error if the parameter is required, type file provided", async () => {
153+
const driver = new ExpressDriver();
154+
const actionParameterHandler = new ActionParameterHandler(driver);
155+
const param = buildParamMetadata("uuid", "file", true);
156+
157+
const action = {
158+
request: {},
159+
response: {},
160+
};
161+
let error;
162+
163+
try {
164+
await actionParameterHandler.handle(action, param);
165+
} catch (e) {
166+
error = e;
167+
}
168+
169+
expect(error.httpCode).to.be.eq(400);
170+
expect(error.name).to.be.eq("ParamRequiredError");
171+
expect(error.message).to.be.eq("Uploaded file \"uuid\" is required for request on undefined undefined");
172+
});
173+
127174
});

0 commit comments

Comments
 (0)