]> BookStack Code Mirror - bookstack/blobdiff - tests/Api/BooksApiTest.php
DB: Aligned entity structure to a common table
[bookstack] / tests / Api / BooksApiTest.php
index 22ccfb482c9c29a450c2dc27c286bfc580b3f9a6..e5bd77b67d1f826ce53a417240914e36345e5ca3 100644 (file)
@@ -47,8 +47,8 @@ class BooksApiTest extends TestCase
             [
                 'id'   => $book->id,
                 'cover' => [
-                    'id' => $book->cover->id,
-                    'url' => $book->cover->url,
+                    'id' => $book->coverInfo()->getImage()->id,
+                    'url' => $book->coverInfo()->getImage()->url,
                 ],
             ],
         ]]);
@@ -94,7 +94,7 @@ class BooksApiTest extends TestCase
         ]);
 
         $resp->assertJson($expectedDetails);
-        $this->assertDatabaseHas('books', $expectedDetails);
+        $this->assertDatabaseHasEntityData('book', $expectedDetails);
     }
 
     public function test_book_name_needed_to_create()
@@ -153,23 +153,23 @@ class BooksApiTest extends TestCase
         $directChildCount = $book->directPages()->count() + $book->chapters()->count();
         $resp->assertStatus(200);
         $resp->assertJsonCount($directChildCount, 'contents');
-        $resp->assertJson([
-            'contents' => [
-                [
-                    'type' => 'chapter',
-                    'id' => $chapter->id,
-                    'name' => $chapter->name,
-                    'slug' => $chapter->slug,
-                    'pages' => [
-                        [
-                            'id' => $chapterPage->id,
-                            'name' => $chapterPage->name,
-                            'slug' => $chapterPage->slug,
-                        ]
-                    ]
-                ]
-            ]
-        ]);
+
+        $contents = $resp->json('contents');
+        $respChapter = array_values(array_filter($contents, fn ($item) =>  ($item['id'] === $chapter->id && $item['type'] === 'chapter')))[0];
+        $this->assertArrayMapIncludes([
+            'id' => $chapter->id,
+            'type' => 'chapter',
+            'name' => $chapter->name,
+            'slug' => $chapter->slug,
+        ], $respChapter);
+
+        $respPage = array_values(array_filter($respChapter['pages'], fn ($item) =>  ($item['id'] === $chapterPage->id)))[0];
+
+        $this->assertArrayMapIncludes([
+            'id' => $chapterPage->id,
+            'name' => $chapterPage->name,
+            'slug' => $chapterPage->slug,
+        ], $respPage);
     }
 
     public function test_read_endpoint_contents_nested_pages_has_permissions_applied()
@@ -224,14 +224,14 @@ class BooksApiTest extends TestCase
         $resp = $this->putJson($this->baseEndpoint . "/{$book->id}", $details);
         $resp->assertStatus(200);
 
-        $this->assertDatabaseHas('books', array_merge($details, ['id' => $book->id, 'description' => 'A book updated via the API']));
+        $this->assertDatabaseHasEntityData('book', array_merge($details, ['id' => $book->id, 'description' => 'A book updated via the API']));
     }
 
     public function test_update_increments_updated_date_if_only_tags_are_sent()
     {
         $this->actingAsApiEditor();
         $book = $this->entities->book();
-        DB::table('books')->where('id', '=', $book->id)->update(['updated_at' => Carbon::now()->subWeek()]);
+        Book::query()->where('id', '=', $book->id)->update(['updated_at' => Carbon::now()->subWeek()]);
 
         $details = [
             'tags' => [['name' => 'Category', 'value' => 'Testing']],
@@ -247,7 +247,7 @@ class BooksApiTest extends TestCase
         $this->actingAsApiEditor();
         /** @var Book $book */
         $book = $this->entities->book();
-        $this->assertNull($book->cover);
+        $this->assertNull($book->coverInfo()->getImage());
         $file = $this->files->uploadedImage('image.png');
 
         // Ensure cover image can be set via API
@@ -257,7 +257,7 @@ class BooksApiTest extends TestCase
         $book->refresh();
 
         $resp->assertStatus(200);
-        $this->assertNotNull($book->cover);
+        $this->assertNotNull($book->coverInfo()->getImage());
 
         // Ensure further updates without image do not clear cover image
         $resp = $this->put($this->baseEndpoint . "/{$book->id}", [
@@ -266,7 +266,7 @@ class BooksApiTest extends TestCase
         $book->refresh();
 
         $resp->assertStatus(200);
-        $this->assertNotNull($book->cover);
+        $this->assertNotNull($book->coverInfo()->getImage());
 
         // Ensure update with null image property clears image
         $resp = $this->put($this->baseEndpoint . "/{$book->id}", [
@@ -275,7 +275,7 @@ class BooksApiTest extends TestCase
         $book->refresh();
 
         $resp->assertStatus(200);
-        $this->assertNull($book->cover);
+        $this->assertNull($book->coverInfo()->getImage());
     }
 
     public function test_delete_endpoint()