@@ -923,6 +923,183 @@ describe('database', () => {
923
923
expect ( fromRes . categories . title ) . toBe ( title )
924
924
expect ( fromRes . categories . id ) . toBe ( id )
925
925
}
926
+
927
+ // Non-consistent sorting by ID
928
+ // eslint-disable-next-line jest/no-conditional-in-test
929
+ if ( process . env . PAYLOAD_DATABASE ?. includes ( 'uuid' ) ) {
930
+ return
931
+ }
932
+
933
+ const resultDepth1NoSort = await payload . findDistinct ( {
934
+ depth : 1 ,
935
+ collection : 'posts' ,
936
+ field : 'categories' ,
937
+ } )
938
+
939
+ for ( let i = 0 ; i < resultDepth1NoSort . values . length ; i ++ ) {
940
+ const fromRes = resultDepth1NoSort . values [ i ] as any
941
+ const id = categoriesIDS [ i ] . categories as any
942
+ const title = categories [ i ] ?. title
943
+ expect ( fromRes . categories . title ) . toBe ( title )
944
+ expect ( fromRes . categories . id ) . toBe ( id )
945
+ }
946
+ } )
947
+
948
+ it ( 'should populate distinct relationships of polymorphic when depth>0' , async ( ) => {
949
+ await payload . delete ( { collection : 'posts' , where : { } } )
950
+ await payload . delete ( { collection : 'categories' , where : { } } )
951
+
952
+ const category_1 = await payload . create ( {
953
+ collection : 'categories' ,
954
+ data : { title : 'category_1' } ,
955
+ } )
956
+ const category_2 = await payload . create ( {
957
+ collection : 'categories' ,
958
+ data : { title : 'category_2' } ,
959
+ } )
960
+ const category_3 = await payload . create ( {
961
+ collection : 'categories' ,
962
+ data : { title : 'category_3' } ,
963
+ } )
964
+
965
+ const post_1 = await payload . create ( {
966
+ collection : 'posts' ,
967
+ data : { title : 'post_1' , categoryPoly : { relationTo : 'categories' , value : category_1 . id } } ,
968
+ } )
969
+ const post_2 = await payload . create ( {
970
+ collection : 'posts' ,
971
+ data : { title : 'post_2' , categoryPoly : { relationTo : 'categories' , value : category_1 . id } } ,
972
+ } )
973
+ const post_3 = await payload . create ( {
974
+ collection : 'posts' ,
975
+ data : { title : 'post_3' , categoryPoly : { relationTo : 'categories' , value : category_2 . id } } ,
976
+ } )
977
+ const post_4 = await payload . create ( {
978
+ collection : 'posts' ,
979
+ data : { title : 'post_4' , categoryPoly : { relationTo : 'categories' , value : category_3 . id } } ,
980
+ } )
981
+ const post_5 = await payload . create ( {
982
+ collection : 'posts' ,
983
+ data : { title : 'post_5' , categoryPoly : { relationTo : 'categories' , value : category_3 . id } } ,
984
+ } )
985
+
986
+ const result = await payload . findDistinct ( {
987
+ depth : 0 ,
988
+ collection : 'posts' ,
989
+ field : 'categoryPoly' ,
990
+ } )
991
+
992
+ expect ( result . values ) . toHaveLength ( 3 )
993
+ expect (
994
+ result . values . some (
995
+ ( v ) =>
996
+ v . categoryPoly ?. relationTo === 'categories' && v . categoryPoly . value === category_1 . id ,
997
+ ) ,
998
+ ) . toBe ( true )
999
+ expect (
1000
+ result . values . some (
1001
+ ( v ) =>
1002
+ v . categoryPoly ?. relationTo === 'categories' && v . categoryPoly . value === category_2 . id ,
1003
+ ) ,
1004
+ ) . toBe ( true )
1005
+ expect (
1006
+ result . values . some (
1007
+ ( v ) =>
1008
+ v . categoryPoly ?. relationTo === 'categories' && v . categoryPoly . value === category_3 . id ,
1009
+ ) ,
1010
+ ) . toBe ( true )
1011
+ } )
1012
+
1013
+ it ( 'should populate distinct relationships of hasMany polymorphic when depth>0' , async ( ) => {
1014
+ await payload . delete ( { collection : 'posts' , where : { } } )
1015
+ await payload . delete ( { collection : 'categories' , where : { } } )
1016
+
1017
+ const category_1 = await payload . create ( {
1018
+ collection : 'categories' ,
1019
+ data : { title : 'category_1' } ,
1020
+ } )
1021
+ const category_2 = await payload . create ( {
1022
+ collection : 'categories' ,
1023
+ data : { title : 'category_2' } ,
1024
+ } )
1025
+ const category_3 = await payload . create ( {
1026
+ collection : 'categories' ,
1027
+ data : { title : 'category_3' } ,
1028
+ } )
1029
+
1030
+ const post_1 = await payload . create ( {
1031
+ collection : 'posts' ,
1032
+ data : {
1033
+ title : 'post_1' ,
1034
+ categoryPolyMany : [ { relationTo : 'categories' , value : category_1 . id } ] ,
1035
+ } ,
1036
+ } )
1037
+ const post_2 = await payload . create ( {
1038
+ collection : 'posts' ,
1039
+ data : {
1040
+ title : 'post_2' ,
1041
+ categoryPolyMany : [ { relationTo : 'categories' , value : category_1 . id } ] ,
1042
+ } ,
1043
+ } )
1044
+ const post_3 = await payload . create ( {
1045
+ collection : 'posts' ,
1046
+ data : {
1047
+ title : 'post_3' ,
1048
+ categoryPolyMany : [ { relationTo : 'categories' , value : category_2 . id } ] ,
1049
+ } ,
1050
+ } )
1051
+ const post_4 = await payload . create ( {
1052
+ collection : 'posts' ,
1053
+ data : {
1054
+ title : 'post_4' ,
1055
+ categoryPolyMany : [ { relationTo : 'categories' , value : category_3 . id } ] ,
1056
+ } ,
1057
+ } )
1058
+ const post_5 = await payload . create ( {
1059
+ collection : 'posts' ,
1060
+ data : {
1061
+ title : 'post_5' ,
1062
+ categoryPolyMany : [ { relationTo : 'categories' , value : category_3 . id } ] ,
1063
+ } ,
1064
+ } )
1065
+
1066
+ const post_6 = await payload . create ( {
1067
+ collection : 'posts' ,
1068
+ data : {
1069
+ title : 'post_6' ,
1070
+ categoryPolyMany : null ,
1071
+ } ,
1072
+ } )
1073
+
1074
+ const result = await payload . findDistinct ( {
1075
+ depth : 0 ,
1076
+ collection : 'posts' ,
1077
+ field : 'categoryPolyMany' ,
1078
+ } )
1079
+
1080
+ expect ( result . values ) . toHaveLength ( 4 )
1081
+ expect (
1082
+ result . values . some (
1083
+ ( v ) =>
1084
+ v . categoryPolyMany ?. relationTo === 'categories' &&
1085
+ v . categoryPolyMany . value === category_1 . id ,
1086
+ ) ,
1087
+ ) . toBe ( true )
1088
+ expect (
1089
+ result . values . some (
1090
+ ( v ) =>
1091
+ v . categoryPolyMany ?. relationTo === 'categories' &&
1092
+ v . categoryPolyMany . value === category_2 . id ,
1093
+ ) ,
1094
+ ) . toBe ( true )
1095
+ expect (
1096
+ result . values . some (
1097
+ ( v ) =>
1098
+ v . categoryPolyMany ?. relationTo === 'categories' &&
1099
+ v . categoryPolyMany . value === category_3 . id ,
1100
+ ) ,
1101
+ ) . toBe ( true )
1102
+ expect ( result . values . some ( ( v ) => v . categoryPolyMany === null ) ) . toBe ( true )
926
1103
} )
927
1104
928
1105
describe ( 'Compound Indexes' , ( ) => {
0 commit comments