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();
|
|
|
|
|
2015-11-17 03:12:20 +01:00
|
|
|
$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();
|
2015-11-17 03:12:20 +01:00
|
|
|
$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);
|
2015-11-17 03:12:20 +01:00
|
|
|
$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
|
2015-11-17 03:12:20 +01:00
|
|
|
$this->assertNotEquals($parentPage->NextReviewDate, $childPage->NextReviewDate);
|
2015-11-02 00:27:42 +01:00
|
|
|
|
2015-11-17 03:12:20 +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");
|
|
|
|
|
2015-11-17 03:12:20 +01:00
|
|
|
// 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);
|
|
|
|
}
|
|
|
|
}
|