mirror of
https://github.com/silverstripe/silverstripe-blog
synced 2024-10-22 11:05:58 +02:00
Merge branch '2'
This commit is contained in:
commit
271fbfeae7
@ -25,6 +25,7 @@ use SilverStripe\Security\Member;
|
|||||||
use SilverStripe\Security\Permission;
|
use SilverStripe\Security\Permission;
|
||||||
use SilverStripe\Security\Security;
|
use SilverStripe\Security\Security;
|
||||||
use SilverStripe\TagField\TagField;
|
use SilverStripe\TagField\TagField;
|
||||||
|
use SilverStripe\Versioned\Versioned;
|
||||||
use SilverStripe\View\ArrayData;
|
use SilverStripe\View\ArrayData;
|
||||||
use SilverStripe\View\Requirements;
|
use SilverStripe\View\Requirements;
|
||||||
|
|
||||||
@ -508,6 +509,11 @@ class BlogPost extends Page
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If on draft stage, user has permission to view draft, so show it
|
||||||
|
if (Versioned::get_stage() === Versioned::DRAFT) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var DBDatetime $publishDate
|
* @var DBDatetime $publishDate
|
||||||
*/
|
*/
|
||||||
|
@ -7,6 +7,7 @@ use SilverStripe\Core\Config\Config;
|
|||||||
use SilverStripe\Dev\SapphireTest;
|
use SilverStripe\Dev\SapphireTest;
|
||||||
use SilverStripe\ORM\FieldType\DBDatetime;
|
use SilverStripe\ORM\FieldType\DBDatetime;
|
||||||
use SilverStripe\Security\Member;
|
use SilverStripe\Security\Member;
|
||||||
|
use SilverStripe\Versioned\Versioned;
|
||||||
|
|
||||||
class BlogPostTest extends SapphireTest
|
class BlogPostTest extends SapphireTest
|
||||||
{
|
{
|
||||||
@ -28,16 +29,26 @@ class BlogPostTest extends SapphireTest
|
|||||||
/**
|
/**
|
||||||
* @dataProvider canViewProvider
|
* @dataProvider canViewProvider
|
||||||
*/
|
*/
|
||||||
public function testCanView($date, $user, $page, $canView)
|
public function testCanView($date, $user, $page, $canView, $stage)
|
||||||
{
|
{
|
||||||
$userRecord = $this->objFromFixture(Member::class, $user);
|
$userRecord = $this->objFromFixture(Member::class, $user);
|
||||||
$pageRecord = $this->objFromFixture(BlogPost::class, $page);
|
$pageRecord = $this->objFromFixture(BlogPost::class, $page);
|
||||||
DBDatetime::set_mock_now($date);
|
DBDatetime::set_mock_now($date);
|
||||||
|
if ($stage === 'Live') {
|
||||||
|
$pageRecord->publishSingle();
|
||||||
|
}
|
||||||
|
|
||||||
|
Versioned::set_stage($stage);
|
||||||
$this->assertEquals($canView, $pageRecord->canView($userRecord));
|
$this->assertEquals($canView, $pageRecord->canView($userRecord));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return array
|
* @return array Format:
|
||||||
|
* - mock now date
|
||||||
|
* - user role (see fixture)
|
||||||
|
* - blog post fixture ID
|
||||||
|
* - expected result
|
||||||
|
* - versioned stage
|
||||||
*/
|
*/
|
||||||
public function canViewProvider()
|
public function canViewProvider()
|
||||||
{
|
{
|
||||||
@ -45,30 +56,40 @@ class BlogPostTest extends SapphireTest
|
|||||||
$somePastDate = '2009-10-10 20:00:00';
|
$somePastDate = '2009-10-10 20:00:00';
|
||||||
return [
|
return [
|
||||||
// Check this post given the date has passed
|
// Check this post given the date has passed
|
||||||
[$someFutureDate, 'Editor', 'PostA', true],
|
[$someFutureDate, 'Editor', 'PostA', true, 'Stage'],
|
||||||
[$someFutureDate, 'Contributor', 'PostA', true],
|
[$someFutureDate, 'Contributor', 'PostA', true, 'Stage'],
|
||||||
[$someFutureDate, 'BlogEditor', 'PostA', true],
|
[$someFutureDate, 'BlogEditor', 'PostA', true, 'Stage'],
|
||||||
[$someFutureDate, 'Writer', 'PostA', true],
|
[$someFutureDate, 'Writer', 'PostA', true, 'Stage'],
|
||||||
|
|
||||||
// Check unpublished pages
|
// Check unpublished pages
|
||||||
[$somePastDate, 'Editor', 'PostA', true],
|
[$somePastDate, 'Editor', 'PostA', true, 'Stage'],
|
||||||
[$somePastDate, 'Contributor', 'PostA', true],
|
[$somePastDate, 'Contributor', 'PostA', true, 'Stage'],
|
||||||
[$somePastDate, 'BlogEditor', 'PostA', true],
|
[$somePastDate, 'BlogEditor', 'PostA', true, 'Stage'],
|
||||||
[$somePastDate, 'Writer', 'PostA', true],
|
[$somePastDate, 'Writer', 'PostA', true, 'Stage'],
|
||||||
|
|
||||||
|
|
||||||
// Test a page that was authored by another user
|
// Test a page that was authored by another user
|
||||||
|
|
||||||
// Check this post given the date has passed
|
// Check this post given the date has passed
|
||||||
[$someFutureDate, 'Editor', 'FirstBlogPost', true],
|
[$someFutureDate, 'Editor', 'FirstBlogPost', true, 'Stage'],
|
||||||
[$someFutureDate, 'Contributor', 'FirstBlogPost', true],
|
[$someFutureDate, 'Contributor', 'FirstBlogPost', true, 'Stage'],
|
||||||
[$someFutureDate, 'BlogEditor', 'FirstBlogPost', true],
|
[$someFutureDate, 'BlogEditor', 'FirstBlogPost', true, 'Stage'],
|
||||||
[$someFutureDate, 'Writer', 'FirstBlogPost', true],
|
[$someFutureDate, 'Writer', 'FirstBlogPost', true, 'Stage'],
|
||||||
|
|
||||||
// Check future pages - non-editors shouldn't be able to see this
|
// Check future pages in draft stage - users with "view draft pages" permission should
|
||||||
[$somePastDate, 'Editor', 'FirstBlogPost', true],
|
// be able to see this, but visitors should not
|
||||||
[$somePastDate, 'Contributor', 'FirstBlogPost', false],
|
[$somePastDate, 'Editor', 'FirstBlogPost', true, 'Stage'],
|
||||||
[$somePastDate, 'BlogEditor', 'FirstBlogPost', false],
|
[$somePastDate, 'Contributor', 'FirstBlogPost', true, 'Stage'],
|
||||||
[$somePastDate, 'Writer', 'FirstBlogPost', false],
|
[$somePastDate, 'BlogEditor', 'FirstBlogPost', true, 'Stage'],
|
||||||
|
[$somePastDate, 'Writer', 'FirstBlogPost', true, 'Stage'],
|
||||||
|
[$somePastDate, 'Visitor', 'FirstBlogPost', false, 'Stage'],
|
||||||
|
|
||||||
|
// No future pages in live stage should be visible, even to users that can edit them (in draft)
|
||||||
|
[$somePastDate, 'Editor', 'FirstBlogPost', false, 'Live'],
|
||||||
|
[$somePastDate, 'Contributor', 'FirstBlogPost', false, 'Live'],
|
||||||
|
[$somePastDate, 'BlogEditor', 'FirstBlogPost', false, 'Live'],
|
||||||
|
[$somePastDate, 'Writer', 'FirstBlogPost', false, 'Live'],
|
||||||
|
[$somePastDate, 'Visitor', 'FirstBlogPost', false, 'Live'],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user