silverstripe-contentreview/tests/ContentReviewSettingsTest.php

289 lines
9.8 KiB
PHP
Raw Normal View History

2014-02-24 01:38:16 +01:00
<?php
/**
2015-11-02 00:27:42 +01:00
* This class tests that settings are inherited correctly based on the inherited,
* custom or disabled settings.
*
* @mixin PHPUnit_Framework_TestCase
2014-02-24 01:38:16 +01:00
*/
2015-11-02 00:27:42 +01:00
class ContentReviewSettingsTest extends SapphireTest
{
/**
* @var string
*/
public static $fixture_file = "contentreview/tests/ContentReviewSettingsTest.yml";
/**
* @var array
*/
protected $requiredExtensions = array(
"SiteTree" => array("SiteTreeContentReview"),
"Group" => array("ContentReviewOwner"),
"Member" => array("ContentReviewOwner"),
"CMSPageEditController" => array("ContentReviewCMSExtension"),
"SiteConfig" => array("ContentReviewDefaultSettings"),
);
public function testAdvanceReviewDate10Days()
{
/** @var Page|SiteTreeContentReview $page */
$page = new Page();
$page->ContentReviewType = "Custom";
$page->ReviewPeriodDays = 10;
$this->assertTrue($page->advanceReviewDate());
$page->write();
$this->assertEquals(date("Y-m-d", strtotime("now + 10 days")), $page->NextReviewDate);
}
public function testAdvanceReviewDateNull()
{
/** @var Page|SiteTreeContentReview $page */
$page = new Page();
$page->ContentReviewType = "Custom";
$page->ReviewPeriodDays = 0;
$this->assertFalse($page->advanceReviewDate());
$page->write();
$this->assertEquals(null, $page->NextReviewDate);
}
public function testAdvanceReviewFromCustomSettings()
{
/** @var Page|SiteTreeContentReview $page */
$page = $this->objFromFixture("Page", "custom");
$this->assertTrue($page->advanceReviewDate());
$page->write();
$this->assertEquals(date("Y-m-d", strtotime("now + " . $page->ReviewPeriodDays . " days")), $page->NextReviewDate);
}
public function testAdvanceReviewFromInheritedSettings()
{
2015-11-18 04:38:28 +01:00
// When a parent page is advanced, the next review date of the child is not automatically advanced
2015-11-02 00:27:42 +01:00
$parentPage = $this->objFromFixture("Page", "page-1");
2015-11-18 04:38:28 +01:00
$this->assertTrue($parentPage->advanceReviewDate());
$parentPage->write();
$page = $this->objFromFixture("Page", "page-1-1");
2015-11-18 04:38:28 +01:00
$this->assertEquals(date("Y-m-d", strtotime("now + 5 days")), $parentPage->NextReviewDate);
$this->assertEquals('2011-04-12', $page->NextReviewDate);
2015-11-02 00:27:42 +01:00
2015-11-18 04:38:28 +01:00
// When a sub page is advanced, the next review date is advanced by the number of days in the parent
2015-11-02 00:27:42 +01:00
$this->assertTrue($page->advanceReviewDate());
$page->write();
$this->assertEquals(date("Y-m-d", strtotime("now + 5 days")), $page->NextReviewDate);
2015-11-02 00:27:42 +01:00
}
public function testAdvanceReviewFromInheritedSiteConfigSettings()
{
/** @var Page|SiteTreeContentReview $page */
$page = $this->objFromFixture("Page", "inherit");
/** @var SiteConfig|ContentReviewDefaultSettings $siteConfig */
$siteConfig = $this->objFromFixture("SiteConfig", "default");
$this->assertTrue($page->advanceReviewDate());
$page->write();
$this->assertEquals(date("Y-m-d", strtotime("now + " . $siteConfig->ReviewPeriodDays . " days")), $page->NextReviewDate);
}
public function testGetSettingsObjectFromCustom()
{
/** @var Page|SiteTreeContentReview $page */
$page = $this->objFromFixture("Page", "custom");
$this->assertEquals("Custom", $page->ContentReviewType);
$this->assertEquals($page, $page->getOptions());
}
public function testGetSettingsObjectFromDisabled()
{
/** @var Page|SiteTreeContentReview $page */
$page = $this->objFromFixture("Page", "disabled");
$this->assertEquals("Disabled", $page->ContentReviewType);
$this->assertFalse($page->getOptions());
}
public function testGetOptionObjectFromInheritedDisabled()
{
/** @var Page|SiteTreeContentReview $page */
$page = $this->objFromFixture("Page", "page-2-1-1");
$this->assertEquals("Inherit", $page->ContentReviewType);
$this->assertFalse($page->getOptions());
}
public function testGetOptionObjectFromDeeplyInheritedPage()
{
/** @var Page|SiteTreeContentReview $page */
$page = $this->objFromFixture("Page", "page-3-1-1-1");
$this->assertEquals("Inherit", $page->ContentReviewType);
$this->assertInstanceOf("SiteConfig", $page->getOptions());
}
public function testGetSettingsObjectFromInheritPage()
{
/** @var Page|SiteTreeContentReview $page */
$page = $this->objFromFixture("Page", "page-1-1");
/** @var Page|SiteTreeContentReview $parentPage */
$parentPage = $this->objFromFixture("Page", "page-1");
$this->assertEquals("Inherit", $page->ContentReviewType);
$this->assertEquals(get_class($parentPage), get_class($page->getOptions()));
$this->assertEquals($parentPage->ID, $page->getOptions()->ID);
}
public function testGetSettingsObjectFromInheritedRootPage()
{
/** @var Page|SiteTreeContentReview $page */
$page = $this->objFromFixture("Page", "inherit");
$this->assertEquals("Inherit", $page->ContentReviewType);
$this->assertEquals($this->objFromFixture("SiteConfig", "default"), $page->getOptions());
}
public function testGetNextReviewDateFromCustomSettings()
{
/** @var Page|SiteTreeContentReview $page */
$page = $this->objFromFixture('Page', 'custom');
$date = $page->getReviewDate();
$this->assertEquals('2010-02-01', $date->format('Y-m-d'));
}
public function testGetNextReviewDateFromSiteConfigInheritedSetting()
{
/** @var Page|SiteTreeContentReview $page */
$page = $this->objFromFixture("Page", "inherit");
$nextReviewDate = $page->getReviewDate();
$this->assertInstanceOf("Date", $nextReviewDate);
/** @var SiteConfig|ContentReviewDefaultSettings $siteConfig */
$siteConfig = $this->objFromFixture("SiteConfig", "default");
$expected = $this->addDaysToDate(SS_Datetime::now(), $siteConfig->ReviewPeriodDays);
$this->assertEquals($expected, $nextReviewDate->format("Y-m-d"));
}
public function testGetNextReviewDateFromPageInheritedSetting()
{
2015-11-18 04:38:28 +01:00
// Although page-1-1 inherits from page-1, it has an independent review date
2015-11-02 00:27:42 +01:00
$page = $this->objFromFixture("Page", "page-1-1");
$nextReviewDate = $page->getReviewDate();
$this->assertInstanceOf("Date", $nextReviewDate);
$this->assertEquals('2011-04-12', $nextReviewDate->format("Y-m-d"));
2015-11-02 00:27:42 +01:00
}
public function testUpdateNextReviewDateFromCustomToDisabled()
{
/** @var Page|SiteTreeContentReview $page */
$page = $this->objFromFixture("Page", "custom");
// before write()
$this->assertEquals("2010-02-01", $page->NextReviewDate);
$page->ContentReviewType = "Disabled";
$page->write();
DataObject::flush_and_destroy_cache();
unset($page);
/** @var Page|SiteTreeContentReview $page */
$page = $this->objFromFixture("Page", "custom");
$this->assertNull($page->NextReviewDate);
}
public function testUpdateNextReviewDateFromDisabledToCustom()
{
/** @var Page|SiteTreeContentReview $page */
$page = $this->objFromFixture("Page", "disabled");
$this->assertNull($page->NextReviewDate);
$page->ContentReviewType = "Custom";
$page->ReviewPeriodDays = "7";
$page->write();
DataObject::flush_and_destroy_cache();
unset($page);
/** @var Page|SiteTreeContentReview $page */
$page = $this->objFromFixture("Page", "disabled");
$expected = date("Y-m-d", strtotime("+ " . $page->ReviewPeriodDays . " days"));
$this->assertEquals($expected, $page->NextReviewDate);
}
public function testParentChangedOptionsAndChildShouldToo()
{
/** @var Page|SiteTreeContentReview $parentPage */
$parentPage = $this->objFromFixture("Page", "page-1");
/** @var Page|SiteTreeContentReview $childPage */
$childPage = $this->objFromFixture("Page", "page-1-1");
2015-11-18 04:38:28 +01:00
// Parent and child pages have different review dates
$this->assertNotEquals($parentPage->NextReviewDate, $childPage->NextReviewDate);
2015-11-02 00:27:42 +01:00
// But if we change the parent page ReviewPeriodDays to 10, the childs stays the same
2015-11-02 00:27:42 +01:00
$parentPage->ReviewPeriodDays = 10;
$parentPage->write();
// Flush all the caches!
DataObject::flush_and_destroy_cache();
/** @var Page|SiteTreeContentReview $page */
$parentPage = $this->objFromFixture("Page", "page-1");
/** @var Page|SiteTreeContentReview $page */
$childPage = $this->objFromFixture("Page", "page-1-1");
// The parent page's date advances, but not the child's
$this->assertEquals('2011-04-12', $childPage->NextReviewDate);
$this->assertEquals($this->addDaysToDate(date("Y-m-d"), 10), $parentPage->NextReviewDate);
2015-11-18 04:38:28 +01:00
// Reviewing the child page should, however, advance its review by 10 days
$childPage->advanceReviewDate();
$childPage->write();
2015-11-02 00:27:42 +01:00
$this->assertEquals($this->addDaysToDate(date("Y-m-d"), 10), $childPage->NextReviewDate);
}
/**
* @param string|SS_DateTime|DateTime $date
* @param int $days
* @param string $format
*
* @return bool|string
*/
private function addDaysToDate($date, $days, $format = "Y-m-d")
{
if (is_object($date)) {
$sec = strtotime("+ " . $days . " days", $date->format("U"));
} else {
$sec = strtotime("+ " . $days . " days", strtotime($date));
}
return date($format, $sec);
}
}