Fixed inaccessible revisions, added regression tests

Fixes #309
This commit is contained in:
Dan Brown 2017-02-25 12:29:01 +00:00
parent 4a2a539c08
commit 387047f262
No known key found for this signature in database
GPG Key ID: 46D9F943C24A2EF9
5 changed files with 68 additions and 17 deletions

View File

@ -369,10 +369,13 @@ class PageController extends Controller
public function showRevision($bookSlug, $pageSlug, $revisionId)
{
$page = $this->entityRepo->getBySlug('page', $pageSlug, $bookSlug);
$revision = $this->entityRepo->getById('page_revision', $revisionId, false);
$revision = $page->revisions()->where('id', '=', $revisionId)->first();
if ($revision === null) {
abort(404);
}
$page->fill($revision->toArray());
$this->setPageTitle(trans('entities.pages_revision_named', ['pageName'=>$page->getShortName()]));
$this->setPageTitle(trans('entities.pages_revision_named', ['pageName' => $page->getShortName()]));
return view('pages/revision', [
'page' => $page,
@ -390,7 +393,10 @@ class PageController extends Controller
public function showRevisionChanges($bookSlug, $pageSlug, $revisionId)
{
$page = $this->entityRepo->getBySlug('page', $pageSlug, $bookSlug);
$revision = $this->entityRepo->getById('page_revision', $revisionId);
$revision = $page->revisions()->where('id', '=', $revisionId)->first();
if ($revision === null) {
abort(404);
}
$prev = $revision->getPrevious();
$prevContent = ($prev === null) ? '' : $prev->html;

View File

@ -86,8 +86,7 @@ class EntityRepo
$this->entities = [
'page' => $this->page,
'chapter' => $this->chapter,
'book' => $this->book,
'page_revision' => $this->pageRevision
'book' => $this->book
];
$this->viewService = $viewService;
$this->permissionService = $permissionService;

View File

@ -1,33 +1,56 @@
<?php namespace Tests;
class PageContentTest extends BrowserKitTest
use BookStack\Page;
use BookStack\Repos\EntityRepo;
class PageContentTest extends TestCase
{
public function test_page_includes()
{
$page = \BookStack\Page::first();
$secondPage = \BookStack\Page::all()->get(2);
$page = Page::first();
$secondPage = Page::all()->get(2);
$secondPage->html = "<p id='section1'>Hello, This is a test</p><p id='section2'>This is a second block of content</p>";
$secondPage->save();
$this->asAdmin()->visit($page->getUrl())
->dontSee('Hello, This is a test');
$this->asEditor();
$pageContent = $this->get($page->getUrl());
$pageContent->assertDontSee('Hello, This is a test');
$originalHtml = $page->html;
$page->html .= "{{@{$secondPage->id}}}";
$page->save();
$this->asAdmin()->visit($page->getUrl())
->see('Hello, This is a test')
->see('This is a second block of content');
$pageContent = $this->get($page->getUrl());
$pageContent->assertSee('Hello, This is a test');
$pageContent->assertSee('This is a second block of content');
$page->html = $originalHtml . " Well {{@{$secondPage->id}#section2}}";
$page->save();
$this->asAdmin()->visit($page->getUrl())
->dontSee('Hello, This is a test')
->see('Well This is a second block of content');
$pageContent = $this->get($page->getUrl());
$pageContent->assertDontSee('Hello, This is a test');
$pageContent->assertSee('Well This is a second block of content');
}
public function test_page_revision_views_viewable()
{
$this->asEditor();
$entityRepo = $this->app[EntityRepo::class];
$page = Page::first();
$entityRepo->updatePage($page, $page->book_id, ['name' => 'updated page', 'html' => '<p>new content</p>', 'summary' => 'page revision testing']);
$pageRevision = $page->revisions->last();
$revisionView = $this->get($page->getUrl() . '/revisions/' . $pageRevision->id);
$revisionView->assertStatus(200);
$revisionView->assertSee('new content');
$revisionView = $this->get($page->getUrl() . '/revisions/' . $pageRevision->id . '/changes');
$revisionView->assertStatus(200);
$revisionView->assertSee('new content');
}
}

View File

@ -84,7 +84,7 @@ class PublicActionTest extends BrowserKitTest
{
$page = \BookStack\Page::first();
$this->asAdmin()->visit($page->getUrl());
Auth::logout();
\Auth::logout();
view()->share('pageTitle', '');
$this->forceVisit('/cats/dogs/hippos');
$this->dontSee($page->name);

View File

@ -13,6 +13,7 @@ abstract class TestCase extends BaseTestCase
use DatabaseTransactions;
protected $admin;
protected $editor;
/**
* Set the current user context to be an admin.
@ -35,6 +36,28 @@ abstract class TestCase extends BaseTestCase
return $this->admin;
}
/**
* Set the current user context to be an editor.
* @return $this
*/
public function asEditor()
{
return $this->actingAs($this->getEditor());
}
/**
* Get a editor user.
* @return mixed
*/
public function getEditor() {
if($this->editor === null) {
$editorRole = Role::getRole('editor');
$this->editor = $editorRole->users->first();
}
return $this->editor;
}
/**
* Create and return a new book.
* @param array $input