1313
1414namespace ApiPlatform \Tests \Functional \Parameters ;
1515
16+ use ApiPlatform \Doctrine \Odm \Filter \OrderFilter ;
1617use ApiPlatform \Symfony \Bundle \Test \ApiTestCase ;
1718use ApiPlatform \Tests \Fixtures \TestBundle \Document \FilteredOrderParameter as FilteredOrderParameterDocument ;
1819use ApiPlatform \Tests \Fixtures \TestBundle \Entity \FilteredOrderParameter ;
@@ -58,6 +59,12 @@ public function testOrderFilterResponses(string $url, array $expectedOrder): voi
5859
5960 $ actualOrder = array_map (fn ($ item ) => $ item ['createdAt ' ] ?? null , $ orderedItems );
6061
62+ // Default NULL order is different in PostgreSQL.
63+ if ($ this ->isPostgres ()) {
64+ $ actualOrder = array_values (array_filter ($ actualOrder ));
65+ $ expectedOrder = array_values (array_filter ($ expectedOrder ));
66+ }
67+
6168 $ this ->assertSame ($ expectedOrder , $ actualOrder , \sprintf ('Expected order does not match for URL %s ' , $ url ));
6269 }
6370
@@ -79,29 +86,51 @@ public static function orderFilterScenariosProvider(): \Generator
7986 '/filtered_order_parameters?date=desc ' ,
8087 ['2024-12-25T00:00:00+00:00 ' , '2024-06-15T00:00:00+00:00 ' , '2024-01-01T00:00:00+00:00 ' , null ],
8188 ];
82- yield 'date_null_always_first_alias_nulls_first ' => [
89+ }
90+
91+ #[DataProvider('orderFilterNullsComparisonScenariosProvider ' )]
92+ public function testOrderFilterNullsComparisonResponses (string $ url , array $ expectedOrder ): void
93+ {
94+ if ($ this ->isMongoDB ()) {
95+ $ this ->markTestSkipped (\sprintf ('Not implemented in %s ' , OrderFilter::class));
96+ }
97+
98+ $ response = self ::createClient ()->request ('GET ' , $ url );
99+ $ this ->assertResponseIsSuccessful ();
100+
101+ $ responseData = $ response ->toArray ();
102+ $ orderedItems = $ responseData ['hydra:member ' ];
103+
104+ $ actualOrder = array_map (fn ($ item ) => $ item ['createdAt ' ] ?? null , $ orderedItems );
105+
106+ $ this ->assertSame ($ expectedOrder , $ actualOrder , \sprintf ('Expected order does not match for URL %s ' , $ url ));
107+ }
108+
109+ public static function orderFilterNullsComparisonScenariosProvider (): \Generator
110+ {
111+ yield 'date_null_always_first_alias_asc ' => [
83112 '/filtered_order_parameters?date_null_always_first=asc ' ,
84113 [null , '2024-01-01T00:00:00+00:00 ' , '2024-06-15T00:00:00+00:00 ' , '2024-12-25T00:00:00+00:00 ' ],
85114 ];
86- yield 'date_null_always_first_alias_nulls_last ' => [
115+ yield 'date_null_always_first_alias_desc ' => [
87116 '/filtered_order_parameters?date_null_always_first=desc ' ,
88- ['2024-12-25T00:00:00+00:00 ' , '2024-06-15T00:00:00+00:00 ' , '2024-01-01T00:00:00+00:00 ' , null ],
117+ [null , '2024-12-25T00:00:00+00:00 ' , '2024-06-15T00:00:00+00:00 ' , '2024-01-01T00:00:00+00:00 ' ],
89118 ];
90- yield 'date_null_always_first_old_way_alias_nulls_first ' => [
119+ yield 'date_null_always_first_old_way_alias_asc ' => [
91120 '/filtered_order_parameters?date_null_always_first_old_way=asc ' ,
92121 [null , '2024-01-01T00:00:00+00:00 ' , '2024-06-15T00:00:00+00:00 ' , '2024-12-25T00:00:00+00:00 ' ],
93122 ];
94- yield 'date_null_always_first_old_way_alias_nulls_last ' => [
123+ yield 'date_null_always_first_old_way_alias_desc ' => [
95124 '/filtered_order_parameters?date_null_always_first_old_way=desc ' ,
96- ['2024-12-25T00:00:00+00:00 ' , '2024-06-15T00:00:00+00:00 ' , '2024-01-01T00:00:00+00:00 ' , null ],
125+ [null , '2024-12-25T00:00:00+00:00 ' , '2024-06-15T00:00:00+00:00 ' , '2024-01-01T00:00:00+00:00 ' ],
97126 ];
98- yield 'order_property_created_at_nulls_first ' => [
127+ yield 'order_property_created_at_null_first_asc ' => [
99128 '/filtered_order_parameters?order[createdAt]=asc ' ,
100129 [null , '2024-01-01T00:00:00+00:00 ' , '2024-06-15T00:00:00+00:00 ' , '2024-12-25T00:00:00+00:00 ' ],
101130 ];
102- yield 'order_property_created_at_nulls_last ' => [
131+ yield 'order_property_created_at_null_first_desc ' => [
103132 '/filtered_order_parameters?order[createdAt]=desc ' ,
104- ['2024-12-25T00:00:00+00:00 ' , '2024-06-15T00:00:00+00:00 ' , '2024-01-01T00:00:00+00:00 ' , null ],
133+ [null , '2024-12-25T00:00:00+00:00 ' , '2024-06-15T00:00:00+00:00 ' , '2024-01-01T00:00:00+00:00 ' ],
105134 ];
106135 }
107136
0 commit comments