Skip to content

Commit 2561f60

Browse files
authored
fix(util-endpoints): populate default params before checking for required values (#3928)
1 parent 6054bfa commit 2561f60

File tree

2 files changed

+42
-14
lines changed

2 files changed

+42
-14
lines changed

packages/util-endpoints/src/resolveEndpoint.spec.ts

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,21 @@ describe(resolveEndpoint.name, () => {
5252
jest.resetAllMocks();
5353
});
5454

55+
it("should use the default value if a parameter is not set", () => {
56+
const { paramWithDefaultKey: ignored, ...endpointParamsWithoutDefault } = mockEndpointParams;
57+
58+
const resolvedEndpoint = resolveEndpoint(mockRuleSetObject, { endpointParams: endpointParamsWithoutDefault });
59+
expect(resolvedEndpoint).toEqual(mockResolvedEndpoint);
60+
61+
expect(evaluateRules).toHaveBeenCalledWith(mockRules, {
62+
endpointParams: {
63+
...mockEndpointParams,
64+
[paramWithDefaultKey]: mockRuleSetParameters[paramWithDefaultKey].default,
65+
},
66+
referenceRecord: {},
67+
});
68+
});
69+
5570
it("should throw an error if a required parameter is missing", () => {
5671
const { requiredParamKey: ignored, ...endpointParamsWithoutRequired } = mockEndpointParams;
5772
expect(() => resolveEndpoint(mockRuleSetObject, { endpointParams: endpointParamsWithoutRequired })).toThrow(
@@ -60,16 +75,29 @@ describe(resolveEndpoint.name, () => {
6075
expect(evaluateRules).not.toHaveBeenCalled();
6176
});
6277

63-
it("should use the default value if a parameter is not set", () => {
64-
const { paramWithDefaultKey: ignored, ...endpointParamsWithoutDefault } = mockEndpointParams;
78+
it("should not throw an error if a default value is available for required parameter", () => {
79+
const { requiredParamKey: ignored, ...endpointParamsWithoutRequired } = mockEndpointParams;
80+
const requiredParamDefaultValue = "requiredParamDefaultValue";
6581

66-
const resolvedEndpoint = resolveEndpoint(mockRuleSetObject, { endpointParams: endpointParamsWithoutDefault });
82+
const resolvedEndpoint = resolveEndpoint(
83+
{
84+
...mockRuleSetObject,
85+
parameters: {
86+
...mockRuleSetParameters,
87+
[requiredParamKey]: {
88+
...mockRuleSetParameters[requiredParamKey],
89+
default: requiredParamDefaultValue,
90+
},
91+
},
92+
},
93+
{ endpointParams: endpointParamsWithoutRequired }
94+
);
6795
expect(resolvedEndpoint).toEqual(mockResolvedEndpoint);
6896

6997
expect(evaluateRules).toHaveBeenCalledWith(mockRules, {
7098
endpointParams: {
7199
...mockEndpointParams,
72-
[paramWithDefaultKey]: mockRuleSetParameters[paramWithDefaultKey].default,
100+
[requiredParamKey]: requiredParamDefaultValue,
73101
},
74102
referenceRecord: {},
75103
});

packages/util-endpoints/src/resolveEndpoint.ts

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,6 @@ export const resolveEndpoint = (ruleSetObject: RuleSetObject, options: EndpointR
1010
const { endpointParams, logger } = options;
1111
const { parameters, rules } = ruleSetObject;
1212

13-
const requiredParams = Object.entries(parameters)
14-
.filter(([, v]) => v.required)
15-
.map(([k]) => k);
16-
17-
for (const requiredParam of requiredParams) {
18-
if (endpointParams[requiredParam] == null) {
19-
throw new EndpointError(`Missing required parameter: '${requiredParam}'`);
20-
}
21-
}
22-
2313
// @ts-ignore Type 'undefined' is not assignable to type 'string | boolean' (2322)
2414
const paramsWithDefault: [string, string | boolean][] = Object.entries(parameters)
2515
.filter(([, v]) => v.default != null)
@@ -31,5 +21,15 @@ export const resolveEndpoint = (ruleSetObject: RuleSetObject, options: EndpointR
3121
}
3222
}
3323

24+
const requiredParams = Object.entries(parameters)
25+
.filter(([, v]) => v.required)
26+
.map(([k]) => k);
27+
28+
for (const requiredParam of requiredParams) {
29+
if (endpointParams[requiredParam] == null) {
30+
throw new EndpointError(`Missing required parameter: '${requiredParam}'`);
31+
}
32+
}
33+
3434
return evaluateRules(rules, { endpointParams, logger, referenceRecord: {} });
3535
};

0 commit comments

Comments
 (0)