From 5c3ff5e99d53516ef275f3e8a5b0686219a048d8 Mon Sep 17 00:00:00 2001 From: Matt Date: Thu, 27 Feb 2025 16:06:10 +0100 Subject: [PATCH] chore: add test on FieldGenerator --- .../utils/schema/field_flattener_spec.rb | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 packages/forest_admin_datasource_mongoid/spec/lib/forest_admin_datasource_mongoid/utils/schema/field_flattener_spec.rb diff --git a/packages/forest_admin_datasource_mongoid/spec/lib/forest_admin_datasource_mongoid/utils/schema/field_flattener_spec.rb b/packages/forest_admin_datasource_mongoid/spec/lib/forest_admin_datasource_mongoid/utils/schema/field_flattener_spec.rb new file mode 100644 index 00000000..97166ef4 --- /dev/null +++ b/packages/forest_admin_datasource_mongoid/spec/lib/forest_admin_datasource_mongoid/utils/schema/field_flattener_spec.rb @@ -0,0 +1,52 @@ +require 'spec_helper' + +module ForestAdminDatasourceMongoid + module Utils + module Schema + describe FieldsGenerator do + let(:stack) { [{ prefix: nil, as_fields: [], as_models: [] }] } + + describe 'Construction' do + it 'does not modify the schema' do + fields = described_class.build_fields_schema(Post, stack) + expect(fields.keys).to eq(%w[_id created_at updated_at title body rating tag_ids]) + end + + it 'skips flattened models' do + stack = [{ prefix: nil, as_fields: ['section.body'], as_models: ['section'] }] + fields = described_class.build_fields_schema(Label, stack) + + expect(fields.keys).to eq(['_id', 'name', 'section@@@body']) + end + + it 'flattens all nested fields when no level is provided' do + stack = [{ prefix: nil, as_fields: ['section.content', 'section.body'], as_models: [] }] + fields = described_class.build_fields_schema(Label, stack) + + expect(fields.keys).to eq(['_id', 'name', 'section@@@content', 'section@@@body']) + end + + it 'flattens only requested fields' do + stack = [{ prefix: nil, as_fields: ['label.name'], as_models: [] }] + fields = described_class.build_fields_schema(Band, stack) + + expect(fields.keys).to eq(['_id', 'created_at', 'updated_at', 'label', 'label@@@name']) + end + + it 'onlies flatten selected fields when level = 1' do + stack = [{ prefix: nil, as_fields: ['label.name', 'label.section'], as_models: [] }] + fields = described_class.build_fields_schema(Band, stack) + + expect(fields.keys).to eq(['_id', 'created_at', 'updated_at', 'label@@@name', 'label@@@section']) + end + + it 'returns a "String" as type when "_id" is generated' do + fields = described_class.build_fields_schema(Post, stack) + + expect(fields['_id'].column_type).to eq('String') + end + end + end + end + end +end