From e3e484e5610d75dfa50497d5b6b166038eb50dc7 Mon Sep 17 00:00:00 2001
From: Dan Brown <ssddanbrown@googlemail.com>
Date: Sat, 22 Sep 2018 11:53:40 +0100
Subject: [PATCH] Added custom head content to exports

Closes #981

Also fixed incorrect download tests.
---
 resources/views/base.blade.php                |  6 +---
 resources/views/books/export.blade.php        |  1 +
 resources/views/chapters/export.blade.php     |  1 +
 resources/views/pages/export.blade.php        |  1 +
 .../views/partials/custom-head.blade.php      |  5 ++++
 tests/Entity/ExportTest.php                   | 29 +++++++++++++------
 6 files changed, 29 insertions(+), 14 deletions(-)
 create mode 100644 resources/views/partials/custom-head.blade.php

diff --git a/resources/views/base.blade.php b/resources/views/base.blade.php
index 016f8e833..e6d0b7761 100644
--- a/resources/views/base.blade.php
+++ b/resources/views/base.blade.php
@@ -20,11 +20,7 @@
 
     @include('partials/custom-styles')
 
-    @if(setting('app-custom-head') && \Route::currentRouteName() !== 'settings')
-        <!-- Custom user content -->
-        {!! setting('app-custom-head') !!}
-        <!-- End custom user content -->
-    @endif
+    @include('partials.custom-head')
 </head>
 <body class="@yield('body-class')" ng-app="bookStack">
 
diff --git a/resources/views/books/export.blade.php b/resources/views/books/export.blade.php
index 462ad7991..18440a74d 100644
--- a/resources/views/books/export.blade.php
+++ b/resources/views/books/export.blade.php
@@ -28,6 +28,7 @@
         }
     </style>
     @yield('head')
+    @include('partials.custom-head')
 </head>
 <body>
 <div class="container">
diff --git a/resources/views/chapters/export.blade.php b/resources/views/chapters/export.blade.php
index 2c15fbd57..8f710c0ec 100644
--- a/resources/views/chapters/export.blade.php
+++ b/resources/views/chapters/export.blade.php
@@ -21,6 +21,7 @@
         }
     </style>
     @yield('head')
+    @include('partials.custom-head')
 </head>
 <body>
 <div class="container">
diff --git a/resources/views/pages/export.blade.php b/resources/views/pages/export.blade.php
index 8ed5b391a..ca708f8e0 100644
--- a/resources/views/pages/export.blade.php
+++ b/resources/views/pages/export.blade.php
@@ -10,6 +10,7 @@
         @endif
     </style>
     @yield('head')
+    @include('partials.custom-head')
 </head>
 <body>
 <div class="container" id="page-show">
diff --git a/resources/views/partials/custom-head.blade.php b/resources/views/partials/custom-head.blade.php
new file mode 100644
index 000000000..dd7cc41e4
--- /dev/null
+++ b/resources/views/partials/custom-head.blade.php
@@ -0,0 +1,5 @@
+@if(setting('app-custom-head') && \Route::currentRouteName() !== 'settings')
+    <!-- Custom user content -->
+    {!! setting('app-custom-head') !!}
+    <!-- End custom user content -->
+@endif
\ No newline at end of file
diff --git a/tests/Entity/ExportTest.php b/tests/Entity/ExportTest.php
index 7fa485f20..5fff84b8d 100644
--- a/tests/Entity/ExportTest.php
+++ b/tests/Entity/ExportTest.php
@@ -15,7 +15,7 @@ class ExportTest extends TestCase
         $resp = $this->get($page->getUrl('/export/plaintext'));
         $resp->assertStatus(200);
         $resp->assertSee($page->name);
-        $resp->assertHeader('Content-Disposition', 'attachment; filename="' . $page->slug . '.txt');
+        $resp->assertHeader('Content-Disposition', 'attachment; filename="' . $page->slug . '.txt"');
     }
 
     public function test_page_pdf_export()
@@ -25,7 +25,7 @@ class ExportTest extends TestCase
 
         $resp = $this->get($page->getUrl('/export/pdf'));
         $resp->assertStatus(200);
-        $resp->assertHeader('Content-Disposition', 'attachment; filename="' . $page->slug . '.pdf');
+        $resp->assertHeader('Content-Disposition', 'attachment; filename="' . $page->slug . '.pdf"');
     }
 
     public function test_page_html_export()
@@ -36,7 +36,7 @@ class ExportTest extends TestCase
         $resp = $this->get($page->getUrl('/export/html'));
         $resp->assertStatus(200);
         $resp->assertSee($page->name);
-        $resp->assertHeader('Content-Disposition', 'attachment; filename="' . $page->slug . '.html');
+        $resp->assertHeader('Content-Disposition', 'attachment; filename="' . $page->slug . '.html"');
     }
 
     public function test_book_text_export()
@@ -49,7 +49,7 @@ class ExportTest extends TestCase
         $resp->assertStatus(200);
         $resp->assertSee($book->name);
         $resp->assertSee($page->name);
-        $resp->assertHeader('Content-Disposition', 'attachment; filename="' . $book->slug . '.txt');
+        $resp->assertHeader('Content-Disposition', 'attachment; filename="' . $book->slug . '.txt"');
     }
 
     public function test_book_pdf_export()
@@ -60,7 +60,7 @@ class ExportTest extends TestCase
 
         $resp = $this->get($book->getUrl('/export/pdf'));
         $resp->assertStatus(200);
-        $resp->assertHeader('Content-Disposition', 'attachment; filename="' . $book->slug . '.pdf');
+        $resp->assertHeader('Content-Disposition', 'attachment; filename="' . $book->slug . '.pdf"');
     }
 
     public function test_book_html_export()
@@ -73,7 +73,7 @@ class ExportTest extends TestCase
         $resp->assertStatus(200);
         $resp->assertSee($book->name);
         $resp->assertSee($page->name);
-        $resp->assertHeader('Content-Disposition', 'attachment; filename="' . $book->slug . '.html');
+        $resp->assertHeader('Content-Disposition', 'attachment; filename="' . $book->slug . '.html"');
     }
 
     public function test_chapter_text_export()
@@ -86,7 +86,7 @@ class ExportTest extends TestCase
         $resp->assertStatus(200);
         $resp->assertSee($chapter->name);
         $resp->assertSee($page->name);
-        $resp->assertHeader('Content-Disposition', 'attachment; filename="' . $chapter->slug . '.txt');
+        $resp->assertHeader('Content-Disposition', 'attachment; filename="' . $chapter->slug . '.txt"');
     }
 
     public function test_chapter_pdf_export()
@@ -96,7 +96,7 @@ class ExportTest extends TestCase
 
         $resp = $this->get($chapter->getUrl('/export/pdf'));
         $resp->assertStatus(200);
-        $resp->assertHeader('Content-Disposition', 'attachment; filename="' . $chapter->slug . '.pdf');
+        $resp->assertHeader('Content-Disposition', 'attachment; filename="' . $chapter->slug . '.pdf"');
     }
 
     public function test_chapter_html_export()
@@ -109,7 +109,18 @@ class ExportTest extends TestCase
         $resp->assertStatus(200);
         $resp->assertSee($chapter->name);
         $resp->assertSee($page->name);
-        $resp->assertHeader('Content-Disposition', 'attachment; filename="' . $chapter->slug . '.html');
+        $resp->assertHeader('Content-Disposition', 'attachment; filename="' . $chapter->slug . '.html"');
+    }
+
+    public function test_page_html_export_contains_custom_head_if_set()
+    {
+        $page = Page::first();
+
+        $customHeadContent = "<style>p{color: red;}</style>";
+        $this->setSettings(['app-custom-head' => $customHeadContent]);
+
+        $resp = $this->asEditor()->get($page->getUrl('/export/html'));
+        $resp->assertSee($customHeadContent);
     }
 
 }
\ No newline at end of file