From 119c39e6e7a26b696c783b837858e4c3facdc69c Mon Sep 17 00:00:00 2001 From: Nicolas Alexandre Date: Tue, 7 Jan 2025 10:27:04 +0100 Subject: [PATCH 1/3] test(search): add missing test on collection customizer --- .../utils/schema/generator_collection.rb | 2 +- .../collection_customizer_spec.rb | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/packages/forest_admin_agent/lib/forest_admin_agent/utils/schema/generator_collection.rb b/packages/forest_admin_agent/lib/forest_admin_agent/utils/schema/generator_collection.rb index c0fa4505..e8e4ec10 100644 --- a/packages/forest_admin_agent/lib/forest_admin_agent/utils/schema/generator_collection.rb +++ b/packages/forest_admin_agent/lib/forest_admin_agent/utils/schema/generator_collection.rb @@ -11,7 +11,7 @@ def self.build_schema(collection) icon: nil, integration: nil, isReadOnly: collection.schema[:fields].all? { |_k, field| field.type != 'Column' || field.is_read_only }, - isSearchable: true, + isSearchable: collection.schema[:searchable], isVirtual: false, name: collection.name, onlyForRelationships: false, diff --git a/packages/forest_admin_datasource_customizer/spec/lib/forest_admin_datasource_customizer/collection_customizer_spec.rb b/packages/forest_admin_datasource_customizer/spec/lib/forest_admin_datasource_customizer/collection_customizer_spec.rb index fc3d23a6..c35662d7 100644 --- a/packages/forest_admin_datasource_customizer/spec/lib/forest_admin_datasource_customizer/collection_customizer_spec.rb +++ b/packages/forest_admin_datasource_customizer/spec/lib/forest_admin_datasource_customizer/collection_customizer_spec.rb @@ -201,6 +201,22 @@ module ForestAdminDatasourceCustomizer end end + context 'when using disable_search' do + it 'calls the search decorator and disable the search' do + stack = @datasource_customizer.stack + stack.apply_queued_customizations({}) + allow(stack.search).to receive(:get_collection).with('book').and_return(@datasource_customizer.stack.search.get_collection('book')) + + customizer = described_class.new(@datasource_customizer, @datasource_customizer.stack, 'book') + customizer.disable_search + stack.apply_queued_customizations({}) + + search_collection = @datasource_customizer.stack.search.get_collection('book') + + expect(search_collection.schema[:searchable]).to be(false) + end + end + context 'when using disable_count' do it 'disables count on the collection' do customizer = described_class.new(@datasource_customizer, @datasource_customizer.stack, 'book') From b508b89775f42ed1341bf74a73fbdafbf67faa43 Mon Sep 17 00:00:00 2001 From: Nicolas Alexandre Date: Tue, 7 Jan 2025 11:07:29 +0100 Subject: [PATCH 2/3] fix: mark schema as dirty after replace search or disable search --- .../decorators/search/search_collection_decorator.rb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/forest_admin_datasource_customizer/lib/forest_admin_datasource_customizer/decorators/search/search_collection_decorator.rb b/packages/forest_admin_datasource_customizer/lib/forest_admin_datasource_customizer/decorators/search/search_collection_decorator.rb index 85f27ffa..c696d829 100644 --- a/packages/forest_admin_datasource_customizer/lib/forest_admin_datasource_customizer/decorators/search/search_collection_decorator.rb +++ b/packages/forest_admin_datasource_customizer/lib/forest_admin_datasource_customizer/decorators/search/search_collection_decorator.rb @@ -13,10 +13,13 @@ def initialize(child_collection, datasource) def disable_search @disabled_search = true + mark_schema_as_dirty end def replace_search(replacer) @replacer = replacer + @disabled_search = false + mark_schema_as_dirty end def refine_schema(sub_schema) From 947e0a1a424d40cea552d59f05cda403aec86f24 Mon Sep 17 00:00:00 2001 From: Nicolas Alexandre Date: Tue, 7 Jan 2025 11:43:53 +0100 Subject: [PATCH 3/3] test(search): add some tests --- .../search_collection_decorator_spec.rb | 68 +++++++++++++++---- .../spec/dummy/log/test.log | 0 .../spec/dummy/tmp/local_secret.txt | 1 + 3 files changed, 54 insertions(+), 15 deletions(-) create mode 100644 packages/forest_admin_datasource_mongoid/spec/dummy/log/test.log create mode 100644 packages/forest_admin_datasource_mongoid/spec/dummy/tmp/local_secret.txt diff --git a/packages/forest_admin_datasource_customizer/spec/lib/forest_admin_datasource_customizer/decorators/search/search_collection_decorator_spec.rb b/packages/forest_admin_datasource_customizer/spec/lib/forest_admin_datasource_customizer/decorators/search/search_collection_decorator_spec.rb index 6ae0a9d0..7be5dd31 100644 --- a/packages/forest_admin_datasource_customizer/spec/lib/forest_admin_datasource_customizer/decorators/search/search_collection_decorator_spec.rb +++ b/packages/forest_admin_datasource_customizer/spec/lib/forest_admin_datasource_customizer/decorators/search/search_collection_decorator_spec.rb @@ -69,6 +69,59 @@ module Search datasource.add_collection(collection_address) end + context 'when disable search' do + it 'mark schema as dirty' do + collection = collection_build( + schema: { + fields: { 'foo' => column_build(filter_operators: [Operators::EQUAL]) } + } + ) + search_collection_decorator = described_class.new(collection, datasource) + search_collection_decorator.disable_search + + expect(search_collection_decorator.last_schema).to be_nil + end + + it 'sets the schema not searchable' do + collection = collection_build( + schema: { + fields: { 'foo' => column_build(filter_operators: [Operators::EQUAL]) } + } + ) + search_collection_decorator = described_class.new(collection, datasource) + unsearchable_schema = { searchable: true } + expect(search_collection_decorator.refine_schema(unsearchable_schema)).to eq({ searchable: true }) + search_collection_decorator.disable_search + expect(search_collection_decorator.refine_schema(unsearchable_schema)).to eq({ searchable: false }) + end + end + + context 'when replace search' do + it 'mark schema as dirty' do + collection = collection_build( + schema: { + fields: { 'foo' => column_build(filter_operators: [Operators::EQUAL]) } + } + ) + search_collection_decorator = described_class.new(collection, datasource) + search_collection_decorator.replace_search(proc {}) + + expect(search_collection_decorator.last_schema).to be_nil + end + + it 'sets the schema searchable' do + collection = collection_build( + schema: { + fields: { 'foo' => column_build(filter_operators: [Operators::EQUAL]) } + } + ) + search_collection_decorator = described_class.new(collection, datasource) + search_collection_decorator.replace_search(proc {}) + + expect(search_collection_decorator.schema[:searchable]).to be(true) + end + end + context 'when refine_schema' do it 'sets the schema searchable' do collection = build_collection( @@ -80,21 +133,6 @@ module Search unsearchable_schema = { searchable: false } expect(search_collection_decorator.refine_schema(unsearchable_schema)).to eq({ searchable: true }) end - - context 'when disable search' do - it 'sets the schema not searchable' do - collection = build_collection( - schema: { - fields: { 'foo' => build_column(filter_operators: [Operators::EQUAL]) } - } - ) - search_collection_decorator = described_class.new(collection, datasource) - unsearchable_schema = { searchable: true } - expect(search_collection_decorator.refine_schema(unsearchable_schema)).to eq({ searchable: true }) - search_collection_decorator.disable_search - expect(search_collection_decorator.refine_schema(unsearchable_schema)).to eq({ searchable: false }) - end - end end context 'when refine_filter' do diff --git a/packages/forest_admin_datasource_mongoid/spec/dummy/log/test.log b/packages/forest_admin_datasource_mongoid/spec/dummy/log/test.log new file mode 100644 index 00000000..e69de29b diff --git a/packages/forest_admin_datasource_mongoid/spec/dummy/tmp/local_secret.txt b/packages/forest_admin_datasource_mongoid/spec/dummy/tmp/local_secret.txt new file mode 100644 index 00000000..02d7af44 --- /dev/null +++ b/packages/forest_admin_datasource_mongoid/spec/dummy/tmp/local_secret.txt @@ -0,0 +1 @@ +8eb0fd19608c3e5609086db683b5d6b9b6861f62399a439f5107f2fcdc2dfd0acdf09efc62589584064b83444a80a9fb88a6d4c8288df4a4f9f87404b05e1e96 \ No newline at end of file