X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/a6633642232efd164d4708967ab59e498fbff896..refs/pull/3083/head:/tests/Api/BooksApiTest.php diff --git a/tests/Api/BooksApiTest.php b/tests/Api/BooksApiTest.php index a36acdd02..91e2db9e5 100644 --- a/tests/Api/BooksApiTest.php +++ b/tests/Api/BooksApiTest.php @@ -1,4 +1,6 @@ -getJson($this->baseEndpoint . '?count=1&sort=+id'); $resp->assertJson(['data' => [ [ - 'id' => $firstBook->id, + 'id' => $firstBook->id, 'name' => $firstBook->name, 'slug' => $firstBook->slug, - ] + ], ]]); } @@ -28,7 +30,7 @@ class BooksApiTest extends TestCase { $this->actingAsApiEditor(); $details = [ - 'name' => 'My API book', + 'name' => 'My API book', 'description' => 'A book created via the API', ]; @@ -49,12 +51,12 @@ class BooksApiTest extends TestCase $resp = $this->postJson($this->baseEndpoint, $details); $resp->assertStatus(422); $resp->assertJson([ - "error" => [ - "message" => "The given data was invalid.", - "validation" => [ - "name" => ["The name field is required."] + 'error' => [ + 'message' => 'The given data was invalid.', + 'validation' => [ + 'name' => ['The name field is required.'], ], - "code" => 422, + 'code' => 422, ], ]); } @@ -68,8 +70,8 @@ class BooksApiTest extends TestCase $resp->assertStatus(200); $resp->assertJson([ - 'id' => $book->id, - 'slug' => $book->slug, + 'id' => $book->id, + 'slug' => $book->slug, 'created_by' => [ 'name' => $book->createdBy->name, ], @@ -77,7 +79,7 @@ class BooksApiTest extends TestCase 'name' => $book->createdBy->name, ], 'owned_by' => [ - 'name' => $book->ownedBy->name + 'name' => $book->ownedBy->name, ], ]); } @@ -87,7 +89,7 @@ class BooksApiTest extends TestCase $this->actingAsApiEditor(); $book = Book::visible()->first(); $details = [ - 'name' => 'My updated API book', + 'name' => 'My updated API book', 'description' => 'A book created via the API', ]; @@ -140,4 +142,30 @@ class BooksApiTest extends TestCase $resp->assertStatus(200); $resp->assertHeader('Content-Disposition', 'attachment; filename="' . $book->slug . '.pdf"'); } -} \ No newline at end of file + + public function test_export_markdown_endpoint() + { + $this->actingAsApiEditor(); + $book = Book::visible()->has('pages')->has('chapters')->first(); + + $resp = $this->get($this->baseEndpoint . "/{$book->id}/export/markdown"); + $resp->assertStatus(200); + $resp->assertHeader('Content-Disposition', 'attachment; filename="' . $book->slug . '.md"'); + $resp->assertSee('# ' . $book->name); + $resp->assertSee('# ' . $book->pages()->first()->name); + $resp->assertSee('# ' . $book->chapters()->first()->name); + } + + public function test_cant_export_when_not_have_permission() + { + $types = ['html', 'plaintext', 'pdf', 'markdown']; + $this->actingAsApiEditor(); + $this->removePermissionFromUser($this->getEditor(), 'content-export'); + + $book = Book::visible()->first(); + foreach ($types as $type) { + $resp = $this->get($this->baseEndpoint . "/{$book->id}/export/{$type}"); + $this->assertPermissionError($resp); + } + } +}