diff --git a/tests/Integration/AnimeSearchEndpointTest.php b/tests/Integration/AnimeSearchEndpointTest.php index c0751ef..69df9df 100644 --- a/tests/Integration/AnimeSearchEndpointTest.php +++ b/tests/Integration/AnimeSearchEndpointTest.php @@ -6,6 +6,7 @@ use App\Http\QueryBuilder\AnimeSearchQueryBuilder; use App\Http\QueryBuilder\MediaSearchQueryBuilder; use App\Testing\ScoutFlush; use App\Testing\SyntheticMongoDbTransaction; +use Illuminate\Database\Eloquent\Factories\Sequence; use Illuminate\Support\Carbon; use Illuminate\Support\Collection; use Tests\TestCase; @@ -425,6 +426,49 @@ class AnimeSearchEndpointTest extends TestCase $this->assertCollectionsStrictlyEqual($expectedItems, $actualItems); } + public function testOrderingByScoreWithKeywordSearch() + { + // test for issue https://github.com/jikan-me/jikan-rest/issues/332 + $title = "awesome anime"; + $items = Anime::factory(3)->state(new Sequence( + ["score" => 8.05], + ["score" => 7.15], + ["score" => 6.51], + ))->create([ + "titles" => [ + [ + "type" => "Default", + "title" => $title + ] + ], + "title" => $title, + "title_english" => $title, + "title_japanese" => $title, + "title_synonyms" => [$title], + ]); + Anime::factory(3)->state(new Sequence( + ["score" => 3.05], + ["score" => 4.15], + ["score" => 1.51], + ))->create(); + + $content = $this->getJsonResponse([ + "order_by" => "score", + "q" => "awesome", + "page" => 1, + "sort" => "desc", + "limit" => 15 + ]); + + $expectedItems = $items->map(fn($elem) => data_get($elem, "score")); + $actualItems = collect($content["data"])->map(fn($elem) => data_get($elem, "score")); + + $this->assertPaginationData(3, 3, 15); + $this->assertIsArray($content["data"]); + $this->assertCount(3, $content["data"]); + $this->assertCollectionsStrictlyEqual($expectedItems, $actualItems); + } + /** * @dataProvider invalidRatingParameterProvider */