silverstripe-blog/tests/php/BlogCategoryTest.php

179 lines
5.9 KiB
PHP
Raw Normal View History

2014-03-23 15:40:53 +01:00
<?php
namespace SilverStripe\Blog\Tests;
use SilverStripe\Blog\Model\Blog;
use SilverStripe\Blog\Model\BlogCategory;
use SilverStripe\Blog\Model\BlogPost;
use SilverStripe\Blog\Model\BlogTag;
use SilverStripe\Control\Controller;
use SilverStripe\Dev\FunctionalTest;
use SilverStripe\ORM\FieldType\DBDatetime;
use SilverStripe\ORM\ValidationException;
use SilverStripe\Security\Member;
use SilverStripe\Security\Security;
2015-11-21 07:17:29 +01:00
class BlogCategoryTest extends FunctionalTest
{
/**
* @var string
*/
protected static $fixture_file = 'blog.yml';
2014-03-23 15:40:53 +01:00
2015-11-21 07:17:29 +01:00
/**
* {@inheritdoc}
*/
2021-11-01 05:27:30 +01:00
protected function setUp(): void
2015-11-21 07:17:29 +01:00
{
parent::setUp();
2015-05-09 16:33:12 +02:00
DBDatetime::set_mock_now('2013-10-10 20:00:00');
2015-11-21 07:17:29 +01:00
}
2014-03-23 15:40:53 +01:00
2015-11-21 07:17:29 +01:00
/**
* {@inheritdoc}
*/
2021-11-01 05:27:30 +01:00
protected function tearDown(): void
2015-11-21 07:17:29 +01:00
{
DBDatetime::clear_mock_now();
2015-05-09 16:33:12 +02:00
2015-11-21 07:17:29 +01:00
parent::tearDown();
}
2014-03-23 15:40:53 +01:00
2015-11-21 07:17:29 +01:00
/**
* Tests that any blog posts returned from $category->BlogPosts() many_many are published,
* both by normal 'save & publish' functionality and by publish date.
*/
public function testBlogPosts()
{
$member = Security::getCurrentUser();
2014-03-23 15:40:53 +01:00
2015-11-21 07:17:29 +01:00
if ($member) {
Security::setCurrentUser(null);
2015-11-21 07:17:29 +01:00
}
2015-05-09 16:33:12 +02:00
$this->objFromFixture(BlogPost::class, 'FirstBlogPost');
2014-03-23 15:40:53 +01:00
2015-11-21 07:17:29 +01:00
/**
* @var BlogCategory $category
*/
$category = $this->objFromFixture(BlogCategory::class, 'FirstCategory');
$this->assertEquals(5, $category->BlogPosts()->count(), 'Category blog post count');
2015-11-21 07:17:29 +01:00
}
/**
* @see https://github.com/silverstripe/silverstripe-blog/issues/376
*/
public function testAllowMultibyteUrlSegment()
{
$blog = $this->objFromFixture(Blog::class, 'FirstBlog');
$cat = new BlogCategory();
$cat->BlogID = $blog->ID;
$cat->Title = 'تست';
$cat->write();
// urlencoded
$this->assertEquals('%D8%AA%D8%B3%D8%AA', $cat->URLSegment);
$link = Controller::join_links($cat->Blog()->Link(), 'category', '%D8%AA%D8%B3%D8%AA');
$this->assertEquals($link, $cat->getLink());
}
2015-11-21 07:17:29 +01:00
public function testCanView()
{
$this->useDraftSite();
$this->objFromFixture(Member::class, 'Admin');
$editor = $this->objFromFixture(Member::class, 'Editor');
$category = $this->objFromFixture(BlogCategory::class, 'SecondCategory');
2015-11-21 07:17:29 +01:00
$this->assertFalse($category->canView($editor), 'Editor should not be able to view category.');
}
2015-11-21 07:17:29 +01:00
/**
* The first blog can be viewed by anybody.
*/
public function testCanEdit()
{
$this->useDraftSite();
$admin = $this->objFromFixture(Member::class, 'Admin');
$editor = $this->objFromFixture(Member::class, 'Editor');
$category = $this->objFromFixture(BlogCategory::class, 'FirstCategory');
2015-11-21 07:17:29 +01:00
$this->assertTrue($category->canEdit($admin), 'Admin should be able to edit category.');
$this->assertTrue($category->canEdit($editor), 'Editor should be able to edit category.');
$category = $this->objFromFixture(BlogCategory::class, 'SecondCategory');
2015-11-21 07:17:29 +01:00
$this->assertTrue($category->canEdit($admin), 'Admin should be able to edit category.');
$this->assertFalse($category->canEdit($editor), 'Editor should not be able to edit category.');
$category = $this->objFromFixture(BlogCategory::class, 'ThirdCategory');
2015-05-09 16:33:12 +02:00
2015-11-21 07:17:29 +01:00
$this->assertTrue($category->canEdit($admin), 'Admin should always be able to edit category.');
$this->assertTrue($category->canEdit($editor), 'Editor should be able to edit category.');
}
2015-11-21 07:17:29 +01:00
public function testCanCreate()
{
$this->useDraftSite();
$admin = $this->objFromFixture(Member::class, 'Admin');
$editor = $this->objFromFixture(Member::class, 'Editor');
$category = singleton(BlogCategory::class);
2015-11-21 07:17:29 +01:00
$this->assertTrue($category->canCreate($admin), 'Admin should be able to create category.');
$this->assertTrue($category->canCreate($editor), 'Editor should be able to create category.');
}
2015-11-21 07:17:29 +01:00
public function testCanDelete()
{
$this->useDraftSite();
$admin = $this->objFromFixture(Member::class, 'Admin');
$editor = $this->objFromFixture(Member::class, 'Editor');
$category = $this->objFromFixture(BlogCategory::class, 'FirstCategory');
2015-11-21 07:17:29 +01:00
$this->assertTrue($category->canDelete($admin), 'Admin should be able to delete category.');
$this->assertTrue($category->canDelete($editor), 'Editor should be able to category category.');
$category = $this->objFromFixture(BlogCategory::class, 'SecondCategory');
2015-11-21 07:17:29 +01:00
$this->assertTrue($category->canDelete($admin), 'Admin should be able to delete category.');
$this->assertFalse($category->canDelete($editor), 'Editor should not be able to delete category.');
$category = $this->objFromFixture(BlogCategory::class, 'ThirdCategory');
2015-11-21 07:17:29 +01:00
$this->assertTrue($category->canDelete($admin), 'Admin should always be able to delete category.');
$this->assertTrue($category->canDelete($editor), 'Editor should be able to delete category.');
}
public function testDuplicateCategories()
{
$blog = new Blog();
$blog->Title = 'Testing for duplicate categories';
$blog->write();
$category = new BlogCategory();
$category->Title = 'Test';
$category->BlogID = $blog->ID;
$category->URLSegment = 'test';
$category->write();
$category = new BlogCategory();
$category->Title = 'Test';
$category->URLSegment = 'test';
$category->BlogID = $blog->ID;
try {
$category->write();
$this->fail('Duplicate BlogCategory written');
} catch (ValidationException $e) {
$messages = $e->getResult()->getMessages();
$this->assertCount(1, $messages);
$this->assertEquals(BlogTag::DUPLICATE_EXCEPTION, $messages[0]['messageType']);
}
}
2014-03-23 15:40:53 +01:00
}