]> BookStack Code Mirror - bookstack/blobdiff - tests/Entity/TagTest.php
Merge branch 'master' of git://github.com/Binternet/BookStack into Binternet-master
[bookstack] / tests / Entity / TagTest.php
index f4ce581e3f93d49571213b0cbeb34fe24a457ce1..13876410a0cddccaf4e3d04783e5735ccfd78697 100644 (file)
@@ -1,8 +1,11 @@
-<?php
+<?php namespace Tests;
 
-use BookStack\Tag;
-use BookStack\Page;
-use BookStack\Services\PermissionService;
+use BookStack\Entities\Book;
+use BookStack\Entities\Chapter;
+use BookStack\Actions\Tag;
+use BookStack\Entities\Entity;
+use BookStack\Entities\Page;
+use BookStack\Auth\Permissions\PermissionService;
 
 class TagTest extends BrowserKitTest
 {
@@ -11,24 +14,24 @@ class TagTest extends BrowserKitTest
 
     /**
      * Get an instance of a page that has many tags.
-     * @param Tag[]|bool $tags
-     * @return mixed
+     * @param \BookStack\Actions\Tag[]|bool $tags
+     * @return Entity
      */
-    protected function getPageWithTags($tags = false)
+    protected function getEntityWithTags($class, $tags = false): Entity
     {
-        $page = Page::first();
+        $entity = $class::first();
 
         if (!$tags) {
             $tags = factory(Tag::class, $this->defaultTagCount)->make();
         }
 
-        $page->tags()->saveMany($tags);
-        return $page;
+        $entity->tags()->saveMany($tags);
+        return $entity;
     }
 
     public function test_get_page_tags()
     {
-        $page = $this->getPageWithTags();
+        $page = $this->getEntityWithTags(Page::class);
 
         // Add some other tags to check they don't interfere
         factory(Tag::class, $this->defaultTagCount)->create();
@@ -40,6 +43,34 @@ class TagTest extends BrowserKitTest
         $this->assertTrue(count($json) === $this->defaultTagCount, "Returned JSON item count is not as expected");
     }
 
+    public function test_get_chapter_tags()
+    {
+        $chapter = $this->getEntityWithTags(Chapter::class);
+
+        // Add some other tags to check they don't interfere
+        factory(Tag::class, $this->defaultTagCount)->create();
+
+        $this->asAdmin()->get("/ajax/tags/get/chapter/" . $chapter->id)
+            ->shouldReturnJson();
+
+        $json = json_decode($this->response->getContent());
+        $this->assertTrue(count($json) === $this->defaultTagCount, "Returned JSON item count is not as expected");
+    }
+
+    public function test_get_book_tags()
+    {
+        $book = $this->getEntityWithTags(Book::class);
+
+        // Add some other tags to check they don't interfere
+        factory(Tag::class, $this->defaultTagCount)->create();
+
+        $this->asAdmin()->get("/ajax/tags/get/book/" . $book->id)
+            ->shouldReturnJson();
+
+        $json = json_decode($this->response->getContent());
+        $this->assertTrue(count($json) === $this->defaultTagCount, "Returned JSON item count is not as expected");
+    }
+
     public function test_tag_name_suggestions()
     {
         // Create some tags with similar names to test with
@@ -50,7 +81,7 @@ class TagTest extends BrowserKitTest
         $attrs = $attrs->merge(factory(Tag::class, 5)->make(['name' => 'county']));
         $attrs = $attrs->merge(factory(Tag::class, 5)->make(['name' => 'planet']));
         $attrs = $attrs->merge(factory(Tag::class, 5)->make(['name' => 'plans']));
-        $page = $this->getPageWithTags($attrs);
+        $page = $this->getEntityWithTags(Page::class, $attrs);
 
         $this->asAdmin()->get('/ajax/tags/suggest/names?search=dog')->seeJsonEquals([]);
         $this->get('/ajax/tags/suggest/names?search=co')->seeJsonEquals(['color', 'country', 'county']);
@@ -68,7 +99,7 @@ class TagTest extends BrowserKitTest
         $attrs = $attrs->merge(factory(Tag::class, 5)->make(['name' => 'county', 'value' => 'dog']));
         $attrs = $attrs->merge(factory(Tag::class, 5)->make(['name' => 'planet', 'value' => 'catapult']));
         $attrs = $attrs->merge(factory(Tag::class, 5)->make(['name' => 'plans', 'value' => 'dodgy']));
-        $page = $this->getPageWithTags($attrs);
+        $page = $this->getEntityWithTags(Page::class, $attrs);
 
         $this->asAdmin()->get('/ajax/tags/suggest/values?search=ora')->seeJsonEquals([]);
         $this->get('/ajax/tags/suggest/values?search=cat')->seeJsonEquals(['cats', 'cattery', 'catapult']);
@@ -84,7 +115,7 @@ class TagTest extends BrowserKitTest
         $attrs = collect();
         $attrs = $attrs->merge(factory(Tag::class, 5)->make(['name' => 'country']));
         $attrs = $attrs->merge(factory(Tag::class, 5)->make(['name' => 'color']));
-        $page = $this->getPageWithTags($attrs);
+        $page = $this->getEntityWithTags(Page::class, $attrs);
 
         $this->asAdmin()->get('/ajax/tags/suggest/names?search=co')->seeJsonEquals(['color', 'country']);
         $this->asEditor()->get('/ajax/tags/suggest/names?search=co')->seeJsonEquals(['color', 'country']);
@@ -92,7 +123,7 @@ class TagTest extends BrowserKitTest
         // Set restricted permission the page
         $page->restricted = true;
         $page->save();
-        $permissionService->buildJointPermissionsForEntity($page);
+        $page->rebuildPermissions();
 
         $this->asAdmin()->get('/ajax/tags/suggest/names?search=co')->seeJsonEquals(['color', 'country']);
         $this->asEditor()->get('/ajax/tags/suggest/names?search=co')->seeJsonEquals([]);