ILIAS  release_8 Revision v8.23
ilTermsOfServiceDocumentCriterionAssignmentConstraintTest.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
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 
176  ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment1,
177  ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment2,
178  ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment3,
179  ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment4
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 
192  $this->getTypeMockForConstraint(),
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 
212  ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment1,
213  ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment2,
214  ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment3,
215  ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment4
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 
263  ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment1,
264  ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment2,
265  ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment3,
266  ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment4
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 
299  ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment1,
300  ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment2,
301  ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment3,
302  ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment4
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 
345  ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment1,
346  ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment2,
347  ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment3,
348  ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment4
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 
381  ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment1,
382  ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment2,
383  ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment3,
384  ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment4
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 
429  ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment1,
430  ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment2,
431  ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment3,
432  ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment4
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 }
testCriterionWithSameNatureIsNotAcceptedWhenAlreadyAssigned(ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment1, ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment2, ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment3, ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment4)
criteriaAssignmentProvider
Interface ilTermsOfServiceCriterionType.
testConstraintAcceptanceWorksAsExpected(ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment1, ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment2, ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment3, ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment4)
criteriaAssignmentProvider
Class ilTermsOfServiceCriterionBaseTest.
testConstraintRestrictionWorksAsExpected(ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment1, ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment2, ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment3, ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment4)
criteriaAssignmentProvider
testConstraintCheckWorksAsExpected(ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment1, ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment2, ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment3, ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment4)
criteriaAssignmentProvider
testConstraintProblemBuilderWorksAsExpected(ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment1, ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment2, ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment3, ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment4)
criteriaAssignmentProvider
testConstraintProblemDetectionWorksAsExpected(ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment1, ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment2, ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment3, ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment4)
criteriaAssignmentProvider
testConstraintExposesCorrectErrorMessagesAfterMultiAccept(ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment1, ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment2, ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment3, ilTermsOfServiceDocumentCriterionAssignment $criterionAssignment4)
criteriaAssignmentProvider