From 020e102dc14aa30b24d8fadda2494243def70604 Mon Sep 17 00:00:00 2001 From: "ed.t" Date: Mon, 28 Aug 2023 22:48:28 +0200 Subject: [PATCH] 1123: [Feature] Make filter helper works with nested objects --- .../libs/templating-helpers/helpers/filter.ts | 2 +- .../suites/templating-helpers/helpers.spec.ts | 24 +++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/packages/commons-server/src/libs/templating-helpers/helpers/filter.ts b/packages/commons-server/src/libs/templating-helpers/helpers/filter.ts index f7b25f15d..5a61ec87a 100644 --- a/packages/commons-server/src/libs/templating-helpers/helpers/filter.ts +++ b/packages/commons-server/src/libs/templating-helpers/helpers/filter.ts @@ -23,7 +23,7 @@ const filter = function (...args) { if (typeof payload === 'object') { const keys = Object.keys(condition); - return keys.every((k) => payload[k] === condition[k]); + return keys.every((k) => validate(payload[k], condition[k])); } return false; diff --git a/packages/commons-server/test/suites/templating-helpers/helpers.spec.ts b/packages/commons-server/test/suites/templating-helpers/helpers.spec.ts index ff81bbeab..5c1207a3c 100644 --- a/packages/commons-server/test/suites/templating-helpers/helpers.spec.ts +++ b/packages/commons-server/test/suites/templating-helpers/helpers.spec.ts @@ -2388,5 +2388,29 @@ describe('Template parser', () => { JSON.stringify([{ b: 'b1', a: 'a1' }, 3], null, 2) ); }); + + it('should return correctly return array filtered by nested values', () => { + const parseResult = TemplateParser( + false, + '{{{ stringify (filter (array (object parent=(object child="child-val") b="b1") (object parent=(object child="child-val2") b="b2") 2 3) (object parent=(object child="child-val"))) }}}', + {} as any, + [], + {} as any + ); + expect(parseResult).to.be.equal( + JSON.stringify([{ b: 'b1', parent: { child: 'child-val' } }], null, 2) + ); + }); + + it('should return correctly return array filtered array when nested value not equals', () => { + const parseResult = TemplateParser( + false, + '{{{ stringify (filter (array (object parent=(object child="child-val") b="b1") (object parent=(object child="child-val2") b="b2") 2 3) (object parent="parent-val")) }}}', + {} as any, + [], + {} as any + ); + expect(parseResult).to.be.equal(JSON.stringify([], null, 2)); + }); }); });