From c84d99945649941c82b654ec4247f56cfa98a81e Mon Sep 17 00:00:00 2001
From: Dan Brown <ssddanbrown@googlemail.com>
Date: Sun, 22 Dec 2024 12:43:26 +0000
Subject: [PATCH] ZIP Exports: Prevent book child page drafts from being
 included

Added test to cover
---
 .../ZipExports/Models/ZipExportBook.php       |  2 +-
 tests/Exports/ZipExportTest.php               | 31 ++++++++++++++++++-
 2 files changed, 31 insertions(+), 2 deletions(-)

diff --git a/app/Exports/ZipExports/Models/ZipExportBook.php b/app/Exports/ZipExports/Models/ZipExportBook.php
index 4f641d25b..39176ded4 100644
--- a/app/Exports/ZipExports/Models/ZipExportBook.php
+++ b/app/Exports/ZipExports/Models/ZipExportBook.php
@@ -70,7 +70,7 @@ class ZipExportBook extends ZipExportModel
         foreach ($children as $child) {
             if ($child instanceof Chapter) {
                 $chapters[] = $child;
-            } else if ($child instanceof Page) {
+            } else if ($child instanceof Page && !$child->draft) {
                 $pages[] = $child;
             }
         }
diff --git a/tests/Exports/ZipExportTest.php b/tests/Exports/ZipExportTest.php
index ebe07d052..163828c1b 100644
--- a/tests/Exports/ZipExportTest.php
+++ b/tests/Exports/ZipExportTest.php
@@ -198,7 +198,7 @@ class ZipExportTest extends TestCase
 
     public function test_book_export()
     {
-        $book = $this->entities->book();
+        $book = $this->entities->bookHasChaptersAndPages();
         $book->tags()->saveMany(Tag::factory()->count(2)->make());
 
         $zipResp = $this->asEditor()->get($book->getUrl("/export/zip"));
@@ -251,6 +251,35 @@ class ZipExportTest extends TestCase
         $this->assertCount($chapter->pages()->count(), $chapterData['pages']);
     }
 
+    public function test_draft_pages_are_not_included()
+    {
+        $editor = $this->users->editor();
+        $entities = $this->entities->createChainBelongingToUser($editor);
+        $book = $entities['book'];
+        $page = $entities['page'];
+        $chapter = $entities['chapter'];
+        $book->tags()->saveMany(Tag::factory()->count(2)->make());
+
+        $page->created_by = $editor->id;
+        $page->draft = true;
+        $page->save();
+
+        $zipResp = $this->actingAs($editor)->get($book->getUrl("/export/zip"));
+        $zip = $this->extractZipResponse($zipResp);
+        $this->assertCount(0, $zip->data['book']['chapters'][0]['pages'] ?? ['cat']);
+
+        $zipResp = $this->actingAs($editor)->get($chapter->getUrl("/export/zip"));
+        $zip = $this->extractZipResponse($zipResp);
+        $this->assertCount(0, $zip->data['chapter']['pages'] ?? ['cat']);
+
+        $page->chapter_id = 0;
+        $page->save();
+
+        $zipResp = $this->actingAs($editor)->get($book->getUrl("/export/zip"));
+        $zip = $this->extractZipResponse($zipResp);
+        $this->assertCount(0, $zip->data['book']['pages'] ?? ['cat']);
+    }
+
 
     public function test_cross_reference_links_are_converted()
     {