These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
1 | <?php |
||
2 | |||
3 | class DMSDocumentSetTest extends SapphireTest |
||
4 | { |
||
5 | protected static $fixture_file = 'dmstest.yml'; |
||
6 | |||
7 | /** |
||
8 | * Ensure that getDocuments is extensible |
||
9 | */ |
||
10 | View Code Duplication | public function testGetDocumentsIsExtensible() |
|
11 | { |
||
12 | DMSDocumentSet::add_extension('StubRelatedDocumentExtension'); |
||
13 | |||
14 | $set = new DMSDocumentSet; |
||
15 | $documents = $set->getDocuments(); |
||
16 | |||
17 | $this->assertCount(1, $documents); |
||
18 | $this->assertSame('Extended', $documents->first()->Filename); |
||
19 | } |
||
20 | |||
21 | /** |
||
22 | * Test that the GridField for documents isn't shown until you've saved the set |
||
23 | */ |
||
24 | public function testGridFieldShowsWhenSetIsSaved() |
||
25 | { |
||
26 | $set = DMSDocumentSet::create(); |
||
27 | |||
28 | // Not in database yet |
||
29 | $fields = $set->getCMSFields(); |
||
30 | $this->assertNull($fields->fieldByName('Root.Main.Documents')); |
||
31 | $gridFieldNotice = $fields->fieldByName('Root.Main.GridFieldNotice'); |
||
32 | $this->assertNotNull($gridFieldNotice); |
||
33 | $this->assertContains('Managing documents will be available', $gridFieldNotice->getContent()); |
||
34 | |||
35 | // In the database |
||
36 | $set->Title = 'Testing'; |
||
37 | $set->write(); |
||
38 | $fields = $set->getCMSFields(); |
||
39 | $this->assertNotNull($fields->fieldByName('Root.Main.Documents')); |
||
40 | $this->assertNull($fields->fieldByName('Root.Main.GridFieldNotice')); |
||
41 | } |
||
42 | |||
43 | public function testRelations() |
||
44 | { |
||
45 | $s1 = $this->objFromFixture('SiteTree', 's1'); |
||
46 | $s2 = $this->objFromFixture('SiteTree', 's2'); |
||
47 | $s4 = $this->objFromFixture('SiteTree', 's4'); |
||
48 | |||
49 | $ds1 = $this->objFromFixture('DMSDocumentSet', 'ds1'); |
||
50 | $ds2 = $this->objFromFixture('DMSDocumentSet', 'ds2'); |
||
51 | $ds3 = $this->objFromFixture('DMSDocumentSet', 'ds3'); |
||
52 | |||
53 | $this->assertCount(0, $s4->getDocumentSets(), 'Page 4 has no document sets associated'); |
||
54 | $this->assertCount(2, $s1->getDocumentSets(), 'Page 1 has 2 document sets'); |
||
55 | $this->assertEquals(array($ds1->ID, $ds2->ID), $s1->getDocumentSets()->column('ID')); |
||
56 | } |
||
57 | |||
58 | /** |
||
59 | * Test that various components exist in the GridField config. See {@link DMSDocumentSet::getCMSFields} for context. |
||
60 | */ |
||
61 | public function testDocumentGridFieldConfig() |
||
62 | { |
||
63 | $set = $this->objFromFixture('DMSDocumentSet', 'ds1'); |
||
64 | $fields = $set->getCMSFields(); |
||
65 | $gridField = $fields->fieldByName('Root.Main.Documents'); |
||
66 | $this->assertTrue((bool) $gridField->hasClass('documents')); |
||
67 | |||
68 | /** @var GridFieldConfig $config */ |
||
69 | $config = $gridField->getConfig(); |
||
70 | |||
71 | $this->assertNotNull($addNew = $config->getComponentByType('DMSGridFieldAddNewButton')); |
||
72 | $this->assertSame($set->ID, $addNew->getDocumentSetId()); |
||
73 | |||
74 | if (class_exists('GridFieldPaginatorWithShowAll')) { |
||
75 | $this->assertNotNull($config->getComponentByType('GridFieldPaginatorWithShowAll')); |
||
76 | } else { |
||
77 | $paginator = $config->getComponentByType('GridFieldPaginator'); |
||
78 | $this->assertNotNull($paginator); |
||
79 | $this->assertSame(15, $paginator->getItemsPerPage()); |
||
80 | } |
||
81 | |||
82 | $sortableAssertion = class_exists('GridFieldSortableRows') ? 'assertNotNull' : 'assertNull'; |
||
83 | $this->$sortableAssertion($config->getComponentByType('GridFieldSortableRows')); |
||
84 | } |
||
85 | |||
86 | /** |
||
87 | * Ensure that the display fields for the documents GridField can be returned |
||
88 | */ |
||
89 | public function testGetDocumentDisplayFields() |
||
90 | { |
||
91 | $document = $this->objFromFixture('DMSDocumentSet', 'ds1'); |
||
92 | $this->assertInternalType('array', $document->getDocumentDisplayFields()); |
||
93 | |||
94 | Config::inst()->update('DMSDocument', 'display_fields', array('apple' => 'Apple', 'orange' => 'Orange')); |
||
95 | $displayFields = $document->getDocumentDisplayFields(); |
||
96 | $this->assertContains('Apple', $displayFields); |
||
97 | $this->assertContains('Orange', $displayFields); |
||
98 | $this->assertArrayHasKey('ManuallyAdded', $displayFields); |
||
99 | $this->assertContains('Added', $displayFields); |
||
100 | } |
||
101 | |||
102 | /** |
||
103 | * Tests to ensure that the callback for formatting ManuallyAdded will return a nice label for the user |
||
104 | */ |
||
105 | public function testNiceFormattingForManuallyAddedInGridField() |
||
106 | { |
||
107 | $fieldFormatting = $this->objFromFixture('DMSDocumentSet', 'ds1') |
||
108 | ->getCMSFields() |
||
109 | ->fieldByName('Root.Main.Documents') |
||
110 | ->getConfig() |
||
111 | ->getComponentByType('GridFieldDataColumns') |
||
112 | ->getFieldFormatting(); |
||
113 | |||
114 | $this->assertArrayHasKey('ManuallyAdded', $fieldFormatting); |
||
115 | $this->assertTrue(is_callable($fieldFormatting['ManuallyAdded'])); |
||
116 | |||
117 | $this->assertSame('Manually', $fieldFormatting['ManuallyAdded'](1)); |
||
118 | $this->assertSame('Query Builder', $fieldFormatting['ManuallyAdded'](0)); |
||
119 | } |
||
120 | |||
121 | /** |
||
122 | * Test that query fields can be added to the gridfield |
||
123 | */ |
||
124 | public function testAddQueryFields() |
||
125 | { |
||
126 | |||
127 | /** @var DMSDocumentSet $set */ |
||
128 | $set = $this->objFromFixture('DMSDocumentSet', 'ds6'); |
||
129 | /** @var FieldList $fields */ |
||
130 | $fields = new FieldList(new TabSet('Root')); |
||
131 | /** @var FieldList $fields */ |
||
132 | $set->addQueryFields($fields); |
||
133 | $keyValuePairs = $fields->dataFieldByName('KeyValuePairs'); |
||
134 | $this->assertNotNull( |
||
135 | $keyValuePairs, |
||
136 | 'addQueryFields() includes KeyValuePairs composite field' |
||
137 | ); |
||
138 | $this->assertNotNull( |
||
139 | $keyValuePairs->fieldByName('KeyValuePairs[Title]'), |
||
140 | 'addQueryFields() includes KeyValuePairs composite field' |
||
141 | ); |
||
142 | } |
||
143 | |||
144 | public function testAddQueryFieldsIsExtensible() |
||
145 | { |
||
146 | |||
147 | DMSDocumentSet::add_extension('StubDocumentSetMockExtension'); |
||
148 | |||
149 | $fields = new FieldList(new TabSet('Root')); |
||
150 | $set = new DMSDocumentSet; |
||
151 | $set->addQueryFields($fields); |
||
152 | |||
153 | $this->assertNotNull( |
||
0 ignored issues
–
show
|
|||
154 | $fields->dataFieldByName('ExtendedField'), |
||
155 | 'addQueryFields() is extendible as it included the field from the extension' |
||
156 | ); |
||
157 | } |
||
158 | |||
159 | /** |
||
160 | * Ensure that the configurable shortcode handler key is a hidden field in the CMS |
||
161 | */ |
||
162 | public function testShortcodeHandlerKeyFieldExists() |
||
163 | { |
||
164 | Config::inst()->update('DMS', 'shortcode_handler_key', 'unit-test'); |
||
165 | |||
166 | $set = DMSDocumentSet::create(array('Title' => 'TestSet')); |
||
167 | $set->write(); |
||
168 | |||
169 | $fields = $set->getCMSFields(); |
||
170 | $field = $fields->fieldByName('Root.Main.DMSShortcodeHandlerKey'); |
||
171 | |||
172 | $this->assertInstanceOf('HiddenField', $field); |
||
173 | $this->assertSame('unit-test', $field->Value()); |
||
174 | } |
||
175 | |||
176 | /** |
||
177 | * Ensure that if the module is available, the orderable rows GridField component is added |
||
178 | */ |
||
179 | public function testDocumentsAreOrderable() |
||
180 | { |
||
181 | if (!class_exists('GridFieldSortableRows')) { |
||
182 | $this->markTestSkipped('Test requires undefinedoffset/sortablegridfield installed.'); |
||
183 | } |
||
184 | |||
185 | $fields = $this->objFromFixture('DMSDocumentSet', 'ds1')->getCMSFields(); |
||
186 | |||
187 | $gridField = $fields->fieldByName('Root.Main.Documents'); |
||
188 | $this->assertInstanceOf('GridField', $gridField); |
||
189 | |||
190 | $this->assertInstanceOf( |
||
191 | 'GridFieldSortableRows', |
||
192 | $gridField->getConfig()->getComponentByType('GridFieldSortableRows') |
||
193 | ); |
||
194 | } |
||
195 | |||
196 | /** |
||
197 | * Test that extra documents are added after write |
||
198 | */ |
||
199 | public function testSaveLinkedDocuments() |
||
200 | { |
||
201 | /** @var DMSDocumentSet $set */ |
||
202 | $set = $this->objFromFixture('DMSDocumentSet', 'dsSaveLinkedDocuments'); |
||
203 | // Assert initially docs |
||
204 | $this->assertEquals(1, $set->getDocuments()->count(), 'Set has 1 document'); |
||
205 | // Now apply the query and see if 2 extras were added with CreatedByID filter |
||
206 | $set->KeyValuePairs = '{"Filename":"extradoc3"}'; |
||
207 | $set->saveLinkedDocuments(); |
||
208 | $this->assertEquals(2, $set->getDocuments()->count(), 'Set has 2 documents'); |
||
209 | } |
||
210 | |||
211 | /** |
||
212 | * Tests that an exception is thrown if no title entered for a DMSDocumentSet. |
||
213 | * @expectedException ValidationException |
||
214 | */ |
||
215 | public function testExceptionOnNoTitleGiven() |
||
216 | { |
||
217 | DMSDocumentSet::create(array('Title' => ''))->write(); |
||
218 | } |
||
219 | |||
220 | /** |
||
221 | * Ensure that when editing in a page context that the "page" field is removed, or is labelled "Show on page" |
||
222 | * otherwise |
||
223 | */ |
||
224 | public function testPageFieldRemovedWhenEditingInPageContext() |
||
225 | { |
||
226 | $set = $this->objFromFixture('DMSDocumentSet', 'ds1'); |
||
227 | |||
228 | $fields = $set->getCMSFields(); |
||
229 | $this->assertInstanceOf('DropdownField', $fields->fieldByName('Root.Main.PageID')); |
||
230 | |||
231 | $pageController = new CMSPageEditController; |
||
232 | $pageController->pushCurrent(); |
||
233 | |||
234 | $fields = $set->getCMSFields(); |
||
235 | $this->assertNull($fields->fieldByName('Root.Main.PageID')); |
||
236 | } |
||
237 | } |
||
238 |
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.