Skip to content
This repository has been archived by the owner on Jul 12, 2024. It is now read-only.

Commit

Permalink
Fix empty rules with AND operator intercepting
Browse files Browse the repository at this point in the history
Closes #6
  • Loading branch information
Guillaume committed May 6, 2021
1 parent c68755b commit 9e6fb64
Show file tree
Hide file tree
Showing 4 changed files with 60 additions and 9 deletions.
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@mockoon/commons-server",
"description": "Mockoon's commons server library. Used in Mockoon desktop application and CLI.",
"version": "1.1.0",
"version": "1.1.1",
"author": {
"name": "Guillaume Monnet",
"email": "hi@255kb.dev",
Expand Down
16 changes: 10 additions & 6 deletions src/libs/response-rules-interpreter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,15 +46,19 @@ export class ResponseRulesInterpreter {
(requestNumber - 1) % this.routeResponses.length
];
} else {
let response = this.routeResponses.find((routeResponse) =>
routeResponse.rulesOperator === 'AND'
? !!routeResponse.rules.every((rule) =>
let response = this.routeResponses.find((routeResponse) => {
if (routeResponse.rules.length === 0) {
return false;
}

return routeResponse.rulesOperator === 'AND'
? routeResponse.rules.every((rule) =>
this.isValidRule(rule, requestNumber)
)
: !!routeResponse.rules.find((rule) =>
: routeResponse.rules.some((rule) =>
this.isValidRule(rule, requestNumber)
)
);
);
});

if (response === undefined) {
response = this.routeResponses[0];
Expand Down
47 changes: 47 additions & 0 deletions test/response-rules-interpreter.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1792,5 +1792,52 @@ describe('Response rules interpreter', () => {
).chooseResponse(1);
expect(routeResponse.body).to.be.equal('unauthorized');
});

it('should return second response if first one has no rule with AND', () => {
/**
* This test is here to prevent a bug that occured when first response had no rule but a AND operator.
* It intercepted everything and prevented to get the correct response.
* See https://github.com/mockoon/commons-server/issues/6
*/
const request: Request = {
header: function (headerName: string) {
const headers = {
'Content-Type': 'application/json',
'Test-Header': 'headervalue'
};

return headers[headerName];
},
body: '{ "test": "bodyvalue" }'
} as Request;

const routeResponse = new ResponseRulesInterpreter(
[
{
...routeResponseTemplate,
rules: [],
rulesOperator: 'AND',
body: 'response1'
},
{
...routeResponseTemplate,
rules: [
{
target: 'body',
modifier: 'test',
value: 'bodyvalue',
isRegex: false
}
],
rulesOperator: 'OR',
body: 'response2'
}
],
request,
false,
false
).chooseResponse(1);
expect(routeResponse.body).to.be.equal('response2');
});
});
});

0 comments on commit 9e6fb64

Please sign in to comment.