Skip to content

Commit

Permalink
Made custom home ignore permissions and added tests
Browse files Browse the repository at this point in the history
Closes #126 and #372
  • Loading branch information
ssddanbrown committed Aug 28, 2017
1 parent 55759bd commit 0a402e3
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 5 deletions.
4 changes: 2 additions & 2 deletions app/Http/Controllers/HomeController.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,8 @@ public function index()
$homepageSetting = setting('app-homepage');
if ($homepageSetting) {
$id = intval(explode(':', $homepageSetting)[0]);
$customHomepage = $this->entityRepo->getById('page', $id);
$this->entityRepo->renderPage($customHomepage);
$customHomepage = $this->entityRepo->getById('page', $id, false, true);
$this->entityRepo->renderPage($customHomepage, true);
}

$view = $customHomepage ? 'home-custom' : 'home';
Expand Down
12 changes: 9 additions & 3 deletions app/Repos/EntityRepo.php
Original file line number Diff line number Diff line change
Expand Up @@ -137,10 +137,15 @@ public function exists($type, $id)
* @param string $type
* @param integer $id
* @param bool $allowDrafts
* @param bool $ignorePermissions
* @return Entity
*/
public function getById($type, $id, $allowDrafts = false)
public function getById($type, $id, $allowDrafts = false, $ignorePermissions = false)
{
if ($ignorePermissions) {
$entity = $this->getEntity($type);
return $entity->newQuery()->find($id);
}
return $this->entityQuery($type, $allowDrafts)->find($id);
}

Expand Down Expand Up @@ -671,9 +676,10 @@ protected function formatHtml($htmlText)
/**
* Render the page for viewing, Parsing and performing features such as page transclusion.
* @param Page $page
* @param bool $ignorePermissions
* @return mixed|string
*/
public function renderPage(Page $page)
public function renderPage(Page $page, $ignorePermissions = false)
{
$content = $page->html;
$matches = [];
Expand All @@ -685,7 +691,7 @@ public function renderPage(Page $page)
$pageId = intval($splitInclude[0]);
if (is_nan($pageId)) continue;

$page = $this->getById('page', $pageId);
$page = $this->getById('page', $pageId, false, $ignorePermissions);
if ($page === null) {
$content = str_replace($matches[0][$index], '', $content);
continue;
Expand Down
33 changes: 33 additions & 0 deletions tests/HomepageTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<?php namespace Tests;

use BookStack\JointPermission;
use BookStack\Page;
use BookStack\Repos\EntityRepo;

class HomepageTest extends TestCase
{

public function test_default_homepage_visible()
{
$this->asEditor();
$homeVisit = $this->get('/');
$homeVisit->assertSee('My Recently Viewed');
$homeVisit->assertSee('Recently Updated Pages');
$homeVisit->assertSee('Recent Activity');
}

public function test_custom_homepage() {
$this->asEditor();
$name = 'My custom homepage';
$content = 'This is the body content of my custom homepage.';
$customPage = $this->newPage(['name' => $name, 'html' => $content]);
$this->setSettings(['app-homepage' => $customPage->id]);

$homeVisit = $this->get('/');
$homeVisit->assertSee($name);
$homeVisit->assertSee($content);
$homeVisit->assertSee('My Recently Viewed');
$homeVisit->assertSee('Recently Updated Pages');
$homeVisit->assertSee('Recent Activity');
}
}
13 changes: 13 additions & 0 deletions tests/TestCase.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
use BookStack\Chapter;
use BookStack\Repos\EntityRepo;
use BookStack\Role;
use BookStack\Services\SettingService;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Illuminate\Foundation\Testing\TestCase as BaseTestCase;

Expand Down Expand Up @@ -88,4 +89,16 @@ public function newPage($input = ['name' => 'test page', 'html' => 'My new test
$draftPage = $entityRepo->getDraftPage($book);
return $entityRepo->publishPageDraft($draftPage, $input);
}

/**
* Quickly sets an array of settings.
* @param $settingsArray
*/
protected function setSettings($settingsArray)
{
$settings = app(SettingService::class);
foreach ($settingsArray as $key => $value) {
$settings->put($key, $value);
}
}
}

0 comments on commit 0a402e3

Please sign in to comment.