diff --git a/app/Http/Controllers/PageController.php b/app/Http/Controllers/PageController.php index 4ed10d61e..623cb9c4d 100644 --- a/app/Http/Controllers/PageController.php +++ b/app/Http/Controllers/PageController.php @@ -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; diff --git a/app/Repos/EntityRepo.php b/app/Repos/EntityRepo.php index 8a8740d76..7b262c3de 100644 --- a/app/Repos/EntityRepo.php +++ b/app/Repos/EntityRepo.php @@ -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; diff --git a/tests/Entity/PageContentTest.php b/tests/Entity/PageContentTest.php index 4f65d3406..6f07b9626 100644 --- a/tests/Entity/PageContentTest.php +++ b/tests/Entity/PageContentTest.php @@ -1,33 +1,56 @@ get(2); + $page = Page::first(); + $secondPage = Page::all()->get(2); $secondPage->html = "

Hello, This is a test

This is a second block of content

"; $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' => '

new content

', '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'); } } diff --git a/tests/PublicActionTest.php b/tests/PublicActionTest.php index 62a321b5e..6f8590d4b 100644 --- a/tests/PublicActionTest.php +++ b/tests/PublicActionTest.php @@ -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); diff --git a/tests/TestCase.php b/tests/TestCase.php index d64aef3db..f3f36ca1c 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -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