ILIAS  release_8 Revision v8.24
ilTermsOfServiceUserHasLanguageCriterionTest.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
23use PHPUnit\Framework\MockObject\MockObject;
24
30{
32 protected ilLanguage $lng;
33 protected string $expectedInitialValue = 'en';
34 protected string $expectedAfterFormSubmitValue = 'de';
35 protected string $englishLanguageTranslation = 'English';
36 protected string $germanLanguageTranslation = 'German';
37
38 protected function setUp(): void
39 {
40 parent::setUp();
41
42 $this->lng = $this->getLanguageMock();
43
44 $this->lng
45 ->method('txt')
46 ->willReturn('dummy');
47
48 $this->lng
49 ->method('getInstalledLanguages')
50 ->willReturn([$this->expectedAfterFormSubmitValue, $this->expectedInitialValue]);
51 }
52
54 {
56 }
57
59 {
60 $criterion = $this->getInstance();
61
62 $this->assertSame('usr_language', $criterion->getTypeIdent());
63 $this->assertTrue($criterion->hasUniqueNature());
64
65 return $criterion;
66 }
67
73 protected function buildForm(
75 string $httpCriterionSelectionBodyParameter
77 $form = $this->getFormMock();
78
79 $radioGroup = $this->getRadioGroupMock();
80
81 $radioGroup
82 ->method('getPostVar')
83 ->willReturn($httpCriterionSelectionBodyParameter);
84
85 $form->addItem($radioGroup);
86
87 $gui->appendOption($radioGroup, $this->getCriterionConfig(['lng' => $this->expectedInitialValue]));
88
89 return $form;
90 }
91
100 $httpCriterionSelectionBodyParameter = 'criterion';
101 $httpCriterionConfigBodyParameter = $criterion->getTypeIdent() . '_lng';
102
103 $gui = $criterion->ui($this->lng);
104
105 $this->assertInstanceOf(ilTermsOfServiceUserHasLanguageCriterionGUI::class, $gui);
106
107 $form = $this->buildForm($gui, $httpCriterionSelectionBodyParameter);
108
109 $languageSelection = $form->getItemByPostVar($httpCriterionConfigBodyParameter);
110 $this->assertInstanceOf(ilSelectInputGUI::class, $languageSelection);
111 $this->assertSame($languageSelection->getValue(), $this->expectedInitialValue);
112
113 return $criterion;
114 }
115
122 ): void {
123 $httpCriterionSelectionBodyParameter = 'criterion';
124 $httpCriterionConfigBodyParameter = $criterion->getTypeIdent() . '_lng';
125
126 $gui = $criterion->ui($this->lng);
127
128 $form = $this->buildForm($gui, $httpCriterionSelectionBodyParameter);
129
130 $form
131 ->expects($this->once())
132 ->method('getInput')
133 ->with($httpCriterionConfigBodyParameter)
134 ->willReturnCallback(function () {
135 return $this->expectedAfterFormSubmitValue;
136 });
137
138 $value = $gui->getConfigByForm($form);
139
140 $this->assertInstanceOf(ilTermsOfServiceCriterionConfig::class, $value);
141 $this->assertSame($this->expectedAfterFormSubmitValue, $value['lng']);
142 $this->assertEquals($this->getCriterionConfig(['lng' => $this->expectedAfterFormSubmitValue]), $value);
143 }
144
151 ): void {
152 $gui = $criterion->ui($this->lng);
153
154 $actual = $gui->getIdentPresentation();
155
156 $this->assertIsString($actual);
157 $this->assertNotEmpty($actual);
158 }
159
160 public function languageProvider(): array
161 {
162 return [
163 'English Language' => [$this->expectedInitialValue, $this->englishLanguageTranslation],
164 'German Language' => [$this->expectedAfterFormSubmitValue, $this->germanLanguageTranslation],
165 'Invalid Languages' => ['invalid_lng', ''],
166 ];
167 }
168
174 public function testValuePresentationMatchesExpectation(string $lng, string $translation): void
175 {
176 $language = $this->getLanguageMock();
177
178 $language
179 ->method('txt')
180 ->with('meta_l_' . $lng, '')
181 ->willReturn($translation);
182
184 $gui = $criterion->ui($language);
185
187 $actual = $gui->getValuePresentation(
188 $this->getCriterionConfig(['lng' => $lng]),
189 $this->getUiFactoryMock()
190 );
191
192 $this->assertInstanceOf(Component::class, $actual);
193 $this->assertInstanceOf(Legacy::class, $actual);
194 $this->assertSame($translation, $actual->getContent());
195 }
196
197 public function failingConfigProvider(): array
198 {
199 $criterion = $this->getInstance();
200
201 return [
202 'English Language where German is Expected' => [$criterion, $this->getCriterionConfig(['lng' => 'en'])],
203 'Array' => [$criterion, $this->getCriterionConfig(['lng' => []])],
204 'Object' => [$criterion, $this->getCriterionConfig(['lng' => new stdClass()])],
205 'Double' => [$criterion, $this->getCriterionConfig(['lng' => 1.0])],
206 'Integer' => [$criterion, $this->getCriterionConfig(['lng' => 1])],
207 'Wrong Key Provided for Extracting Language' => [
208 $criterion,
209 $this->getCriterionConfig(['another_config_key' => true])
210 ],
211 'Empty Configuration' => [$criterion, $this->getCriterionConfig()],
212 ];
213 }
214
215 public function succeedingConfigProvider(): array
216 {
217 $criterion = $this->getInstance();
218
219 return [
220 'German Language' => [$criterion, $this->getCriterionConfig(['lng' => 'de'])],
221 'German Language Uppercase' => [$criterion, $this->getCriterionConfig(['lng' => 'DE'])],
222 ];
223 }
224
233 ): void {
234 $user = $this->getUserMock();
235
236 $user
237 ->method('getLanguage')
238 ->willReturn('de');
239
240 $this->assertFalse($criterion->evaluate($user, $config));
241 }
242
251 ): void {
252 $user = $this->getUserMock();
253
254 $user
255 ->method('getLanguage')
256 ->willReturn('de');
257
258 $this->assertTrue($criterion->evaluate($user, $config));
259 }
260}
language handling
This class represents a property form user interface.
Class ilTermsOfServiceCriterionBaseTest.
Class ilTermsOfServiceCriterionConfig.
testValuesFromFormUserInterfaceElementsCanBeRetrieved(ilTermsOfServiceUserHasLanguageCriterion $criterion)
@depends testFormUserInterfaceElementsAreProperlyBuilt
testEvaluationFailsIfUserLanguageDoesNotMatchDefinedLanguage(ilTermsOfServiceUserHasLanguageCriterion $criterion, ilTermsOfServiceCriterionConfig $config)
testTypeIdentPresentationIsANonEmptyString(ilTermsOfServiceUserHasLanguageCriterion $criterion)
@depends testFormUserInterfaceElementsAreProperlyBuilt
buildForm(ilTermsOfServiceCriterionTypeGUI $gui, string $httpCriterionSelectionBodyParameter)
testFormUserInterfaceElementsAreProperlyBuilt(ilTermsOfServiceUserHasLanguageCriterion $criterion)
testEvaluationSucceedsIfUserLanguageDoesMatchDefinedLanguage(ilTermsOfServiceUserHasLanguageCriterion $criterion, ilTermsOfServiceCriterionConfig $config)
evaluate(ilObjUser $user, ilTermsOfServiceCriterionConfig $config)
A component is the most general form of an entity in the UI.
Definition: Component.php:28
Interface ilTermsOfServiceCriterionTypeGUI.
appendOption(ilRadioGroupInputGUI $group, ilTermsOfServiceCriterionConfig $config)
getConfigByForm(ilPropertyFormGUI $form)
getValuePresentation(ilTermsOfServiceCriterionConfig $config, Factory $uiFactory)
if(!array_key_exists('PATH_INFO', $_SERVER)) $config
Definition: metadata.php:85
$lng