X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/55abf7be241e0a81f1460da70fcebb7d8530d950..refs/pull/4554/head:/tests/Api/ApiListingTest.php diff --git a/tests/Api/ApiListingTest.php b/tests/Api/ApiListingTest.php index 70d1140d7..f90ec5a3d 100644 --- a/tests/Api/ApiListingTest.php +++ b/tests/Api/ApiListingTest.php @@ -1,12 +1,11 @@ orderBy('id')->take(3)->get(); $resp = $this->get($this->endpoint . '?count=1'); - $resp->assertJsonMissing(['name' => $books[1]->name ]); + $resp->assertJsonMissing(['name' => $books[1]->name]); $resp = $this->get($this->endpoint . '?count=1&offset=1000'); $resp->assertJsonCount(0, 'data'); @@ -41,21 +40,62 @@ class ApiAuthTest extends TestCase $this->actingAsApiEditor(); $sortChecks = [ - '-id' => Book::visible()->orderBy('id', 'desc')->first(), + '-id' => Book::visible()->orderBy('id', 'desc')->first(), '+name' => Book::visible()->orderBy('name', 'asc')->first(), - 'name' => Book::visible()->orderBy('name', 'asc')->first(), - '-name' => Book::visible()->orderBy('name', 'desc')->first() + 'name' => Book::visible()->orderBy('name', 'asc')->first(), + '-name' => Book::visible()->orderBy('name', 'desc')->first(), ]; foreach ($sortChecks as $sortOption => $result) { $resp = $this->get($this->endpoint . '?count=1&sort=' . $sortOption); $resp->assertJson(['data' => [ [ - 'id' => $result->id, + 'id' => $result->id, 'name' => $result->name, - ] + ], ]]); } } -} \ No newline at end of file + public function test_filter_parameter() + { + $this->actingAsApiEditor(); + $book = Book::visible()->first(); + $nameSubstr = substr($book->name, 0, 4); + $encodedNameSubstr = rawurlencode($nameSubstr); + + $filterChecks = [ + // Test different types of filter + "filter[id]={$book->id}" => 1, + "filter[id:ne]={$book->id}" => Book::visible()->where('id', '!=', $book->id)->count(), + "filter[id:gt]={$book->id}" => Book::visible()->where('id', '>', $book->id)->count(), + "filter[id:gte]={$book->id}" => Book::visible()->where('id', '>=', $book->id)->count(), + "filter[id:lt]={$book->id}" => Book::visible()->where('id', '<', $book->id)->count(), + "filter[name:like]={$encodedNameSubstr}%" => Book::visible()->where('name', 'like', $nameSubstr . '%')->count(), + + // Test mulitple filters 'and' together + "filter[id]={$book->id}&filter[name]=random_non_existing_string" => 0, + ]; + + foreach ($filterChecks as $filterOption => $resultCount) { + $resp = $this->get($this->endpoint . '?count=1&' . $filterOption); + $resp->assertJson(['total' => $resultCount]); + } + } + + public function test_total_on_results_shows_correctly() + { + $this->actingAsApiEditor(); + $bookCount = Book::query()->count(); + $resp = $this->get($this->endpoint . '?count=1'); + $resp->assertJson(['total' => $bookCount]); + } + + public function test_total_on_results_shows_correctly_when_offset_provided() + { + $this->actingAsApiEditor(); + $bookCount = Book::query()->count(); + $resp = $this->get($this->endpoint . '?count=1&offset=1'); + $resp->assertJson(['total' => $bookCount]); + } +}