This project does not seem to handle request data directly as such no vulnerable execution paths were found.
include
, or for example
via PHP's auto-loading mechanism.
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
1 | <?php |
||
2 | |||
3 | namespace SilverStripe\ContentReview\Tests; |
||
4 | |||
5 | use Page; |
||
6 | use SilverStripe\CMS\Controllers\CMSPageEditController; |
||
7 | use SilverStripe\CMS\Model\SiteTree; |
||
8 | use SilverStripe\ContentReview\Extensions\ContentReviewCMSExtension; |
||
9 | use SilverStripe\ContentReview\Extensions\ContentReviewDefaultSettings; |
||
10 | use SilverStripe\ContentReview\Extensions\ContentReviewOwner; |
||
11 | use SilverStripe\ContentReview\Extensions\SiteTreeContentReview; |
||
12 | use SilverStripe\Dev\SapphireTest; |
||
13 | use SilverStripe\ORM\DataObject; |
||
14 | use SilverStripe\ORM\FieldType\DBDate; |
||
15 | use SilverStripe\ORM\FieldType\DBDatetime; |
||
16 | use SilverStripe\Security\Group; |
||
17 | use SilverStripe\Security\Member; |
||
18 | use SilverStripe\SiteConfig\SiteConfig; |
||
19 | |||
20 | /** |
||
21 | * This class tests that settings are inherited correctly based on the inherited, |
||
22 | * custom or disabled settings. |
||
23 | * |
||
24 | * @mixin PHPUnit_Framework_TestCase |
||
25 | */ |
||
26 | class ContentReviewSettingsTest extends SapphireTest |
||
27 | { |
||
28 | /** |
||
29 | * @var string |
||
30 | */ |
||
31 | protected static $fixture_file = 'ContentReviewSettingsTest.yml'; |
||
32 | |||
33 | /** |
||
34 | * @var array |
||
35 | */ |
||
36 | protected static $required_extensions = [ |
||
37 | SiteTree::class => [SiteTreeContentReview::class], |
||
38 | Group::class => [ContentReviewOwner::class], |
||
39 | Member::class => [ContentReviewOwner::class], |
||
40 | CMSPageEditController::class => [ContentReviewCMSExtension::class], |
||
41 | SiteConfig::class => [ContentReviewDefaultSettings::class], |
||
42 | ]; |
||
43 | |||
44 | public function testAdvanceReviewDate10Days() |
||
45 | { |
||
46 | /** @var Page|SiteTreeContentReview $page */ |
||
47 | $page = new Page(); |
||
48 | |||
49 | $page->ContentReviewType = "Custom"; |
||
50 | $page->ReviewPeriodDays = 10; |
||
51 | |||
52 | $this->assertTrue($page->advanceReviewDate()); |
||
53 | |||
54 | $page->write(); |
||
0 ignored issues
–
show
|
|||
55 | |||
56 | $this->assertEquals(date('Y-m-d', strtotime("now + 10 days")), $page->NextReviewDate); |
||
57 | } |
||
58 | |||
59 | public function testAdvanceReviewDateNull() |
||
60 | { |
||
61 | /** @var Page|SiteTreeContentReview $page */ |
||
62 | $page = new Page(); |
||
63 | |||
64 | $page->ContentReviewType = "Custom"; |
||
65 | $page->ReviewPeriodDays = 0; |
||
66 | |||
67 | $this->assertFalse($page->advanceReviewDate()); |
||
68 | |||
69 | $page->write(); |
||
0 ignored issues
–
show
The method
write() does not seem to exist on object<SilverStripe\Cont...\SiteTreeContentReview> .
This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces. This is most likely a typographical error or the method has been renamed. ![]() |
|||
70 | |||
71 | $this->assertEquals(null, $page->NextReviewDate); |
||
72 | } |
||
73 | |||
74 | View Code Duplication | public function testAdvanceReviewFromCustomSettings() |
|
0 ignored issues
–
show
This method seems to be duplicated in your project.
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation. You can also find more detailed suggestions in the “Code” section of your repository. ![]() |
|||
75 | { |
||
76 | /** @var Page|SiteTreeContentReview $page */ |
||
77 | $page = $this->objFromFixture(Page::class, "custom"); |
||
78 | |||
79 | $this->assertTrue($page->advanceReviewDate()); |
||
80 | |||
81 | $page->write(); |
||
0 ignored issues
–
show
The method
write() does not seem to exist on object<SilverStripe\Cont...\SiteTreeContentReview> .
This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces. This is most likely a typographical error or the method has been renamed. ![]() |
|||
82 | |||
83 | $this->assertEquals(date('Y-m-d', strtotime("now + " . $page->ReviewPeriodDays . " days")), $page->NextReviewDate); |
||
84 | } |
||
85 | |||
86 | public function testAdvanceReviewFromInheritedSettings() |
||
87 | { |
||
88 | // When a parent page is advanced, the next review date of the child is not automatically advanced |
||
89 | $parentPage = $this->objFromFixture(Page::class, "page-1"); |
||
90 | $this->assertTrue($parentPage->advanceReviewDate()); |
||
91 | $parentPage->write(); |
||
92 | |||
93 | $page = $this->objFromFixture(Page::class, "page-1-1"); |
||
94 | $this->assertEquals(date('Y-m-d', strtotime("now + 5 days")), $parentPage->NextReviewDate); |
||
95 | $this->assertEquals('2011-04-12', $page->NextReviewDate); |
||
96 | |||
97 | // When a sub page is advanced, the next review date is advanced by the number of days in the parent |
||
98 | $this->assertTrue($page->advanceReviewDate()); |
||
99 | $page->write(); |
||
100 | $this->assertEquals(date('Y-m-d', strtotime("now + 5 days")), $page->NextReviewDate); |
||
101 | } |
||
102 | |||
103 | View Code Duplication | public function testAdvanceReviewFromInheritedSiteConfigSettings() |
|
0 ignored issues
–
show
This method seems to be duplicated in your project.
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation. You can also find more detailed suggestions in the “Code” section of your repository. ![]() |
|||
104 | { |
||
105 | /** @var Page|SiteTreeContentReview $page */ |
||
106 | $page = $this->objFromFixture(Page::class, "inherit"); |
||
107 | |||
108 | /** @var SiteConfig|ContentReviewDefaultSettings $siteConfig */ |
||
109 | $siteConfig = $this->objFromFixture(SiteConfig::class, "default"); |
||
110 | |||
111 | $this->assertTrue($page->advanceReviewDate()); |
||
112 | |||
113 | $page->write(); |
||
0 ignored issues
–
show
The method
write() does not seem to exist on object<SilverStripe\Cont...\SiteTreeContentReview> .
This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces. This is most likely a typographical error or the method has been renamed. ![]() |
|||
114 | |||
115 | $this->assertEquals(date('Y-m-d', strtotime("now + " . $siteConfig->ReviewPeriodDays . " days")), $page->NextReviewDate); |
||
116 | } |
||
117 | |||
118 | View Code Duplication | public function testGetSettingsObjectFromCustom() |
|
0 ignored issues
–
show
This method seems to be duplicated in your project.
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation. You can also find more detailed suggestions in the “Code” section of your repository. ![]() |
|||
119 | { |
||
120 | /** @var Page|SiteTreeContentReview $page */ |
||
121 | $page = $this->objFromFixture(Page::class, "custom"); |
||
122 | |||
123 | $this->assertEquals("Custom", $page->ContentReviewType); |
||
124 | $this->assertEquals($page, $page->getOptions()); |
||
125 | } |
||
126 | |||
127 | View Code Duplication | public function testGetSettingsObjectFromDisabled() |
|
0 ignored issues
–
show
This method seems to be duplicated in your project.
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation. You can also find more detailed suggestions in the “Code” section of your repository. ![]() |
|||
128 | { |
||
129 | /** @var Page|SiteTreeContentReview $page */ |
||
130 | $page = $this->objFromFixture(Page::class, "disabled"); |
||
131 | |||
132 | $this->assertEquals("Disabled", $page->ContentReviewType); |
||
133 | $this->assertFalse($page->getOptions()); |
||
134 | } |
||
135 | |||
136 | View Code Duplication | public function testGetOptionObjectFromInheritedDisabled() |
|
0 ignored issues
–
show
This method seems to be duplicated in your project.
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation. You can also find more detailed suggestions in the “Code” section of your repository. ![]() |
|||
137 | { |
||
138 | /** @var Page|SiteTreeContentReview $page */ |
||
139 | $page = $this->objFromFixture(Page::class, "page-2-1-1"); |
||
140 | |||
141 | $this->assertEquals("Inherit", $page->ContentReviewType); |
||
142 | $this->assertFalse($page->getOptions()); |
||
143 | } |
||
144 | |||
145 | View Code Duplication | public function testGetOptionObjectFromDeeplyInheritedPage() |
|
0 ignored issues
–
show
This method seems to be duplicated in your project.
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation. You can also find more detailed suggestions in the “Code” section of your repository. ![]() |
|||
146 | { |
||
147 | /** @var Page|SiteTreeContentReview $page */ |
||
148 | $page = $this->objFromFixture(Page::class, "page-3-1-1-1"); |
||
149 | |||
150 | $this->assertEquals("Inherit", $page->ContentReviewType); |
||
151 | $this->assertInstanceOf(SiteConfig::class, $page->getOptions()); |
||
152 | } |
||
153 | |||
154 | public function testGetSettingsObjectFromInheritPage() |
||
155 | { |
||
156 | /** @var Page|SiteTreeContentReview $page */ |
||
157 | $page = $this->objFromFixture(Page::class, "page-1-1"); |
||
158 | |||
159 | /** @var Page|SiteTreeContentReview $parentPage */ |
||
160 | $parentPage = $this->objFromFixture(Page::class, "page-1"); |
||
161 | |||
162 | $this->assertEquals("Inherit", $page->ContentReviewType); |
||
163 | $this->assertEquals(get_class($parentPage), get_class($page->getOptions())); |
||
164 | $this->assertEquals($parentPage->ID, $page->getOptions()->ID); |
||
165 | } |
||
166 | |||
167 | View Code Duplication | public function testGetSettingsObjectFromInheritedRootPage() |
|
0 ignored issues
–
show
This method seems to be duplicated in your project.
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation. You can also find more detailed suggestions in the “Code” section of your repository. ![]() |
|||
168 | { |
||
169 | /** @var Page|SiteTreeContentReview $page */ |
||
170 | $page = $this->objFromFixture(Page::class, "inherit"); |
||
171 | |||
172 | $this->assertEquals("Inherit", $page->ContentReviewType); |
||
173 | $this->assertEquals($this->objFromFixture(SiteConfig::class, "default")->ID, $page->getOptions()->ID); |
||
174 | } |
||
175 | |||
176 | public function testGetNextReviewDateFromCustomSettings() |
||
177 | { |
||
178 | /** @var Page|SiteTreeContentReview $page */ |
||
179 | $page = $this->objFromFixture(Page::class, 'custom'); |
||
180 | |||
181 | $date = $page->getReviewDate(); |
||
182 | |||
183 | $this->assertEquals('2010-02-01', $date->format('Y-MM-dd')); |
||
184 | } |
||
185 | |||
186 | public function testGetNextReviewDateFromSiteConfigInheritedSetting() |
||
187 | { |
||
188 | /** @var Page|SiteTreeContentReview $page */ |
||
189 | $page = $this->objFromFixture(Page::class, "inherit"); |
||
190 | |||
191 | $nextReviewDate = $page->getReviewDate(); |
||
192 | |||
193 | $this->assertInstanceOf(DBDate::class, $nextReviewDate); |
||
194 | |||
195 | /** @var SiteConfig|ContentReviewDefaultSettings $siteConfig */ |
||
196 | $siteConfig = $this->objFromFixture(SiteConfig::class, "default"); |
||
197 | |||
198 | $expected = $this->addDaysToDate(DBDatetime::now(), $siteConfig->ReviewPeriodDays); |
||
199 | |||
200 | $this->assertEquals($expected, $nextReviewDate->format('Y-MM-dd')); |
||
201 | } |
||
202 | |||
203 | public function testGetNextReviewDateFromPageInheritedSetting() |
||
204 | { |
||
205 | // Although page-1-1 inherits from page-1, it has an independent review date |
||
206 | $page = $this->objFromFixture(Page::class, "page-1-1"); |
||
207 | $nextReviewDate = $page->getReviewDate(); |
||
208 | $this->assertInstanceOf(DBDate::class, $nextReviewDate); |
||
209 | $this->assertEquals('2011-04-12', $nextReviewDate->format('Y-MM-dd')); |
||
210 | } |
||
211 | |||
212 | public function testUpdateNextReviewDateFromCustomToDisabled() |
||
213 | { |
||
214 | /** @var Page|SiteTreeContentReview $page */ |
||
215 | $page = $this->objFromFixture(Page::class, "custom"); |
||
216 | |||
217 | // before write() |
||
218 | $this->assertEquals("2010-02-01", $page->NextReviewDate); |
||
219 | |||
220 | $page->ContentReviewType = "Disabled"; |
||
221 | $page->write(); |
||
0 ignored issues
–
show
The method
write() does not seem to exist on object<SilverStripe\Cont...\SiteTreeContentReview> .
This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces. This is most likely a typographical error or the method has been renamed. ![]() |
|||
222 | |||
223 | DataObject::flush_and_destroy_cache(); |
||
224 | unset($page); |
||
225 | |||
226 | /** @var Page|SiteTreeContentReview $page */ |
||
227 | $page = $this->objFromFixture(Page::class, "custom"); |
||
228 | |||
229 | $this->assertNull($page->NextReviewDate); |
||
230 | } |
||
231 | |||
232 | public function testUpdateNextReviewDateFromDisabledToCustom() |
||
233 | { |
||
234 | /** @var Page|SiteTreeContentReview $page */ |
||
235 | $page = $this->objFromFixture(Page::class, "disabled"); |
||
236 | |||
237 | $this->assertNull($page->NextReviewDate); |
||
238 | |||
239 | $page->ContentReviewType = "Custom"; |
||
240 | $page->ReviewPeriodDays = "7"; |
||
241 | $page->write(); |
||
0 ignored issues
–
show
The method
write() does not seem to exist on object<SilverStripe\Cont...\SiteTreeContentReview> .
This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces. This is most likely a typographical error or the method has been renamed. ![]() |
|||
242 | |||
243 | DataObject::flush_and_destroy_cache(); |
||
244 | unset($page); |
||
245 | |||
246 | /** @var Page|SiteTreeContentReview $page */ |
||
247 | $page = $this->objFromFixture(Page::class, "disabled"); |
||
248 | |||
249 | $expected = date('Y-m-d', strtotime("+ " . $page->ReviewPeriodDays . " days")); |
||
250 | |||
251 | $this->assertEquals($expected, $page->NextReviewDate); |
||
252 | } |
||
253 | |||
254 | public function testParentChangedOptionsAndChildShouldToo() |
||
255 | { |
||
256 | /** @var Page|SiteTreeContentReview $parentPage */ |
||
257 | $parentPage = $this->objFromFixture(Page::class, "page-1"); |
||
258 | |||
259 | /** @var Page|SiteTreeContentReview $childPage */ |
||
260 | $childPage = $this->objFromFixture(Page::class, "page-1-1"); |
||
261 | |||
262 | // Parent and child pages have different review dates |
||
263 | $this->assertNotEquals($parentPage->NextReviewDate, $childPage->NextReviewDate); |
||
264 | |||
265 | // But if we change the parent page ReviewPeriodDays to 10, the childs stays the same |
||
266 | $parentPage->ReviewPeriodDays = 10; |
||
267 | $parentPage->write(); |
||
0 ignored issues
–
show
The method
write() does not seem to exist on object<SilverStripe\Cont...\SiteTreeContentReview> .
This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces. This is most likely a typographical error or the method has been renamed. ![]() |
|||
268 | |||
269 | // Flush all the caches! |
||
270 | DataObject::flush_and_destroy_cache(); |
||
271 | |||
272 | /** @var Page|SiteTreeContentReview $page */ |
||
273 | $parentPage = $this->objFromFixture(Page::class, "page-1"); |
||
274 | |||
275 | /** @var Page|SiteTreeContentReview $page */ |
||
276 | $childPage = $this->objFromFixture(Page::class, "page-1-1"); |
||
277 | |||
278 | // The parent page's date advances, but not the child's |
||
279 | $this->assertEquals('2011-04-12', $childPage->NextReviewDate); |
||
280 | $this->assertEquals($this->addDaysToDate(date('Y-m-d'), 10), $parentPage->NextReviewDate); |
||
281 | |||
282 | // Reviewing the child page should, however, advance its review by 10 days |
||
283 | $childPage->advanceReviewDate(); |
||
284 | $childPage->write(); |
||
285 | $this->assertEquals($this->addDaysToDate(date('Y-m-d'), 10), $childPage->NextReviewDate); |
||
286 | } |
||
287 | |||
288 | /** |
||
289 | * Note: all input dates should be DBDatetime or strings in CLDR date format. See {@link DBDate} for information |
||
290 | * |
||
291 | * @param string|DBDatetime $date |
||
292 | * @param int $days |
||
293 | * @param string $format |
||
294 | * |
||
295 | * @return bool|string |
||
296 | */ |
||
297 | private function addDaysToDate($date, $days, $format = 'Y-MM-dd') |
||
298 | { |
||
299 | if (is_object($date)) { |
||
300 | $sec = strtotime("+ " . $days . " days", $date->getTimestamp()); |
||
301 | } else { |
||
302 | $sec = strtotime("+ " . $days . " days", DBDate::create()->setValue($date)->getTimestamp()); |
||
303 | } |
||
304 | |||
305 | return DBDate::create()->setValue($sec)->format($format); |
||
306 | } |
||
307 | } |
||
308 |
This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.
This is most likely a typographical error or the method has been renamed.