@@ -937,6 +937,12 @@ def test_ids_with_scope
937
937
assert_equal Company . where ( id : scoped_ids ) . map ( &:id ) . sort , Company . where ( id : scoped_ids ) . ids . sort
938
938
end
939
939
940
+ def test_ids_on_relation
941
+ company = Company . first
942
+ contract = company . contracts . create!
943
+ assert_equal [ contract . id ] , company . contracts . ids
944
+ end
945
+
940
946
def test_ids_on_loaded_relation
941
947
loaded_companies = Company . all . load
942
948
company_ids = Company . all . map ( &:id )
@@ -968,6 +974,20 @@ def test_ids_with_contradicting_scope
968
974
end
969
975
end
970
976
977
+ def test_ids_with_join
978
+ company = Company . first
979
+ company . contracts . create!
980
+ assert_equal [ company . id ] , Company . joins ( :contracts ) . where ( "contracts.id" => company . contracts . first ) . ids
981
+ end
982
+
983
+ def test_ids_with_polymorphic_relation_join
984
+ part = ShipPart . create! ( name : "has trinket" )
985
+ part . trinkets . create!
986
+
987
+ assert_equal [ part . id ] , ShipPart . joins ( :trinkets ) . ids
988
+ assert_async_equal [ part . id ] , ShipPart . joins ( :trinkets ) . async_ids
989
+ end
990
+
971
991
def test_ids_with_eager_load
972
992
company = Company . first
973
993
5 . times { company . contracts . create! }
@@ -986,11 +1006,36 @@ def test_ids_with_includes
986
1006
assert_equal Company . all . map ( &:id ) . sort , Company . all . includes ( :contracts ) . ids . sort
987
1007
end
988
1008
989
- def test_ids_with_scope_and_includes
1009
+ def test_ids_with_includes_and_scope
990
1010
scoped_ids = [ 1 , 2 ]
991
1011
company = Company . where ( id : scoped_ids ) . first
992
1012
5 . times { company . contracts . create! }
993
- assert_equal Company . where ( id : scoped_ids ) . map ( &:id ) . sort , Company . where ( id : scoped_ids ) . includes ( :contracts ) . ids . sort
1013
+ assert_equal Company . where ( id : scoped_ids ) . map ( &:id ) . sort , Company . includes ( :contracts ) . where ( id : scoped_ids ) . ids . sort
1014
+ end
1015
+
1016
+ def test_ids_with_includes_and_table_scope
1017
+ company = Company . first
1018
+ company . contracts . create!
1019
+ assert_equal [ company . id ] , Company . includes ( :contracts ) . where ( "contracts.id" => company . contracts . first ) . ids
1020
+ end
1021
+
1022
+ def test_ids_on_loaded_relation_with_includes_and_table_scope
1023
+ company = Company . first
1024
+ company . contracts . create!
1025
+ loaded_companies = Company . includes ( :contracts ) . where ( "contracts.id" => company . contracts . first ) . load
1026
+ assert_queries ( 0 ) do
1027
+ assert_equal [ company . id ] , loaded_companies . ids
1028
+ end
1029
+ end
1030
+
1031
+ def test_ids_with_includes_limit_and_empty_result
1032
+ assert_equal [ ] , Topic . includes ( :replies ) . limit ( 0 ) . ids
1033
+ assert_equal [ ] , Topic . includes ( :replies ) . limit ( 1 ) . where ( "0 = 1" ) . ids
1034
+ end
1035
+
1036
+ def test_ids_with_includes_offset
1037
+ assert_equal [ 5 ] , Topic . includes ( :replies ) . order ( :id ) . offset ( 4 ) . ids
1038
+ assert_equal [ ] , Topic . includes ( :replies ) . order ( :id ) . offset ( 5 ) . ids
994
1039
end
995
1040
996
1041
def test_pluck_with_includes_limit_and_empty_result
@@ -1499,6 +1544,20 @@ def test_count_with_block_and_column_name_raises_an_error
1499
1544
end
1500
1545
end
1501
1546
1547
+ test "#skip_query_cache! for #ids" do
1548
+ Account . cache do
1549
+ assert_queries ( 1 ) do
1550
+ Account . ids
1551
+ Account . ids
1552
+ end
1553
+
1554
+ assert_queries ( 2 ) do
1555
+ Account . all . skip_query_cache! . ids
1556
+ Account . all . skip_query_cache! . ids
1557
+ end
1558
+ end
1559
+ end
1560
+
1502
1561
test "#skip_query_cache! for a simple calculation" do
1503
1562
Account . cache do
1504
1563
assert_queries ( 1 ) do
0 commit comments