@@ -309,7 +309,7 @@ def association_connection.current_database
309
309
describe 'when filtering on an ambiguous field' do
310
310
let ( :resource ) { Tree }
311
311
let ( :pageSize ) { 5 }
312
- let ( :fields ) { { 'Tree' => 'id' } }
312
+ let ( :fields ) { { 'Tree' => 'id,name' , 'cutter' => 'id ' } }
313
313
let ( :filters ) { {
314
314
aggregator : 'and' ,
315
315
conditions : [ {
@@ -332,7 +332,6 @@ def association_connection.current_database
332
332
expect ( count ) . to eq 1
333
333
expect ( records . first . id ) . to eq 3
334
334
expect ( records . first . name ) . to eq 'Apple Tree'
335
- expect ( records . first . cutter . name ) . to eq 'Michel'
336
335
end
337
336
end
338
337
@@ -379,7 +378,7 @@ def association_connection.current_database
379
378
describe 'when sorting on an ambiguous field name with a filter' do
380
379
let ( :resource ) { Tree }
381
380
let ( :sort ) { '-name' }
382
- let ( :fields ) { { 'Tree' => 'id' } }
381
+ let ( :fields ) { { 'Tree' => 'id,name ' } }
383
382
let ( :filters ) { {
384
383
field : 'cutter:name' ,
385
384
operator : 'equal' ,
@@ -417,7 +416,7 @@ def association_connection.current_database
417
416
418
417
describe 'when filtering on an updated_at field of an associated collection' do
419
418
let ( :resource ) { Tree }
420
- let ( :fields ) { { 'Tree' => 'id' } }
419
+ let ( :fields ) { { 'Tree' => 'id,name ' } }
421
420
let ( :filters ) { {
422
421
field : 'island:updated_at' ,
423
422
operator : 'previous_year'
@@ -592,6 +591,64 @@ def association_connection.current_database
592
591
end
593
592
end
594
593
594
+ describe '#extract_associations_from_filter' do
595
+ let ( :resource ) { Tree }
596
+
597
+ before { init_scopes }
598
+
599
+ context 'with a single filter as JSON string' do
600
+ let ( :filters ) {
601
+ {
602
+ field : 'island:updated_at' ,
603
+ operator : 'equal' ,
604
+ value : '2024-01-01'
605
+ } . to_json
606
+ }
607
+
608
+ it 'extracts the correct association' do
609
+ expect ( getter . send ( :extract_associations_from_filter ) ) . to eq [ :island ]
610
+ end
611
+ end
612
+
613
+ context 'with grouped conditions as JSON string' do
614
+ let ( :filters ) {
615
+ {
616
+ aggregator : 'and' ,
617
+ conditions : [
618
+ { field : 'island:updated_at' , operator : 'equal' , value : '2024-01-01' } ,
619
+ { field : 'owner:name' , operator : 'equal' , value : 'Michel' } ,
620
+ { field : 'id' , operator : 'present' , value : nil }
621
+ ]
622
+ } . to_json
623
+ }
624
+
625
+ it 'extracts all unique associations' do
626
+ expect ( getter . send ( :extract_associations_from_filter ) ) . to match_array [ :island , :owner ]
627
+ end
628
+ end
629
+
630
+ context 'when filters has no association field' do
631
+ let ( :filters ) {
632
+ {
633
+ field : 'id' ,
634
+ operator : 'equal' ,
635
+ value : 1
636
+ } . to_json
637
+ }
638
+
639
+ it 'returns an empty array' do
640
+ expect ( getter . send ( :extract_associations_from_filter ) ) . to eq [ ]
641
+ end
642
+ end
643
+
644
+ context 'when filters is nil' do
645
+ let ( :filters ) { nil }
646
+
647
+ it 'returns an empty array' do
648
+ expect ( getter . send ( :extract_associations_from_filter ) ) . to eq [ ]
649
+ end
650
+ end
651
+ end
595
652
end
596
653
end
597
654
end
0 commit comments