]> BookStack Code Mirror - bookstack/blobdiff - tests/Unit/PageRepoTest.php
Show bookshelves that a book belongs to on a book view
[bookstack] / tests / Unit / PageRepoTest.php
index 36addcbe41c5a4b801a662f32605ce99b39177b8..38ffbf61684800f17f52d34c78cec2b9a51dbd01 100644 (file)
@@ -10,23 +10,69 @@ class PageRepoTest extends TestCase
      */
     protected $pageRepo;
 
-    protected function setUp()
+    protected function setUp(): void
     {
         parent::setUp();
         $this->pageRepo = app()->make(PageRepo::class);
     }
 
+    public function test_get_page_nav_sets_correct_properties()
+    {
+        $content = '<h1 id="testa">Hello</h1><h2 id="testb">There</h2><h3 id="testc">Donkey</h3>';
+        $navMap = $this->pageRepo->getPageNav($content);
+
+        $this->assertCount(3, $navMap);
+        $this->assertArrayMapIncludes([
+            'nodeName' => 'h1',
+            'link' => '#testa',
+            'text' => 'Hello',
+            'level' => 1,
+        ], $navMap[0]);
+        $this->assertArrayMapIncludes([
+            'nodeName' => 'h2',
+            'link' => '#testb',
+            'text' => 'There',
+            'level' => 2,
+        ], $navMap[1]);
+        $this->assertArrayMapIncludes([
+            'nodeName' => 'h3',
+            'link' => '#testc',
+            'text' => 'Donkey',
+            'level' => 3,
+        ], $navMap[2]);
+    }
+
     public function test_get_page_nav_does_not_show_empty_titles()
     {
         $content = '<h1 id="testa">Hello</h1><h2 id="testb">&nbsp;</h2><h3 id="testc"></h3>';
         $navMap = $this->pageRepo->getPageNav($content);
 
         $this->assertCount(1, $navMap);
-        $this->assertArraySubset([
+        $this->assertArrayMapIncludes([
             'nodeName' => 'h1',
             'link' => '#testa',
             'text' => 'Hello'
         ], $navMap[0]);
     }
 
+    public function test_get_page_nav_shifts_headers_if_only_smaller_ones_are_used()
+    {
+        $content = '<h4 id="testa">Hello</h4><h5 id="testb">There</h5><h6 id="testc">Donkey</h6>';
+        $navMap = $this->pageRepo->getPageNav($content);
+
+        $this->assertCount(3, $navMap);
+        $this->assertArrayMapIncludes([
+            'nodeName' => 'h4',
+            'level' => 1,
+        ], $navMap[0]);
+        $this->assertArrayMapIncludes([
+            'nodeName' => 'h5',
+            'level' => 2,
+        ], $navMap[1]);
+        $this->assertArrayMapIncludes([
+            'nodeName' => 'h6',
+            'level' => 3,
+        ], $navMap[2]);
+    }
+
 }
\ No newline at end of file