ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
ProvideDocumentTest.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
22
23use ilCtrl;
34use ILIAS\UI\Component\Legacy\Legacy;
35use ILIAS\LegalDocuments\Legacy\Table as LegacyTable;
39use ILIAS\UI\Factory as UIFactory;
40use ILIAS\LegalDocuments\test\ContainerMock;
44use PHPUnit\Framework\TestCase;
48use ilLanguage;
49use Psr\Http\Message\ServerRequestInterface;
50use Psr\Http\Message\UriInterface;
51use stdClass;
52use ilObjUser;
53
54require_once __DIR__ . '/../ContainerMock.php';
55
56class ProvideDocumentTest extends TestCase
57{
58 use ContainerMock;
59
60 public function testConstruct(): void
61 {
62 $this->assertInstanceOf(ProvideDocument::class, new ProvideDocument(
63 'foo',
64 $this->mock(DocumentRepository::class),
65 new SelectionMap(),
66 [],
67 $this->mockTree(Container::class, ['user' => ['getTimeZone' => 'europe/berlin']])
68 ));
69 }
70
71 public function testTableReadOnly(): void
72 {
73 $dummy_gui = new stdClass();
74
75 $uri = 'http://myIlias/ilias.php?baseClass=iladministrationgui&cmdNode=2g:qo:gq&cmdClass=ilLegalDocumentsAdministrationGUI&cmd=documents&ref_id=50';
76
77 $container = $this->mockTree(Container::class, [
78 'ui' => [
79 'factory' => [],
80 'mainTemplate' => [],
81 ],
82 'language' => [],
83 'http' => ['request' => ['getUri' => ['__toString' => $uri]]],
84 'ctrl' => [],
85 'user' => ['getTimeZone' => 'europe/berlin'],
86 ]);
87
88 $instance = new ProvideDocument('foo', $this->mock(DocumentRepository::class), new SelectionMap(), [], $container);
89 $this->assertInstanceOf(DocumentTable::class, $instance->table($dummy_gui));
90 }
91
92 public function testTableEditable(): void
93 {
94 if (!defined('ILIAS_HTTP_PATH')) {
95 define('ILIAS_HTTP_PATH', 'http://localhost');
96 }
97
98 $dummy_gui = new stdClass();
99
100 $uri = 'http://myIlias/ilias.php?baseClass=iladministrationgui&cmdNode=2g:qo:gq&cmdClass=ilLegalDocumentsAdministrationGUI&cmd=documents&ref_id=50';
101
102 $container = $this->mockTree(Container::class, [
103 'ui' => [
104 'factory' => ['table' => ['action' => ['multi' => []]]],
105 'mainTemplate' => [],
106 ],
107 'language' => [],
108 'http' => ['request' => ['getUri' => ['__toString' => $uri]]],
109 'ctrl' => [],
110 'user' => ['getTimeZone' => 'europe/berlin'],
111 ]);
112
113 $instance = new ProvideDocument('foo', $this->mock(DocumentRepository::class), new SelectionMap(), [], $container);
114 $this->assertInstanceOf(DocumentTable::class, $instance->table($dummy_gui, $this->mock(EditLinks::class)));
115 }
116
117 public function testChooseDocumentFor(): void
118 {
119 $document = $this->mockMethod(Document::class, 'criteria', [], []);
120 $user = $this->mock(ilObjUser::class);
121
122 $criterion = $this->mockTree(Criterion::class, ['content' => ['type' => 'bar']]);
123
124 $repository = $this->mockMethod(DocumentRepository::class, 'all', [], [
125 $this->mockMethod(Document::class, 'criteria', [], [$criterion]),
126 $document,
127 ]);
128
129 $instance = new ProvideDocument('foo', $repository, new SelectionMap([
130 'bar' => $this->mockMethod(ConditionDefinition::class, 'withCriterion', [$criterion->content()], $this->mockMethod(
131 Condition::class,
132 'eval',
133 [$user],
134 false
135 )),
136 ]), [], $this->mock(Container::class));
137 $result = $instance->chooseDocumentFor($user);
138 $this->assertTrue($result->isOk());
139 $this->assertSame($document, $result->value());
140 }
141
142 public function testDocumentMatches(): void
143 {
144 $criterion = $this->mockTree(Criterion::class, ['content' => ['type' => 'bar']]);
145 $document = $this->mockMethod(Document::class, 'criteria', [], [$criterion]);
146 $user = $this->mock(ilObjUser::class);
147
148 $instance = new ProvideDocument('doo', $this->mock(DocumentRepository::class), new SelectionMap([
149 'bar' => $this->mockMethod(ConditionDefinition::class, 'withCriterion', [$criterion->content()], $this->mockMethod(
150 Condition::class,
151 'eval',
152 [$user],
153 true
154 )),
155 ]), [], $this->mock(Container::class));
156
157 $this->assertTrue($instance->documentMatches($document, $user));
158 }
159
160 public function testRepository(): void
161 {
162 $repository = $this->mock(DocumentRepository::class);
163 $instance = new ProvideDocument('foo', $repository, new SelectionMap(), [], $this->mock(Container::class));
164 $this->assertSame($repository, $instance->repository());
165 }
166
167 public function testHash(): void
168 {
169 $instance = new ProvideDocument('foo', $this->mock(DocumentRepository::class), new SelectionMap(), [], $this->mock(Container::class));
170 $hash = $instance->hash();
171 $this->assertTrue(is_string($hash));
172 $this->assertSame(254, strlen($hash));
173 }
174
175 public function testToCondition(): void
176 {
177 $condition = $this->mock(Condition::class);
178 $content = $this->mockMethod(CriterionContent::class, 'type', [], 'bar');
179
180 $instance = new ProvideDocument('foo', $this->mock(DocumentRepository::class), new SelectionMap([
181 'bar' => $this->mockMethod(ConditionDefinition::class, 'withCriterion', [$content], $condition),
182 ]), [], $this->mock(Container::class));
183
184 $this->assertSame($condition, $instance->toCondition($content));
185 }
186
187 public function testConditionGroupsWithoutContent(): void
188 {
189 $group = $this->mock(Group::class);
190
191 $instance = new ProvideDocument('foo', $this->mock(DocumentRepository::class), new SelectionMap([
192 'bar' => $this->mockMethod(ConditionDefinition::class, 'formGroup', [[]], $group),
193 'baz' => $this->mockMethod(ConditionDefinition::class, 'formGroup', [[]], $group),
194 ]), [], $this->mock(Container::class));
195
196 $this->assertSame(['bar' => $group, 'baz' => $group], $instance->conditionGroups()->choices());
197 }
198
199 public function testConditionGroups(): void
200 {
201 $group = $this->mock(Group::class);
202 $content = $this->mockTree(CriterionContent::class, [
203 'type' => 'baz',
204 'arguments' => ['a', 'b', 'c'],
205 ]);
206
207 $instance = new ProvideDocument('foo', $this->mock(DocumentRepository::class), new SelectionMap([
208 'bar' => $this->mockMethod(ConditionDefinition::class, 'formGroup', [[]], $group),
209 'baz' => $this->mockMethod(ConditionDefinition::class, 'formGroup', [$content->arguments()], $group),
210 ]), [], $this->mock(Container::class));
211
212 $this->assertSame(['bar' => $group, 'baz' => $group], $instance->conditionGroups($content)->choices());
213 }
214
215 public function testValidateCriteriaContent(): void
216 {
217 $content = new CriterionContent('foo', ['bar']);
218 $existing_content = new CriterionContent('hoo', ['haz']);
219 $other_existing_content = new CriterionContent('foo', ['baz']);
220
221 $condition = $this->mock(Condition::class);
222 $condition->expects(self::exactly(2))->method('knownToNeverMatchWith')->with($condition)->willReturn(false);
223
224 $definition = $this->mock(ConditionDefinition::class);
225 $consecutive = [$content, $other_existing_content, $content];
226 $definition->expects(self::exactly(3))->method('withCriterion')->with(
227 $this->callback(function ($value) use (&$consecutive) {
228 $this->assertSame(array_shift($consecutive), $value);
229 return true;
230 })
231 )->willReturn($condition);
232
233 $instance = new ProvideDocument('foo', $this->mock(DocumentRepository::class), new SelectionMap([
234 'hoo' => $this->mockMethod(ConditionDefinition::class, 'withCriterion', [$existing_content], $condition),
235 'foo' => $definition,
236 ]), [], $this->mock(Container::class));
237
238 $result = $instance->validateCriteriaContent([
239 $this->mockTree(Criterion::class, ['content' => $existing_content]),
240 $this->mockTree(Criterion::class, ['content' => $other_existing_content]),
241 ], $content);
242 $this->assertTrue($result->isOk());
243 $this->assertSame($content, $result->value());
244 }
245
246 public function testDuplicateCriteriaContent(): void
247 {
248 $content = new CriterionContent('foo', ['bar']);
249
250 $instance = new ProvideDocument('foo', $this->mock(DocumentRepository::class), new SelectionMap(), [], $this->mock(Container::class));
251 $result = $instance->validateCriteriaContent([
252 $this->mockTree(Criterion::class, ['content' => new CriterionContent('foo', ['bar'])])
253 ], $content);
254 $this->assertFalse($result->isOk());
255 $this->assertSame(ProvideDocument::CRITERION_ALREADY_EXISTS, $result->error());
256 }
257
258 public function testNeverMatchingCriteriaContent(): void
259 {
260 $content = new CriterionContent('foo', ['bar']);
261 $existing_content = new CriterionContent('hoo', ['haz']);
262
263 $condition = $this->mock(Condition::class);
264 $condition->expects(self::once())->method('knownToNeverMatchWith')->with($condition)->willReturn(true);
265
266 $instance = new ProvideDocument('foo', $this->mock(DocumentRepository::class), new SelectionMap([
267 'hoo' => $this->mockMethod(ConditionDefinition::class, 'withCriterion', [$existing_content], $condition),
268 'foo' => $this->mockMethod(ConditionDefinition::class, 'withCriterion', [$content], $condition),
269 ]), [], $this->mock(Container::class));
270
271 $result = $instance->validateCriteriaContent([
272 $this->mockTree(Criterion::class, ['content' => $existing_content]),
273 ], $content);
274 $this->assertFalse($result->isOk());
275 $this->assertSame(ProvideDocument::CRITERION_WOULD_NEVER_MATCH, $result->error());
276 }
277
278 public function testContentAsComponent(): void
279 {
280 $content = $this->mockTree(DocumentContent::class, ['type' => 'html']);
281 $component = $this->mock(Component::class);
282
283 $instance = new ProvideDocument('foo', $this->mock(DocumentRepository::class), new SelectionMap(), [
284 'html' => function (DocumentContent $c) use ($content, $component): Component {
285 $this->assertSame($content, $c);
286 return $component;
287 }
288 ], $this->mock(Container::class));
289
290 $this->assertSame($component, $instance->contentAsComponent($content));
291 }
292}
Customizing of pimple-DIC for ILIAS.
Definition: Container.php:36
Builds a Color from either hex- or rgb values.
Definition: Factory.php:31
Class Services.
Definition: Services.php:38
Class ilCtrl provides processing control methods.
language handling
User class.
$c
Definition: deliver.php:25
A component is the most general form of an entity in the UI.
Definition: Component.php:28
$container
@noRector
Definition: wac.php:37