X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/a24f3d7d4759df6b509533daaa1c9686a074e9fe..dd4d2f4696edb68ace506abf18aa7a8e19dba164:/tests/Entity/SortTest.php diff --git a/tests/Entity/SortTest.php b/tests/Entity/SortTest.php index d78b94479..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); - $this->visit($this->book->getUrl()) - ->see($draft->name) - ->visit($this->book->getUrl() . '/sort') - ->dontSee($draft->name); + $resp = $this->get($this->book->getUrl() . '/sort'); + $resp->assertDontSee($draft->name); } public function test_page_move() @@ -27,17 +32,21 @@ class SortTest extends TestCase $page = \BookStack\Page::first(); $currentBook = $page->book; $newBook = \BookStack\Book::where('id', '!=', $currentBook->id)->first(); - $this->asAdmin()->visit($page->getUrl() . '/move') - ->see('Move Page') - ->type('book:' . $newBook->id, 'entity_selection')->press('Move Page'); + $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); - $this->seePageIs($page->getUrl()); + + $movePageResp->assertRedirect($page->getUrl()); $this->assertTrue($page->book->id == $newBook->id, 'Page book is now the new book'); - $this->visit($newBook->getUrl()) - ->seeInNthElement('.activity-list-item', 0, 'moved page') - ->seeInNthElement('.activity-list-item', 0, $page->name); + $newBookResp = $this->get($newBook->getUrl()); + $newBookResp->assertSee('moved page'); + $newBookResp->assertSee($page->name); } public function test_chapter_move() @@ -47,22 +56,68 @@ class SortTest extends TestCase $pageToCheck = $chapter->pages->first(); $newBook = \BookStack\Book::where('id', '!=', $currentBook->id)->first(); - $this->asAdmin()->visit($chapter->getUrl() . '/move') - ->see('Move Chapter') - ->type('book:' . $newBook->id, 'entity_selection')->press('Move Chapter'); + $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); - $this->seePageIs($chapter->getUrl()); + $moveChapterResp->assertRedirect($chapter->getUrl()); $this->assertTrue($chapter->book->id === $newBook->id, 'Chapter Book is now the new book'); - $this->visit($newBook->getUrl()) - ->seeInNthElement('.activity-list-item', 0, 'moved chapter') - ->seeInNthElement('.activity-list-item', 0, $chapter->name); + $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'); - $this->visit($pageToCheck->getUrl()) - ->see($newBook->name); + $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); + + $checkPage = $pagesToMove[1]; + $checkResp = $this->get(Page::find($checkPage->id)->getUrl()); + $checkResp->assertSee($newBook->name); } } \ No newline at end of file