X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/043cdeafb3773288fd7d07ac3dbdbf989ef94bb8..dd4d2f4696edb68ace506abf18aa7a8e19dba164:/tests/Entity/SortTest.php diff --git a/tests/Entity/SortTest.php b/tests/Entity/SortTest.php index 8792a0a06..3b0831029 100644 --- a/tests/Entity/SortTest.php +++ b/tests/Entity/SortTest.php @@ -1,4 +1,8 @@ -asAdmin(); - $pageRepo = app('\BookStack\Repos\PageRepo'); - $draft = $pageRepo->getDraftPage($this->book); + $entityRepo = app(EntityRepo::class); + $draft = $entityRepo->getDraftPage($this->book); + + $resp = $this->get($this->book->getUrl()); + $resp->assertSee($draft->name); + + $resp = $this->get($this->book->getUrl() . '/sort'); + $resp->assertDontSee($draft->name); + } + + public function test_page_move() + { + $page = \BookStack\Page::first(); + $currentBook = $page->book; + $newBook = \BookStack\Book::where('id', '!=', $currentBook->id)->first(); + + $resp = $this->asAdmin()->get($page->getUrl() . '/move'); + $resp->assertSee('Move Page'); + + $movePageResp = $this->put($page->getUrl() . '/move', [ + 'entity_selection' => 'book:' . $newBook->id + ]); + $page = \BookStack\Page::find($page->id); + + $movePageResp->assertRedirect($page->getUrl()); + $this->assertTrue($page->book->id == $newBook->id, 'Page book is now the new book'); + + $newBookResp = $this->get($newBook->getUrl()); + $newBookResp->assertSee('moved page'); + $newBookResp->assertSee($page->name); + } + + public function test_chapter_move() + { + $chapter = \BookStack\Chapter::first(); + $currentBook = $chapter->book; + $pageToCheck = $chapter->pages->first(); + $newBook = \BookStack\Book::where('id', '!=', $currentBook->id)->first(); + + $chapterMoveResp = $this->asAdmin()->get($chapter->getUrl() . '/move'); + $chapterMoveResp->assertSee('Move Chapter'); + + $moveChapterResp = $this->put($chapter->getUrl() . '/move', [ + 'entity_selection' => 'book:' . $newBook->id + ]); + + $chapter = \BookStack\Chapter::find($chapter->id); + $moveChapterResp->assertRedirect($chapter->getUrl()); + $this->assertTrue($chapter->book->id === $newBook->id, 'Chapter Book is now the new book'); + + $newBookResp = $this->get($newBook->getUrl()); + $newBookResp->assertSee('moved chapter'); + $newBookResp->assertSee($chapter->name); + + $pageToCheck = \BookStack\Page::find($pageToCheck->id); + $this->assertTrue($pageToCheck->book_id === $newBook->id, 'Chapter child page\'s book id has changed to the new book'); + $pageCheckResp = $this->get($pageToCheck->getUrl()); + $pageCheckResp->assertSee($newBook->name); + } + + public function test_book_sort() + { + $oldBook = Book::query()->first(); + $chapterToMove = $this->newChapter(['name' => 'chapter to move'], $oldBook); + $newBook = $this->newBook(['name' => 'New sort book']); + $pagesToMove = Page::query()->take(5)->get(); + + // Create request data + $reqData = [ + [ + 'id' => $chapterToMove->id, + 'sort' => 0, + 'parentChapter' => false, + 'type' => 'chapter', + 'book' => $newBook->id + ] + ]; + foreach ($pagesToMove as $index => $page) { + $reqData[] = [ + 'id' => $page->id, + 'sort' => $index, + 'parentChapter' => $index === count($pagesToMove) - 1 ? $chapterToMove->id : false, + 'type' => 'page', + 'book' => $newBook->id + ]; + } + + $sortResp = $this->asAdmin()->put($newBook->getUrl() . '/sort', ['sort-tree' => json_encode($reqData)]); + $sortResp->assertRedirect($newBook->getUrl()); + $sortResp->assertStatus(302); + $this->assertDatabaseHas('chapters', [ + 'id' => $chapterToMove->id, + 'book_id' => $newBook->id, + 'priority' => 0 + ]); + $this->assertTrue($newBook->chapters()->count() === 1); + $this->assertTrue($newBook->chapters()->first()->pages()->count() === 1); - $this->visit($this->book->getUrl()) - ->see($draft->name) - ->visit($this->book->getUrl() . '/sort') - ->dontSee($draft->name); + $checkPage = $pagesToMove[1]; + $checkResp = $this->get(Page::find($checkPage->id)->getUrl()); + $checkResp->assertSee($newBook->name); } } \ No newline at end of file