From 9746c024833a737669e2b99867db2bbf64ced813 Mon Sep 17 00:00:00 2001 From: Matt Date: Thu, 17 Oct 2024 10:33:51 +0200 Subject: [PATCH 1/7] 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 75fca5073..2f33c24ba 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 @@ -69,6 +69,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 d3748ec98bb7e0cbfb7dd777e03a232289c7b47b Mon Sep 17 00:00:00 2001 From: Matt Date: Thu, 17 Oct 2024 15:18:02 +0200 Subject: [PATCH 2/7] 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 2f33c24ba..bd1038878 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 @@ -77,7 +77,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 @@ -87,7 +87,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 e60dbdb37382088a0f8e0b125c760c38f4de0541 Mon Sep 17 00:00:00 2001 From: Matt Date: Thu, 24 Oct 2024 15:22:01 +0200 Subject: [PATCH 3/7] refactor: move validation condition_tree from list to query_string_parser --- .../lib/forest_admin_agent/routes/resources/list.rb | 2 -- 1 file changed, 2 deletions(-) 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 41bbdde6b..4e2c39145 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 @@ -31,8 +31,6 @@ def handle_request(args = {}) segment: ForestAdminAgent::Utils::QueryStringParser.parse_segment(@collection, args) ) - 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 c60b764d0ef4f6c00082624767c484ee9c510f27 Mon Sep 17 00:00:00 2001 From: Matt Date: Thu, 24 Oct 2024 15:52:06 +0200 Subject: [PATCH 4/7] chore: lint --- .../lib/forest_admin_agent/routes/resources/list.rb | 1 - 1 file changed, 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 4e2c39145..d2fc01c3e 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,7 +5,6 @@ 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) }) From 32b02889307192e5a2d30a3c8d430aa33b4e7a46 Mon Sep 17 00:00:00 2001 From: Matt Date: Thu, 24 Oct 2024 17:54:47 +0200 Subject: [PATCH 5/7] feat: add request ip to caller --- .../lib/forest_admin_agent/utils/query_string_parser.rb | 1 + .../lib/forest_admin_datasource_toolkit/components/caller.rb | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/forest_admin_agent/lib/forest_admin_agent/utils/query_string_parser.rb b/packages/forest_admin_agent/lib/forest_admin_agent/utils/query_string_parser.rb index 34e5f1c2d..af88332ff 100644 --- a/packages/forest_admin_agent/lib/forest_admin_agent/utils/query_string_parser.rb +++ b/packages/forest_admin_agent/lib/forest_admin_agent/utils/query_string_parser.rb @@ -52,6 +52,7 @@ def self.parse_caller(args) )[0] token_data.delete('exp') token_data[:timezone] = timezone + token_data[:request] = { ip: args[:headers]['action_dispatch.remote_ip'].to_s } Caller.new(**token_data.transform_keys(&:to_sym)) end diff --git a/packages/forest_admin_datasource_toolkit/lib/forest_admin_datasource_toolkit/components/caller.rb b/packages/forest_admin_datasource_toolkit/lib/forest_admin_datasource_toolkit/components/caller.rb index 242c27653..c44eaf2ac 100644 --- a/packages/forest_admin_datasource_toolkit/lib/forest_admin_datasource_toolkit/components/caller.rb +++ b/packages/forest_admin_datasource_toolkit/lib/forest_admin_datasource_toolkit/components/caller.rb @@ -13,7 +13,8 @@ def initialize( tags:, timezone:, permission_level:, - role: nil + role: nil, + request: {} ) @id = id @email = email @@ -25,6 +26,7 @@ def initialize( @timezone = timezone @permission_level = permission_level @role = role + @request = request end end end From af1c7c0f3687157dea90737b77cc82192062436b Mon Sep 17 00:00:00 2001 From: Matt Date: Thu, 24 Oct 2024 17:55:03 +0200 Subject: [PATCH 6/7] chore: update tests --- .../forest_admin_datasource_customizer/spec/shared/caller.rb | 3 ++- .../components/contracts/collection_contract_spec.rb | 3 ++- packages/forest_admin_datasource_toolkit/spec/shared/caller.rb | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/forest_admin_datasource_customizer/spec/shared/caller.rb b/packages/forest_admin_datasource_customizer/spec/shared/caller.rb index d0deca570..69f3ec8a1 100644 --- a/packages/forest_admin_datasource_customizer/spec/shared/caller.rb +++ b/packages/forest_admin_datasource_customizer/spec/shared/caller.rb @@ -10,7 +10,8 @@ tags: [], timezone: 'Europe/Paris', permission_level: 'admin', - role: 'dev' + role: 'dev', + request: { ip: '127.0.0.1' } ) end end diff --git a/packages/forest_admin_datasource_toolkit/spec/lib/forest_admin_datasource_toolkit/components/contracts/collection_contract_spec.rb b/packages/forest_admin_datasource_toolkit/spec/lib/forest_admin_datasource_toolkit/components/contracts/collection_contract_spec.rb index 4e2a07ed5..4d46d0671 100644 --- a/packages/forest_admin_datasource_toolkit/spec/lib/forest_admin_datasource_toolkit/components/contracts/collection_contract_spec.rb +++ b/packages/forest_admin_datasource_toolkit/spec/lib/forest_admin_datasource_toolkit/components/contracts/collection_contract_spec.rb @@ -18,7 +18,8 @@ module Contracts tags: {}, timezone: 'Europe/Paris', role: 1, - permission_level: 'admin' + permission_level: 'admin', + request: { ip: '127.0.0.1' } ) end diff --git a/packages/forest_admin_datasource_toolkit/spec/shared/caller.rb b/packages/forest_admin_datasource_toolkit/spec/shared/caller.rb index d0deca570..69f3ec8a1 100644 --- a/packages/forest_admin_datasource_toolkit/spec/shared/caller.rb +++ b/packages/forest_admin_datasource_toolkit/spec/shared/caller.rb @@ -10,7 +10,8 @@ tags: [], timezone: 'Europe/Paris', permission_level: 'admin', - role: 'dev' + role: 'dev', + request: { ip: '127.0.0.1' } ) end end From c3236f4d50966707abd1b47cceff06312ce1d111 Mon Sep 17 00:00:00 2001 From: Matt Date: Mon, 28 Oct 2024 11:20:27 +0100 Subject: [PATCH 7/7] fix: test --- .../routes/capabilities/collections_spec.rb | 20 ------------------- 1 file changed, 20 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 bd1038878..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 @@ -69,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