mirror of
https://github.com/BookStackApp/BookStack.git
synced 2024-08-27 04:32:14 +00:00
Converted sort tests to non browserkit testing
Added testing to cover book sort endpoint. Closes #283
This commit is contained in:
parent
33a2999a57
commit
7c9937e924
@ -5,10 +5,10 @@
|
|||||||
<div class="faded-small toolbar">
|
<div class="faded-small toolbar">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-6 faded">
|
<div class="col-sm-6 faded">
|
||||||
@include('books._breadcrumbs', ['book' => $book])
|
@include('books._breadcrumbs', ['book' => $book])
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-6">
|
<div class="col-sm-6">
|
||||||
<div class="action-buttons faded">
|
<div class="action-buttons faded">
|
||||||
@if(userCan('page-create', $book))
|
@if(userCan('page-create', $book))
|
||||||
<a href="{{ $book->getUrl('/page/create') }}" class="text-pos text-button"><i class="zmdi zmdi-plus"></i>{{ trans('entities.pages_new') }}</a>
|
<a href="{{ $book->getUrl('/page/create') }}" class="text-pos text-button"><i class="zmdi zmdi-plus"></i>{{ trans('entities.pages_new') }}</a>
|
||||||
|
@ -51,7 +51,7 @@ abstract class BrowserKitTest extends TestCase
|
|||||||
*/
|
*/
|
||||||
public function getAdmin() {
|
public function getAdmin() {
|
||||||
if($this->admin === null) {
|
if($this->admin === null) {
|
||||||
$adminRole = Role::getRole('admin');
|
$adminRole = Role::getSystemRole('admin');
|
||||||
$this->admin = $adminRole->users->first();
|
$this->admin = $adminRole->users->first();
|
||||||
}
|
}
|
||||||
return $this->admin;
|
return $this->admin;
|
||||||
|
@ -1,6 +1,10 @@
|
|||||||
<?php namespace Tests;
|
<?php namespace Tests;
|
||||||
|
|
||||||
class SortTest extends BrowserKitTest
|
use BookStack\Book;
|
||||||
|
use BookStack\Page;
|
||||||
|
use BookStack\Repos\EntityRepo;
|
||||||
|
|
||||||
|
class SortTest extends TestCase
|
||||||
{
|
{
|
||||||
protected $book;
|
protected $book;
|
||||||
|
|
||||||
@ -13,13 +17,14 @@ class SortTest extends BrowserKitTest
|
|||||||
public function test_drafts_do_not_show_up()
|
public function test_drafts_do_not_show_up()
|
||||||
{
|
{
|
||||||
$this->asAdmin();
|
$this->asAdmin();
|
||||||
$entityRepo = app('\BookStack\Repos\EntityRepo');
|
$entityRepo = app(EntityRepo::class);
|
||||||
$draft = $entityRepo->getDraftPage($this->book);
|
$draft = $entityRepo->getDraftPage($this->book);
|
||||||
|
|
||||||
$this->visit($this->book->getUrl())
|
$resp = $this->get($this->book->getUrl());
|
||||||
->see($draft->name)
|
$resp->assertSee($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()
|
public function test_page_move()
|
||||||
@ -27,17 +32,21 @@ class SortTest extends BrowserKitTest
|
|||||||
$page = \BookStack\Page::first();
|
$page = \BookStack\Page::first();
|
||||||
$currentBook = $page->book;
|
$currentBook = $page->book;
|
||||||
$newBook = \BookStack\Book::where('id', '!=', $currentBook->id)->first();
|
$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);
|
$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->assertTrue($page->book->id == $newBook->id, 'Page book is now the new book');
|
||||||
|
|
||||||
$this->visit($newBook->getUrl())
|
$newBookResp = $this->get($newBook->getUrl());
|
||||||
->seeInNthElement('.activity-list-item', 0, 'moved page')
|
$newBookResp->assertSee('moved page');
|
||||||
->seeInNthElement('.activity-list-item', 0, $page->name);
|
$newBookResp->assertSee($page->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function test_chapter_move()
|
public function test_chapter_move()
|
||||||
@ -47,22 +56,68 @@ class SortTest extends BrowserKitTest
|
|||||||
$pageToCheck = $chapter->pages->first();
|
$pageToCheck = $chapter->pages->first();
|
||||||
$newBook = \BookStack\Book::where('id', '!=', $currentBook->id)->first();
|
$newBook = \BookStack\Book::where('id', '!=', $currentBook->id)->first();
|
||||||
|
|
||||||
$this->asAdmin()->visit($chapter->getUrl() . '/move')
|
$chapterMoveResp = $this->asAdmin()->get($chapter->getUrl() . '/move');
|
||||||
->see('Move Chapter')
|
$chapterMoveResp->assertSee('Move Chapter');
|
||||||
->type('book:' . $newBook->id, 'entity_selection')->press('Move Chapter');
|
|
||||||
|
$moveChapterResp = $this->put($chapter->getUrl() . '/move', [
|
||||||
|
'entity_selection' => 'book:' . $newBook->id
|
||||||
|
]);
|
||||||
|
|
||||||
$chapter = \BookStack\Chapter::find($chapter->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->assertTrue($chapter->book->id === $newBook->id, 'Chapter Book is now the new book');
|
||||||
|
|
||||||
$this->visit($newBook->getUrl())
|
$newBookResp = $this->get($newBook->getUrl());
|
||||||
->seeInNthElement('.activity-list-item', 0, 'moved chapter')
|
$newBookResp->assertSee('moved chapter');
|
||||||
->seeInNthElement('.activity-list-item', 0, $chapter->name);
|
$newBookResp->assertSee($chapter->name);
|
||||||
|
|
||||||
$pageToCheck = \BookStack\Page::find($pageToCheck->id);
|
$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->assertTrue($pageToCheck->book_id === $newBook->id, 'Chapter child page\'s book id has changed to the new book');
|
||||||
$this->visit($pageToCheck->getUrl())
|
$pageCheckResp = $this->get($pageToCheck->getUrl());
|
||||||
->see($newBook->name);
|
$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);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -1,8 +1,54 @@
|
|||||||
<?php namespace Tests;
|
<?php namespace Tests;
|
||||||
|
|
||||||
|
use BookStack\Book;
|
||||||
|
use BookStack\Chapter;
|
||||||
|
use BookStack\Repos\EntityRepo;
|
||||||
|
use BookStack\Role;
|
||||||
use Illuminate\Foundation\Testing\TestCase as BaseTestCase;
|
use Illuminate\Foundation\Testing\TestCase as BaseTestCase;
|
||||||
|
|
||||||
abstract class TestCase extends BaseTestCase
|
abstract class TestCase extends BaseTestCase
|
||||||
{
|
{
|
||||||
use CreatesApplication;
|
use CreatesApplication;
|
||||||
|
|
||||||
|
protected $admin;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the current user context to be an admin.
|
||||||
|
* @return $this
|
||||||
|
*/
|
||||||
|
public function asAdmin()
|
||||||
|
{
|
||||||
|
return $this->actingAs($this->getAdmin());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the current admin user.
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function getAdmin() {
|
||||||
|
if($this->admin === null) {
|
||||||
|
$adminRole = Role::getSystemRole('admin');
|
||||||
|
$this->admin = $adminRole->users->first();
|
||||||
|
}
|
||||||
|
return $this->admin;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create and return a new book.
|
||||||
|
* @param array $input
|
||||||
|
* @return Book
|
||||||
|
*/
|
||||||
|
public function newBook($input = ['name' => 'test book', 'description' => 'My new test book']) {
|
||||||
|
return $this->app[EntityRepo::class]->createFromInput('book', $input, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create and return a new test chapter
|
||||||
|
* @param array $input
|
||||||
|
* @param Book $book
|
||||||
|
* @return Chapter
|
||||||
|
*/
|
||||||
|
public function newChapter($input = ['name' => 'test chapter', 'description' => 'My new test chapter'], Book $book) {
|
||||||
|
return $this->app[EntityRepo::class]->createFromInput('chapter', $input, $book);
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user