From 3efccad8a4b628ad65ac82e7c27cab1f1668741f Mon Sep 17 00:00:00 2001 From: Matt Date: Thu, 17 Oct 2024 10:33:51 +0200 Subject: [PATCH 1/6] refactor: test collections route --- .../routes/capabilities/collections_spec.rb | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/packages/forest_admin_agent/spec/lib/forest_admin_agent/routes/capabilities/collections_spec.rb b/packages/forest_admin_agent/spec/lib/forest_admin_agent/routes/capabilities/collections_spec.rb index 0d3b8165e..442576b37 100644 --- a/packages/forest_admin_agent/spec/lib/forest_admin_agent/routes/capabilities/collections_spec.rb +++ b/packages/forest_admin_agent/spec/lib/forest_admin_agent/routes/capabilities/collections_spec.rb @@ -66,6 +66,26 @@ module Capabilities it 'returns no collection' do expect(result[:content][:collections].length).to eq(0) end + + it 'returns the correct fields and operators for the user collection' do + user_collection = result[:content][:collections][0] + expect(user_collection[:name]).to eq('user') + + user_fields = user_collection[:fields] + expect(user_fields.length).to eq(3) + expect(user_fields[0]).to include(name: 'id', type: 'Number') + expect(user_fields[0][:operators]).to include('Equal', 'GreaterThan', 'LessThan', 'Blank', 'In', 'Missing') + end + + it 'returns the correct fields and operators for the book collection' do + book_collection = result[:content][:collections][1] + expect(book_collection[:name]).to eq('book') + + book_fields = book_collection[:fields] + expect(book_fields.length).to eq(5) + expect(book_fields[0]).to include(name: 'id', type: 'Number') + expect(book_fields[0][:operators]).to include('Equal', 'Blank', 'In', 'Missing') + end end context 'when there is collectionNames in params' do From 5deac97c7b1278adaa2500e0355ddcee04c388dd Mon Sep 17 00:00:00 2001 From: Matt Date: Thu, 17 Oct 2024 15:18:02 +0200 Subject: [PATCH 2/6] refactor: remove pascal_case on operators --- .../routes/capabilities/collections_spec.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/forest_admin_agent/spec/lib/forest_admin_agent/routes/capabilities/collections_spec.rb b/packages/forest_admin_agent/spec/lib/forest_admin_agent/routes/capabilities/collections_spec.rb index 442576b37..bc8faf80f 100644 --- a/packages/forest_admin_agent/spec/lib/forest_admin_agent/routes/capabilities/collections_spec.rb +++ b/packages/forest_admin_agent/spec/lib/forest_admin_agent/routes/capabilities/collections_spec.rb @@ -74,7 +74,7 @@ module Capabilities user_fields = user_collection[:fields] expect(user_fields.length).to eq(3) expect(user_fields[0]).to include(name: 'id', type: 'Number') - expect(user_fields[0][:operators]).to include('Equal', 'GreaterThan', 'LessThan', 'Blank', 'In', 'Missing') + expect(user_fields[0][:operators]).to include('equal', 'greater_than', 'less_than', 'blank', 'in', 'missing') end it 'returns the correct fields and operators for the book collection' do @@ -84,7 +84,7 @@ module Capabilities book_fields = book_collection[:fields] expect(book_fields.length).to eq(5) expect(book_fields[0]).to include(name: 'id', type: 'Number') - expect(book_fields[0][:operators]).to include('Equal', 'Blank', 'In', 'Missing') + expect(book_fields[0][:operators]).to include('equal', 'blank', 'in', 'missing') end end From 5296add0ddf3ffe86d0d6174607aa01bb151b4df Mon Sep 17 00:00:00 2001 From: Matt Date: Tue, 22 Oct 2024 14:30:04 +0200 Subject: [PATCH 3/6] feat(capabilities): add validation on filter conditionTree --- .../lib/forest_admin_agent/routes/resources/list.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/forest_admin_agent/lib/forest_admin_agent/routes/resources/list.rb b/packages/forest_admin_agent/lib/forest_admin_agent/routes/resources/list.rb index d2fc01c3e..e143f1d17 100644 --- a/packages/forest_admin_agent/lib/forest_admin_agent/routes/resources/list.rb +++ b/packages/forest_admin_agent/lib/forest_admin_agent/routes/resources/list.rb @@ -30,6 +30,8 @@ def handle_request(args = {}) segment: ForestAdminAgent::Utils::QueryStringParser.parse_segment(@collection, args) ) + ForestAdminDatasourceToolkit::Validations::ConditionTreeValidator.validate(filter.condition_tree, @collection) + projection = ForestAdminAgent::Utils::QueryStringParser.parse_projection_with_pks(@collection, args) records = @collection.list(@caller, filter, projection) From a3a9668a678ded4b4dc03dd0c05b72cc565552c1 Mon Sep 17 00:00:00 2001 From: Matt Date: Tue, 22 Oct 2024 14:50:51 +0200 Subject: [PATCH 4/6] fix: validator on list --- .../lib/forest_admin_agent/routes/resources/list.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/forest_admin_agent/lib/forest_admin_agent/routes/resources/list.rb b/packages/forest_admin_agent/lib/forest_admin_agent/routes/resources/list.rb index e143f1d17..41bbdde6b 100644 --- a/packages/forest_admin_agent/lib/forest_admin_agent/routes/resources/list.rb +++ b/packages/forest_admin_agent/lib/forest_admin_agent/routes/resources/list.rb @@ -5,6 +5,7 @@ module Routes module Resources class List < AbstractAuthenticatedRoute include ForestAdminDatasourceToolkit::Components::Query::ConditionTree + include ForestAdminDatasourceToolkit::Validations def setup_routes add_route('forest_list', 'get', '/:collection_name', ->(args) { handle_request(args) }) @@ -30,7 +31,7 @@ def handle_request(args = {}) segment: ForestAdminAgent::Utils::QueryStringParser.parse_segment(@collection, args) ) - ForestAdminDatasourceToolkit::Validations::ConditionTreeValidator.validate(filter.condition_tree, @collection) + ConditionTreeValidator.validate(filter.condition_tree, @collection) if filter.condition_tree projection = ForestAdminAgent::Utils::QueryStringParser.parse_projection_with_pks(@collection, args) records = @collection.list(@caller, filter, projection) From a25c8f90e3b1705762e1ecae999f7f5276fda361 Mon Sep 17 00:00:00 2001 From: Matt Date: Thu, 24 Oct 2024 12:00:39 +0200 Subject: [PATCH 5/6] fix: ensure correct values are returned for user tags in context variables --- .../lib/forest_admin_agent/utils/context_variables.rb | 4 ++-- .../utils/context_variables_injector_spec.rb | 4 ++-- .../lib/forest_admin_agent/utils/context_variables_spec.rb | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/forest_admin_agent/lib/forest_admin_agent/utils/context_variables.rb b/packages/forest_admin_agent/lib/forest_admin_agent/utils/context_variables.rb index d1e731b5e..785981d7c 100644 --- a/packages/forest_admin_agent/lib/forest_admin_agent/utils/context_variables.rb +++ b/packages/forest_admin_agent/lib/forest_admin_agent/utils/context_variables.rb @@ -29,9 +29,9 @@ def get_current_user_data(context_variable_key) end if context_variable_key.start_with?(USER_VALUE_TAG_PREFIX) + tag_key = context_variable_key[USER_VALUE_TAG_PREFIX.length..] user[:tags].each do |tag| - match_key = context_variable_key[USER_VALUE_TAG_PREFIX.length..] - return tag[match_key] if tag.key?(match_key) + return tag['value'] if tag['key'] == tag_key end end diff --git a/packages/forest_admin_agent/spec/lib/forest_admin_agent/utils/context_variables_injector_spec.rb b/packages/forest_admin_agent/spec/lib/forest_admin_agent/utils/context_variables_injector_spec.rb index 300566b99..8234c7f65 100644 --- a/packages/forest_admin_agent/spec/lib/forest_admin_agent/utils/context_variables_injector_spec.rb +++ b/packages/forest_admin_agent/spec/lib/forest_admin_agent/utils/context_variables_injector_spec.rb @@ -12,7 +12,7 @@ module Utils 'lastName' => 'Doe', 'fullName' => 'John Doe', 'email' => 'john.doe@domain.com', - 'tags' => [{ 'planet' => 'Death Star' }], + 'tags' => [{ 'key' => 'planet', 'value' => 'Death Star' }], 'roleId' => 1, 'permissionLevel' => 'admin' } @@ -89,7 +89,7 @@ module Utils { key: 'id', expected_value: user['id'] }, { key: 'permissionLevel', expected_value: user['permissionLevel'] }, { key: 'roleId', expected_value: user['roleId'] }, - { key: 'tags.planet', expected_value: user['tags'][0]['planet'] }, + { key: 'tags.planet', expected_value: user['tags'][0]['value'] }, { key: 'team.id', expected_value: team['id'] }, { key: 'team.name', expected_value: team['name'] } ].each do |value| diff --git a/packages/forest_admin_agent/spec/lib/forest_admin_agent/utils/context_variables_spec.rb b/packages/forest_admin_agent/spec/lib/forest_admin_agent/utils/context_variables_spec.rb index 598ef6c99..6ac7af465 100644 --- a/packages/forest_admin_agent/spec/lib/forest_admin_agent/utils/context_variables_spec.rb +++ b/packages/forest_admin_agent/spec/lib/forest_admin_agent/utils/context_variables_spec.rb @@ -10,7 +10,7 @@ module Utils lastName: 'Doe', fullName: 'John Doe', email: 'johndoe@forestadmin.com', - tags: [{ 'foo' => 'bar' }], + tags: [{ 'key' => 'foo', 'value' => 'bar' }], roleId: 1, permissionLevel: 'admin' } From 1428c709d8d3b713ccf264a63ed303482984c617 Mon Sep 17 00:00:00 2001 From: Matt Date: Mon, 28 Oct 2024 10:54:46 +0100 Subject: [PATCH 6/6] fix: test --- .../routes/capabilities/collections_spec.rb | 25 +++---------------- 1 file changed, 4 insertions(+), 21 deletions(-) diff --git a/packages/forest_admin_agent/spec/lib/forest_admin_agent/routes/capabilities/collections_spec.rb b/packages/forest_admin_agent/spec/lib/forest_admin_agent/routes/capabilities/collections_spec.rb index bc8faf80f..75fca5073 100644 --- a/packages/forest_admin_agent/spec/lib/forest_admin_agent/routes/capabilities/collections_spec.rb +++ b/packages/forest_admin_agent/spec/lib/forest_admin_agent/routes/capabilities/collections_spec.rb @@ -57,7 +57,10 @@ module Capabilities let(:args) do { headers: { 'HTTP_AUTHORIZATION' => bearer }, - params: { 'timezone' => 'Europe/Paris' } + params: { + 'collectionNames' => [], + 'timezone' => 'Europe/Paris' + } } end @@ -66,26 +69,6 @@ module Capabilities it 'returns no collection' do expect(result[:content][:collections].length).to eq(0) end - - it 'returns the correct fields and operators for the user collection' do - user_collection = result[:content][:collections][0] - expect(user_collection[:name]).to eq('user') - - user_fields = user_collection[:fields] - expect(user_fields.length).to eq(3) - expect(user_fields[0]).to include(name: 'id', type: 'Number') - expect(user_fields[0][:operators]).to include('equal', 'greater_than', 'less_than', 'blank', 'in', 'missing') - end - - it 'returns the correct fields and operators for the book collection' do - book_collection = result[:content][:collections][1] - expect(book_collection[:name]).to eq('book') - - book_fields = book_collection[:fields] - expect(book_fields.length).to eq(5) - expect(book_fields[0]).to include(name: 'id', type: 'Number') - expect(book_fields[0][:operators]).to include('equal', 'blank', 'in', 'missing') - end end context 'when there is collectionNames in params' do