ILIAS  release_8 Revision v8.24
ilTermsOfServiceDocumentCriterionAssignmentConstraintTest.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
22use PHPUnit\Framework\MockObject\MockObject;
23
29{
34 {
35 $criterionTypeFactory = $this
36 ->getMockBuilder(ilTermsOfServiceCriterionTypeFactoryInterface::class)
37 ->getMock();
38
39 return $criterionTypeFactory;
40 }
41
46 protected function getCriterionTypeMock(string $typeIdent): ilTermsOfServiceCriterionType
47 {
48 $criterionType = $this
49 ->getMockBuilder(ilTermsOfServiceCriterionType::class)
50 ->getMock();
51
52 $criterionType
53 ->method('getTypeIdent')
54 ->willReturn($typeIdent);
55
56 return $criterionType;
57 }
58
63 {
64 $criterionTypeFactory = $this->getCriterionTypeFactoryMock();
65
66 $criterionType1 = $this->getCriterionTypeMock('dummy');
67
68 $criterionType1
69 ->method('hasUniqueNature')
70 ->willReturn(false);
71
72 $criterionTypeFactory
73 ->method('getTypesByIdentMap')
74 ->willReturn([
75 $criterionType1->getTypeIdent() => $criterionType1,
76 ]);
77
78 $criterionTypeFactory
79 ->method('findByTypeIdent')
80 ->willReturn($criterionType1);
81
82 return $criterionTypeFactory;
83 }
84
85 public function criteriaAssignmentProvider(): array
86 {
87 $criterionAssignment1 = $this
88 ->getMockBuilder(ilTermsOfServiceDocumentCriterionAssignment::class)
89 ->disableOriginalConstructor()
90 ->onlyMethods(['getCriterionValue', 'getCriterionId'])
91 ->addMethods(['getId'])
92 ->getMock();
93
94 $criterionAssignment1
95 ->method('getId')
96 ->willReturn(1);
97
98 $criterionAssignment1
99 ->method('getCriterionId')
100 ->willReturn('usr_global_role');
101
102 $criterionAssignment1
103 ->method('getCriterionValue')
104 ->willReturn($this->getCriterionConfig(['role_id' => 4]));
105
106 $criterionAssignment2 = $this
107 ->getMockBuilder(ilTermsOfServiceDocumentCriterionAssignment::class)
108 ->disableOriginalConstructor()
109 ->onlyMethods(['getCriterionValue', 'getCriterionId'])
110 ->addMethods(['getId'])
111 ->getMock();
112
113 $criterionAssignment2
114 ->method('getId')
115 ->willReturn(1);
116
117 $criterionAssignment2
118 ->method('getCriterionId')
119 ->willReturn('usr_language');
120
121 $criterionAssignment2
122 ->method('getCriterionValue')
123 ->willReturn($this->getCriterionConfig(['lng' => 'de']));
124
125 $criterionAssignment3 = $this
126 ->getMockBuilder(ilTermsOfServiceDocumentCriterionAssignment::class)
127 ->onlyMethods(['getCriterionValue', 'getCriterionId'])
128 ->addMethods(['getId'])
129 ->disableOriginalConstructor()
130 ->getMock();
131
132 $criterionAssignment3
133 ->method('getId')
134 ->willReturn(0);
135
136 $criterionAssignment3
137 ->method('getCriterionId')
138 ->willReturn('usr_language');
139
140 $criterionAssignment3
141 ->method('getCriterionValue')
142 ->willReturn($this->getCriterionConfig(['lng' => 'de']));
143
144 $criterionAssignment4 = $this
145 ->getMockBuilder(ilTermsOfServiceDocumentCriterionAssignment::class)
146 ->disableOriginalConstructor()
147 ->onlyMethods(['getCriterionValue', 'getCriterionId'])
148 ->addMethods(['getId'])
149 ->getMock();
150
151 $criterionAssignment4
152 ->method('getId')
153 ->willReturn(0);
154
155 $criterionAssignment4
156 ->method('getCriterionId')
157 ->willReturn('usr_global_role');
158
159 $criterionAssignment4
160 ->method('getCriterionValue')
161 ->willReturn($this->getCriterionConfig(['role_id' => 6]));
162
163 return [
164 [$criterionAssignment1, $criterionAssignment2, $criterionAssignment3, $criterionAssignment4]
165 ];
166 }
167
180 ): void {
181 $document1 = $this
182 ->getMockBuilder(ilTermsOfServiceDocument::class)
183 ->disableOriginalConstructor()
184 ->onlyMethods(['criteria'])
185 ->getMock();
186
187 $document1
188 ->method('criteria')
189 ->willReturn([$criterionAssignment1, $criterionAssignment2]);
190
193 $document1,
194 new Factory(),
195 $this->getLanguageMock()
196 );
197
198 $this->assertTrue($constraint->accepts($criterionAssignment1));
199 $this->assertTrue($constraint->accepts($criterionAssignment2));
200 $this->assertFalse($constraint->accepts($criterionAssignment3));
201 $this->assertTrue($constraint->accepts($criterionAssignment4));
202 }
203
216 ): void {
217 $document1 = $this
218 ->getMockBuilder(ilTermsOfServiceDocument::class)
219 ->disableOriginalConstructor()
220 ->onlyMethods(['criteria'])
221 ->getMock();
222
223 $document1
224 ->method('criteria')
225 ->willReturn([$criterionAssignment1, $criterionAssignment2]);
226
228 $this->getTypeMockForConstraint(),
229 $document1,
230 new Factory(),
231 $this->getLanguageMock()
232 );
233
234 $raised = false;
235
236 try {
237 $constraint->check($criterionAssignment4);
238 } catch (UnexpectedValueException $e) {
239 $raised = true;
240 }
241
242 $this->assertFalse($raised);
243
244 try {
245 $constraint->check($criterionAssignment3);
246 $raised = false;
247 } catch (UnexpectedValueException $e) {
248 $this->assertSame('The passed assignment must be unique for the document!', $e->getMessage());
249 $raised = true;
250 }
251
252 $this->assertTrue($raised);
253 }
254
267 ): void {
268 $document1 = $this
269 ->getMockBuilder(ilTermsOfServiceDocument::class)
270 ->disableOriginalConstructor()
271 ->onlyMethods(['criteria'])
272 ->getMock();
273
274 $document1
275 ->method('criteria')
276 ->willReturn([$criterionAssignment1, $criterionAssignment2]);
277
279 $this->getTypeMockForConstraint(),
280 $document1,
281 new Factory(),
282 $this->getLanguageMock()
283 );
284
285 $this->assertNull($constraint->problemWith($criterionAssignment1));
286 $this->assertNull($constraint->problemWith($criterionAssignment2));
287 $this->assertNull($constraint->problemWith($criterionAssignment4));
288 $this->assertIsString($constraint->problemWith($criterionAssignment3));
289 }
290
303 ): void {
304 $document1 = $this
305 ->getMockBuilder(ilTermsOfServiceDocument::class)
306 ->disableOriginalConstructor()
307 ->onlyMethods(['criteria'])
308 ->getMock();
309
310 $document1
311 ->method('criteria')
312 ->willReturn([$criterionAssignment1, $criterionAssignment2]);
313
314 $dataFavtgory = new Factory();
315
317 $this->getTypeMockForConstraint(),
318 $document1,
319 $dataFavtgory,
320 $this->getLanguageMock()
321 );
322
323 $ok = $dataFavtgory->ok($criterionAssignment1);
324 $ok2 = $dataFavtgory->ok($criterionAssignment3);
325 $error = $dataFavtgory->error('An error occurred');
326
327 $result = $constraint->applyTo($ok);
328 $this->assertTrue($result->isOK());
329
330 $result = $constraint->applyTo($ok2);
331 $this->assertTrue($result->isError());
332
333 $result = $constraint->applyTo($error);
334 $this->assertSame($error, $result);
335 }
336
349 ): void {
350 $document1 = $this
351 ->getMockBuilder(ilTermsOfServiceDocument::class)
352 ->disableOriginalConstructor()
353 ->onlyMethods(['criteria'])
354 ->getMock();
355
356 $document1
357 ->method('criteria')
358 ->willReturn([$criterionAssignment1, $criterionAssignment2]);
359
361 $this->getTypeMockForConstraint(),
362 $document1,
363 new Factory(),
364 $this->getLanguageMock()
365 );
366
367 $newConstraint = $constraint->withProblemBuilder(function () {
368 return 'phpunit';
369 });
370 $this->assertSame('phpunit', $newConstraint->problemWith($criterionAssignment3));
371 }
372
385 ): void {
386 $document1 = $this
387 ->getMockBuilder(ilTermsOfServiceDocument::class)
388 ->disableOriginalConstructor()
389 ->onlyMethods(['criteria'])
390 ->getMock();
391
392 $document1
393 ->method('criteria')
394 ->willReturn([$criterionAssignment1, $criterionAssignment2]);
395
397 $this->getTypeMockForConstraint(),
398 $document1,
399 new Factory(),
400 $this->getLanguageMock()
401 );
402
403 $criterionAssignment5 = clone $criterionAssignment3;
404
405 $constraint->accepts($criterionAssignment1);
406 $constraint->accepts($criterionAssignment2);
407 $constraint->accepts($criterionAssignment3);
408 $constraint->accepts($criterionAssignment4);
409 $constraint->accepts($criterionAssignment5);
410
411 $this->assertSame(
412 'The passed assignment must be unique for the document!',
413 $constraint->problemWith($criterionAssignment3)
414 );
415 $this->assertSame(
416 'The passed assignment must be unique for the document!',
417 $constraint->problemWith($criterionAssignment5)
418 );
419 }
420
433 ): void {
434 $document = $this
435 ->getMockBuilder(ilTermsOfServiceDocument::class)
436 ->disableOriginalConstructor()
437 ->onlyMethods(['criteria'])
438 ->getMock();
439
440 $document
441 ->method('criteria')
442 ->willReturn([$criterionAssignment1, $criterionAssignment2]);
443
444 $criterionTypeFactory = $this->getCriterionTypeFactoryMock();
445
446 $criterionType1 = $this->getCriterionTypeMock('usr_global_role');
447 $criterionType2 = $this->getCriterionTypeMock('usr_language');
448
449 $criterionType1
450 ->method('hasUniqueNature')
451 ->willReturn(false);
452
453 $criterionType2
454 ->method('hasUniqueNature')
455 ->willReturn(true);
456
457 $criterionTypeFactory
458 ->method('findByTypeIdent')
459 ->willReturn($criterionType2);
460
462 $criterionTypeFactory,
463 $document,
464 new Factory(),
465 $this->getLanguageMock()
466 );
467
468 $criterionWithSameNature = $this
469 ->getMockBuilder(ilTermsOfServiceDocumentCriterionAssignment::class)
470 ->onlyMethods(['getCriterionValue', 'getCriterionId'])
471 ->addMethods(['getId'])
472 ->disableOriginalConstructor()
473 ->getMock();
474
475 $criterionWithSameNature
476 ->method('getId')
477 ->willReturn(0);
478
479 $criterionWithSameNature
480 ->method('getCriterionId')
481 ->willReturn('usr_language');
482
483 $criterionWithSameNature
484 ->method('getCriterionValue')
485 ->willReturn($this->getCriterionConfig(['lng' => 'ru']));
486
487 $this->assertFalse($constraint->accepts($criterionWithSameNature));
488 }
489}
Builds data types.
Definition: Factory.php:21
Class ilTermsOfServiceCriterionBaseTest.
testConstraintAcceptanceWorksAsExpected(ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment1, ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment2, ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment3, ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment4)
@dataProvider criteriaAssignmentProvider
testConstraintProblemDetectionWorksAsExpected(ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment1, ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment2, ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment3, ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment4)
@dataProvider criteriaAssignmentProvider
testConstraintProblemBuilderWorksAsExpected(ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment1, ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment2, ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment3, ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment4)
@dataProvider criteriaAssignmentProvider
testConstraintCheckWorksAsExpected(ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment1, ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment2, ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment3, ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment4)
@dataProvider criteriaAssignmentProvider
testConstraintRestrictionWorksAsExpected(ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment1, ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment2, ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment3, ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment4)
@dataProvider criteriaAssignmentProvider
testConstraintExposesCorrectErrorMessagesAfterMultiAccept(ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment1, ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment2, ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment3, ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment4)
@dataProvider criteriaAssignmentProvider
testCriterionWithSameNatureIsNotAcceptedWhenAlreadyAssigned(ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment1, ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment2, ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment3, ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment4)
@dataProvider criteriaAssignmentProvider
Class ilTermsOfServiceDocument.
Interface ilTermsOfServiceCriterionType.