ILIAS  trunk Revision v13.0_alpha-62-g3b72d83f2e5
ILIAS\Language\Tests\Activities\LanguageActivityTest Class Reference

Targets LanguageActivity::maybePerformAs() directly via throwing test doubles, for behaviour no concrete Activity can trigger without an artificial collaborator failure. More...

+ Inheritance diagram for ILIAS\Language\Tests\Activities\LanguageActivityTest:
+ Collaboration diagram for ILIAS\Language\Tests\Activities\LanguageActivityTest:

Public Member Functions

 testExceptionWhileBuildingTheInputDescriptionIsMaskedAsA500ResultError ()
 A defect while building the input description comes back masked as 500 (original only as previous), without reaching rbac. More...
 
 testATypeErrorWhileBuildingTheInputDescriptionIsMaskedAsA500ResultError ()
 A non-\Exception \Throwable (\TypeError) is masked as well. More...
 
 testADefectThrownByGrindIsMaskedAsA500ResultError ()
 grind() throws on a defect (FormInput without InputInternal); maybePerformAs() must mask it as 500. More...
 
 testIsAllowedToPerformRefusesNonUsersWithoutAskingRbac (?int $usr_id)
 No RBAC lookup for a non-user: the anonymous user (null: ANONYMOUS_USER_ID) must not pass on its roles. More...
 
 testMaybePerformAsAnswers403ForANonUserAndNeverPerforms ()
 
 testMaybePerformAsPassesTheTrustedUsrIdToPerformOverASpoofedFormKey ()
 perform() gets the usr_id of maybePerformAs(), not the spoofed one from normalizeParameters(). More...
 
 testInvalidMarkupCustomizingEntriesAppendTheMarkupConcernedToEachEntry ()
 Skipped entries are listed with their markup, language-neutral and without duplicates; only the requested languages appear, in requested order. More...
 
 testDuplicateCustomizingEntriesNameWhatEachEntryWouldDuplicate ()
 

Static Public Member Functions

static unknownUserIdProvider ()
 

Additional Inherited Members

- Protected Member Functions inherited from ilLanguageBaseTestCase
 setUp ()
 
 setGlobalVariable (string $name, $value)
 
 rbacOf (\ilRbacSystem $system)
 
 languageFolder (int $ref_id=0)
 

Detailed Description

Targets LanguageActivity::maybePerformAs() directly via throwing test doubles, for behaviour no concrete Activity can trigger without an artificial collaborator failure.

Definition at line 38 of file LanguageActivityTest.php.

Member Function Documentation

◆ testADefectThrownByGrindIsMaskedAsA500ResultError()

ILIAS\Language\Tests\Activities\LanguageActivityTest::testADefectThrownByGrindIsMaskedAsA500ResultError ( )

grind() throws on a defect (FormInput without InputInternal); maybePerformAs() must mask it as 500.

Definition at line 85 of file LanguageActivityTest.php.

85 : void
86 {
87 $activity = new LanguageActivityPerformEchoTestDouble(
88 $this->rbacOf($this->createMock(\ilRbacSystem::class)),
89 $this->languageFolder(),
90 $this->createMock(FormInput::class),
91 );
92
93 $error = $activity->maybePerformAs($this->createRealFieldsUiFactory()->input(), 6, [])->error();
94
95 $this->assertSame(500, $error->getCode());
96 $this->assertInstanceOf(\LogicException::class, $error->getPrevious());
97 }
ilErrorHandling $error
Definition: class.ilias.php:69
rbacOf(\ilRbacSystem $system)

References ILIAS\$error, ilLanguageBaseTestCase\languageFolder(), and ilLanguageBaseTestCase\rbacOf().

+ Here is the call graph for this function:

◆ testATypeErrorWhileBuildingTheInputDescriptionIsMaskedAsA500ResultError()

ILIAS\Language\Tests\Activities\LanguageActivityTest::testATypeErrorWhileBuildingTheInputDescriptionIsMaskedAsA500ResultError ( )

A non-\Exception \Throwable (\TypeError) is masked as well.

Definition at line 68 of file LanguageActivityTest.php.

68 : void
69 {
70 $activity = new LanguageActivityThrowingInputDescriptionTestDouble(
71 $this->rbacOf($this->createMock(\ilRbacSystem::class)),
72 $this->languageFolder(),
73 throw_type_error: true,
74 );
75
76 $error = $activity->maybePerformAs($this->createRealFieldsUiFactory()->input(), 6, [])->error();
77
78 $this->assertInstanceOf(\RuntimeException::class, $error);
79 $this->assertSame(500, $error->getCode());
80 $this->assertStringNotContainsString('TypeError', $error->getMessage());
81 $this->assertInstanceOf(\TypeError::class, $error->getPrevious());
82 }

References ILIAS\$error, ilErrorHandling\getMessage(), ilLanguageBaseTestCase\languageFolder(), and ilLanguageBaseTestCase\rbacOf().

+ Here is the call graph for this function:

◆ testDuplicateCustomizingEntriesNameWhatEachEntryWouldDuplicate()

ILIAS\Language\Tests\Activities\LanguageActivityTest::testDuplicateCustomizingEntriesNameWhatEachEntryWouldDuplicate ( )

Definition at line 190 of file LanguageActivityTest.php.

190 : void
191 {
192 $skipped = [
193 'de' => ['tos#:#x' => ['common: x', 'pilot: X'], 'tos#:#y' => ['mme: y']],
194 'en' => ['tos#:#z' => ['mme: z']],
195 'fr' => ['tos#:#z' => ['mme: z']],
196 ];
197 $activity = new LanguageActivityInvalidMarkupTestDouble(
198 $this->rbacOf($this->createStub(\ilRbacSystem::class)),
199 $this->languageFolder()
200 );
201
202 $this->assertSame(
203 ['en: tos#:#z (mme: z)', 'de: tos#:#x (common: x, pilot: X)', 'de: tos#:#y (mme: y)'],
204 $activity->duplicateEntries($skipped, ['en', 'de', 'it'])
205 );
206 }

References ilLanguageBaseTestCase\languageFolder(), and ilLanguageBaseTestCase\rbacOf().

+ Here is the call graph for this function:

◆ testExceptionWhileBuildingTheInputDescriptionIsMaskedAsA500ResultError()

ILIAS\Language\Tests\Activities\LanguageActivityTest::testExceptionWhileBuildingTheInputDescriptionIsMaskedAsA500ResultError ( )

A defect while building the input description comes back masked as 500 (original only as previous), without reaching rbac.

Definition at line 46 of file LanguageActivityTest.php.

46 : void
47 {
48 $rbac = $this->createMock(\ilRbacSystem::class);
49 $rbac->expects($this->never())->method('checkAccessOfUser');
50
51 $activity = new LanguageActivityThrowingInputDescriptionTestDouble(
52 $this->rbacOf($rbac),
53 $this->languageFolder()
54 );
55
56 $result = $activity->maybePerformAs($this->createRealFieldsUiFactory()->input(), 6, []);
57
58 $this->assertTrue($result->isError());
59 $error = $result->error();
60 $this->assertInstanceOf(\RuntimeException::class, $error);
61 $this->assertSame(500, $error->getCode());
62 $this->assertSame('The activity could not be performed.', $error->getMessage());
63 $this->assertInstanceOf(\RuntimeException::class, $error->getPrevious());
64 $this->assertSame('simulated failure while building the input description', $error->getPrevious()->getMessage());
65 }

References ILIAS\$error, ilErrorHandling\getMessage(), ilLanguageBaseTestCase\languageFolder(), and ilLanguageBaseTestCase\rbacOf().

+ Here is the call graph for this function:

◆ testInvalidMarkupCustomizingEntriesAppendTheMarkupConcernedToEachEntry()

ILIAS\Language\Tests\Activities\LanguageActivityTest::testInvalidMarkupCustomizingEntriesAppendTheMarkupConcernedToEachEntry ( )

Skipped entries are listed with their markup, language-neutral and without duplicates; only the requested languages appear, in requested order.

Definition at line 168 of file LanguageActivityTest.php.

168 : void
169 {
170 $policy = new TranslationMarkupPolicy();
171 $skipped = [
172 'de' => [
173 'tos#:#x' => $policy->findViolations('<script>a</script><script>b</script></form>'),
174 'tos#:#plain' => [],
175 ],
176 'en' => ['tos#:#y' => $policy->findViolations('<script>a</script>')],
177 'fr' => ['tos#:#z' => $policy->findViolations('<script>a</script>')],
178 ];
179 $activity = new LanguageActivityInvalidMarkupTestDouble(
180 $this->rbacOf($this->createStub(\ilRbacSystem::class)),
181 $this->languageFolder()
182 );
183
184 $this->assertSame(
185 ['en: tos#:#y: <script>', 'de: tos#:#x: <script>, </form>', 'de: tos#:#plain'],
186 $activity->entries($skipped, ['en', 'de', 'it'])
187 );
188 }

References $policy, ilLanguageBaseTestCase\languageFolder(), and ilLanguageBaseTestCase\rbacOf().

+ Here is the call graph for this function:

◆ testIsAllowedToPerformRefusesNonUsersWithoutAskingRbac()

ILIAS\Language\Tests\Activities\LanguageActivityTest::testIsAllowedToPerformRefusesNonUsersWithoutAskingRbac ( ?int  $usr_id)

No RBAC lookup for a non-user: the anonymous user (null: ANONYMOUS_USER_ID) must not pass on its roles.

Definition at line 107 of file LanguageActivityTest.php.

107 : void
108 {
109 if (!defined('ANONYMOUS_USER_ID')) {
110 define('ANONYMOUS_USER_ID', 13);
111 }
112 $usr_id ??= ANONYMOUS_USER_ID;
113
114 $rbac_system = $this->createMock(\ilRbacSystem::class);
115 $rbac_system->expects($this->never())->method('checkAccessOfUser');
116
117 $activity = new LanguageActivityPerformEchoTestDouble(
118 $this->rbacOf($rbac_system),
119 $this->languageFolder()
120 );
121
122 $this->assertFalse($activity->isAllowedToPerform($usr_id, []));
123 }
const ANONYMOUS_USER_ID
Definition: constants.php:27

References ANONYMOUS_USER_ID, ilLanguageBaseTestCase\languageFolder(), and ilLanguageBaseTestCase\rbacOf().

+ Here is the call graph for this function:

◆ testMaybePerformAsAnswers403ForANonUserAndNeverPerforms()

ILIAS\Language\Tests\Activities\LanguageActivityTest::testMaybePerformAsAnswers403ForANonUserAndNeverPerforms ( )

Definition at line 125 of file LanguageActivityTest.php.

125 : void
126 {
127 $rbac_system = $this->createMock(\ilRbacSystem::class);
128 $rbac_system->expects($this->never())->method('checkAccessOfUser');
129
130 $activity = new LanguageActivityPerformEchoTestDouble(
131 $this->rbacOf($rbac_system),
132 $this->languageFolder()
133 );
134
135 $error = $activity->maybePerformAs($this->createRealFieldsUiFactory()->input(), 0, [])->error();
136
137 $this->assertSame(403, $error->getCode());
138 }

References ILIAS\$error, ilLanguageBaseTestCase\languageFolder(), and ilLanguageBaseTestCase\rbacOf().

+ Here is the call graph for this function:

◆ testMaybePerformAsPassesTheTrustedUsrIdToPerformOverASpoofedFormKey()

ILIAS\Language\Tests\Activities\LanguageActivityTest::testMaybePerformAsPassesTheTrustedUsrIdToPerformOverASpoofedFormKey ( )

perform() gets the usr_id of maybePerformAs(), not the spoofed one from normalizeParameters().

Needs a dedicated double, as no real Activity collects a 'usr_id' field.

Definition at line 144 of file LanguageActivityTest.php.

144 : void
145 {
146 $rbac = $this->createStub(\ilRbacSystem::class);
147 $rbac->method('checkAccessOfUser')->willReturn(true);
148
149 $activity = new LanguageActivityPerformEchoTestDouble(
150 $this->rbacOf($rbac),
151 $this->languageFolder()
152 );
153
154 $result = $activity->maybePerformAs($this->createRealFieldsUiFactory()->input(), 42, []);
155
156 $this->assertFalse($result->isError());
157 $parameters = $result->value();
158 // the trusted usr_id (42) wins over the spoofed one from normalizeParameters()
159 $this->assertSame(42, $parameters['usr_id']);
160 // a non-colliding key survives the merge
161 $this->assertSame('form', $parameters['source']);
162 }

References $parameters, ilLanguageBaseTestCase\languageFolder(), and ilLanguageBaseTestCase\rbacOf().

+ Here is the call graph for this function:

◆ unknownUserIdProvider()

static ILIAS\Language\Tests\Activities\LanguageActivityTest::unknownUserIdProvider ( )
static
Returns
array<string, array{0: ?int}>

Definition at line 100 of file LanguageActivityTest.php.

100 : array
101 {
102 return ['zero' => [0], 'negative' => [-1], 'anonymous' => [null]];
103 }

The documentation for this class was generated from the following file: