mirror of
https://github.com/silverstripe/silverstripe-blog
synced 2024-10-22 11:05:58 +02:00
aaf3aacd9e
Adding tests to check that archive widget correctly only shows blog posts from the related blog and not any other blog.
120 lines
3.7 KiB
PHP
120 lines
3.7 KiB
PHP
<?php
|
|
|
|
class BlogArchiveWidgetTest extends SapphireTest
|
|
{
|
|
protected static $fixture_file = 'BlogArchiveWidgetTest.yml';
|
|
|
|
public function setUp()
|
|
{
|
|
if (!class_exists('Widget')) {
|
|
self::$fixture_file = null;
|
|
parent::setUp();
|
|
$this->markTestSkipped('Test requires silverstripe/widgets to be installed.');
|
|
}
|
|
|
|
SS_Datetime::set_mock_now('2017-09-20 12:00:00');
|
|
|
|
parent::setUp();
|
|
}
|
|
|
|
public function tearDown()
|
|
{
|
|
parent::tearDown();
|
|
|
|
SS_Datetime::clear_mock_now();
|
|
}
|
|
|
|
public function testArchiveMonthlyFromStage()
|
|
{
|
|
$widgetA = $this->objFromFixture('BlogArchiveWidget', 'archive-monthly-a');
|
|
$archiveA = $widgetA->getArchive();
|
|
|
|
$this->assertInstanceOf('SS_List', $archiveA);
|
|
$this->assertCount(3, $archiveA);
|
|
$this->assertDOSContains(array(
|
|
array('Title' => 'August 2017'),
|
|
array('Title' => 'September 2017'),
|
|
array('Title' => 'May 2015'),
|
|
), $archiveA);
|
|
|
|
$widgetB = $this->objFromFixture('BlogArchiveWidget', 'archive-monthly-b');
|
|
$archiveB = $widgetB->getArchive();
|
|
|
|
$this->assertInstanceOf('SS_List', $archiveB);
|
|
$this->assertCount(2, $archiveB);
|
|
$this->assertDOSContains(array(
|
|
array('Title' => 'March 2016'),
|
|
array('Title' => 'June 2016'),
|
|
), $archiveB);
|
|
}
|
|
|
|
public function testArchiveMonthlyFromLive()
|
|
{
|
|
$original = Versioned::current_stage();
|
|
|
|
$this->objFromFixture('BlogPost', 'post-b')->doPublish();
|
|
Versioned::reading_stage('Live');
|
|
|
|
$widget = $this->objFromFixture('BlogArchiveWidget', 'archive-monthly-a');
|
|
$archive = $widget->getArchive();
|
|
|
|
$this->assertCount(1, $archive);
|
|
$this->assertDOSContains(array(
|
|
array('Title' => 'August 2017'),
|
|
), $archive);
|
|
|
|
if ($original) {
|
|
Versioned::reading_stage($original);
|
|
}
|
|
}
|
|
|
|
public function testArchiveYearly()
|
|
{
|
|
$widgetA = $this->objFromFixture('BlogArchiveWidget', 'archive-yearly-a');
|
|
$archiveA = $widgetA->getArchive();
|
|
|
|
$this->assertInstanceOf('SS_List', $archiveA);
|
|
$this->assertCount(2, $archiveA);
|
|
$this->assertDOSContains(array(
|
|
array('Title' => '2017'),
|
|
array('Title' => '2015'),
|
|
), $archiveA);
|
|
|
|
$widgetB = $this->objFromFixture('BlogArchiveWidget', 'archive-yearly-b');
|
|
$archiveB = $widgetB->getArchive();
|
|
|
|
$this->assertInstanceOf('SS_List', $archiveB);
|
|
$this->assertCount(1, $archiveB);
|
|
$this->assertDOSContains(array(
|
|
array('Title' => '2016'),
|
|
), $archiveB);
|
|
}
|
|
|
|
public function testArchiveMonthlyWithNewPostsAdded()
|
|
{
|
|
$original = Versioned::current_stage();
|
|
Versioned::reading_stage('Stage');
|
|
|
|
$widget = $this->objFromFixture('BlogArchiveWidget', 'archive-monthly-a');
|
|
$archive = $widget->getArchive();
|
|
|
|
$this->assertCount(3, $archive, 'Three months are shown in the blog archive list from fixtures');
|
|
|
|
SS_Datetime::set_mock_now('2018-01-01 12:00:00');
|
|
|
|
$newPost = new BlogPost;
|
|
$newPost->ParentID = $this->objFromFixture('Blog', 'blog-a')->ID;
|
|
$newPost->Title = 'My new blog post';
|
|
$newPost->PublishDate = '2018-01-01 08:00:00'; // Same day as the mocked now, but slightly earlier
|
|
$newPost->write();
|
|
|
|
$archive = $widget->getArchive();
|
|
|
|
$this->assertCount(4, $archive, 'Four months are shown in the blog archive list after new post added');
|
|
|
|
if ($original) {
|
|
Versioned::reading_stage($original);
|
|
}
|
|
}
|
|
}
|