@@ -145,6 +145,82 @@ public function test_su_can_see_private_filter(){
145145 ->assertJsonFragment (['name ' =>'Allowed Private Filter ' ]);
146146 }
147147
148+ public function test_index_can_search_by_name (): void
149+ {
150+ $ user = User::factory ()->create ();
151+
152+ $ match = PredefinedFilter::factory ()->create ([
153+ 'name ' => 'Important Filter ' ,
154+ 'is_public ' => 0 ,
155+ 'created_by ' => $ user ->id ,
156+ ]);
157+ $ noMatch = PredefinedFilter::factory ()->create ([
158+ 'name ' => 'Unrelated ' ,
159+ 'is_public ' => 0 ,
160+ 'created_by ' => $ user ->id ,
161+ ]);
162+
163+ $ response = $ this ->actingAs ($ user , 'api ' )
164+ ->getJson ('/api/v1/predefinedFilters?search=important ' )
165+ ->assertOk ();
166+
167+ $ response ->assertJsonFragment (['name ' => 'Important Filter ' ]);
168+ $ response ->assertJsonMissing (['name ' => 'Unrelated ' ]);
169+ $ this ->assertCount (1 , $ response ->json ('rows ' ));
170+ }
171+
172+ public function test_index_can_sort_results_by_name (): void
173+ {
174+ $ user = User::factory ()->create ();
175+
176+ $ a = PredefinedFilter::factory ()->create (['name ' => 'Alpha ' , 'is_public ' => 0 , 'created_by ' => $ user ->id ]);
177+ $ z = PredefinedFilter::factory ()->create (['name ' => 'Zulu ' , 'is_public ' => 0 , 'created_by ' => $ user ->id ]);
178+ $ m = PredefinedFilter::factory ()->create (['name ' => 'Mike ' , 'is_public ' => 0 , 'created_by ' => $ user ->id ]);
179+
180+ // Ascending
181+ $ asc = $ this ->actingAs ($ user , 'api ' )
182+ ->getJson ('/api/v1/predefinedFilters?sort=name&order=asc ' )
183+ ->assertOk ()
184+ ->json ('rows ' );
185+
186+ $ this ->assertEquals (['Alpha ' , 'Mike ' , 'Zulu ' ], array_column ($ asc , 'name ' ));
187+
188+ // Descending
189+ $ desc = $ this ->actingAs ($ user , 'api ' )
190+ ->getJson ('/api/v1/predefinedFilters?sort=name&order=desc ' )
191+ ->assertOk ()
192+ ->json ('rows ' );
193+
194+ $ this ->assertEquals (['Zulu ' , 'Mike ' , 'Alpha ' ], array_column ($ desc , 'name ' ));
195+ }
196+
197+ public function test_index_can_paginate_results (): void
198+ {
199+ $ user = User::factory ()->create ();
200+
201+ $ filters = PredefinedFilter::factory ()->count (5 )->sequence (
202+ ['name ' => 'Filter 1 ' , 'is_public ' => 0 ],
203+ ['name ' => 'Filter 2 ' , 'is_public ' => 0 ],
204+ ['name ' => 'Filter 3 ' , 'is_public ' => 0 ],
205+ ['name ' => 'Filter 4 ' , 'is_public ' => 0 ],
206+ ['name ' => 'Filter 5 ' , 'is_public ' => 0 ],
207+ )->create (['created_by ' => $ user ->id ]);
208+
209+ $ response1 = $ this ->actingAs ($ user , 'api ' )
210+ ->getJson ('/api/v1/predefinedFilters?limit=2&offset=0 ' )
211+ ->assertOk ();
212+
213+ $ this ->assertCount (2 , $ response1 ->json ('rows ' ));
214+ $ this ->assertEquals (5 , $ response1 ->json ('total ' ));
215+
216+ $ response2 = $ this ->actingAs ($ user , 'api ' )
217+ ->getJson ('/api/v1/predefinedFilters?limit=2&offset=2 ' )
218+ ->assertOk ();
219+
220+ $ this ->assertCount (2 , $ response2 ->json ('rows ' ));
221+ $ this ->assertEquals (5 , $ response2 ->json ('total ' ));
222+ }
223+
148224 //------SHOW TESTS------
149225
150226 public function test_show_404_when_missing (): void
0 commit comments