19declare(strict_types=1);
28 use RealFieldsUiFactory;
29 use InstallLanguageTestFixture;
33 $setup_language = $this->createSetupLanguageMock([], [], []);
34 $setup_language->expects($this->once())
35 ->method(
'checkLanguageForInstallation')
38 $setup_language->expects($this->once())->method(
'flushLanguageForInstallation');
39 $setup_language->expects($this->once())->method(
'insertLanguageForInstallation');
42 'language_keys' =>
' de ',
46 $this->assertSame([
'de'], $result[
'installed_language_keys']);
47 $this->assertSame([], $result[
'installed_with_local_language_keys']);
48 $this->assertSame([], $result[
'already_installed_language_keys']);
49 $this->assertSame([], $result[
'not_installed_language_keys']);
50 $this->assertSame([], $result[
'invalid_local_language_files']);
59 $setup_language = $this->createSetupLanguageMock([], [], []);
60 $setup_language->method(
'checkLanguageForInstallation')->willReturn(
true);
62 $setup_language->expects($this->once())
63 ->method(
'insertLanguageForInstallation')
64 ->willReturnCallback(
static function () use (&$calls): array {
65 $calls[] = func_get_args();
70 'language_keys' =>
'de',
74 $this->assertSame([[
'de']], $calls);
83 $setup_language = $this->createSetupLanguageMock([], [], []);
84 $setup_language->method(
'checkLanguageForInstallation')->willReturn(
true);
85 $setup_language->expects($this->exactly(2))->method(
'insertLanguageForInstallation')->willReturnMap([
86 [
'de', [
'tos',
'pilot']],
91 'language_keys' =>
'de,fr',
95 $this->assertSame([
'de',
'fr'], $result[
'installed_language_keys']);
96 $this->assertSame([
'de'], $result[
'overlay_write_failed_language_keys']);
101 $setup_language = $this->createSetupLanguageMock(
103 'de' => [
'obj_id' => 1,
'status' =>
'installed'],
104 'en' => [
'obj_id' => 2,
'status' =>
'installed'],
109 $setup_language->method(
'checkLanguageForInstallation')->willReturn(
true);
110 $setup_language->expects($this->exactly(2))->method(
'insertLanguageForApplyingLocalChanges')->willReturnMap([
116 'language_keys' => [
'de',
'en'],
120 $this->assertSame([
'de',
'en'], $result[
'installed_with_local_language_keys']);
121 $this->assertSame([
'en'], $result[
'overlay_write_failed_language_keys']);
127 #[\PHPUnit\Framework\Attributes\DataProvider('modesThatApplyTheCustomizingFile')]
130 $setup_language = $this->createSetupLanguageStub(
131 [
'de' => [
'obj_id' => 1,
'status' =>
'installed']],
135 $setup_language->method(
'checkLanguageForInstallation')->willReturn(
true);
136 $setup_language->method(
'insertLanguageForInstallation')->willReturn([]);
137 $setup_language->method(
'insertLanguageForApplyingLocalChanges')->willReturn([]);
138 $setup_language->method(
'getSkippedDuplicateEntries')->willReturn([
139 'de' => [
'common#:#dup' => [
'mme: dup']],
140 'fr' => [
'common#:#dup' => [
'mme: dup']],
143 $result = $this->
createActivity($setup_language)->perform([
'language_keys' =>
'de',
'mode' => $mode]);
145 $this->assertSame([
'de: common#:#dup (mme: dup)'], $result[
'duplicate_customizing_entries']);
159 $setup_language = $this->createSetupLanguageMock(
160 [
'de' => [
'obj_id' => 1,
'status' =>
'installed']],
164 $setup_language->method(
'checkLanguageForInstallation')->willReturn(
true);
165 $setup_language->expects($this->once())->method(
'insertLanguageForInstallation')->with(
'fr')->willReturn([]);
168 'language_keys' => [
'de',
'fr'],
172 $this->assertSame([
'fr'], $result[
'installed_language_keys']);
173 $this->assertSame([], $result[
'overlay_write_failed_language_keys']);
179 $setup_language = $this->createSetupLanguageMock(
181 'de' => [
'obj_id' => 1,
'status' =>
'installed'],
186 $setup_language->expects($this->once())
187 ->method(
'checkLanguageForInstallation')
190 $setup_language->expects($this->once())->method(
'flushLanguageForInstallation')->with(
'fr');
191 $setup_language->expects($this->once())->method(
'insertLanguageForInstallation')->with(
'fr');
194 'language_keys' => [
' de, fr ',
'de'],
198 $this->assertSame([
'fr'], $result[
'installed_language_keys']);
199 $this->assertSame([], $result[
'installed_with_local_language_keys']);
200 $this->assertSame([
'de'], $result[
'already_installed_language_keys']);
201 $this->assertSame([], $result[
'not_installed_language_keys']);
202 $this->assertSame([], $result[
'invalid_local_language_files']);
208 $setup_language = $this->createSetupLanguageMock(
213 $setup_language->expects($this->once())
214 ->method(
'checkLanguageForInstallation')
217 $setup_language->expects($this->once())->method(
'flushLanguageForInstallation')->with(
'de');
218 $setup_language->expects($this->once())->method(
'insertLanguageForInstallation')->with(
'de');
221 'language_keys' =>
'de',
225 $this->assertSame([], $result[
'installed_language_keys']);
226 $this->assertSame([
'de'], $result[
'installed_with_local_language_keys']);
227 $this->assertSame([], $result[
'already_installed_language_keys']);
228 $this->assertSame([], $result[
'not_installed_language_keys']);
236 $setup_language = $this->createSetupLanguageMock(
237 [
'de' => [
'obj_id' => 1,
'status' =>
'installed']],
241 $setup_language->expects($this->never())->method(
'checkLanguageForInstallation');
242 $setup_language->expects($this->never())->method(
'flushLanguageForInstallation');
243 $setup_language->expects($this->never())->method(
'insertLanguageForInstallation');
244 $setup_language->expects($this->never())->method(
'insertLanguageForApplyingLocalChanges');
245 $setup_language->expects($this->never())->method(
'registerInstalledLanguage');
248 'language_keys' =>
'de',
252 $this->assertSame([], $result[
'installed_language_keys']);
253 $this->assertSame([], $result[
'installed_with_local_language_keys']);
254 $this->assertSame([
'de'], $result[
'already_installed_language_keys']);
255 $this->assertSame([], $result[
'not_installed_language_keys']);
256 $this->assertSame([], $result[
'invalid_local_language_files']);
261 $setup_language = $this->createSetupLanguageMock(
262 [
'de' => [
'obj_id' => 1,
'status' =>
'installed']],
266 $setup_language->expects($this->once())->method(
'checkLanguageForInstallation')->with(
'de')->willReturn(
true);
267 $setup_language->expects($this->never())->method(
'flushLanguageForInstallation');
268 $setup_language->expects($this->never())->method(
'insertLanguageForInstallation');
269 $setup_language->expects($this->once())
270 ->method(
'insertLanguageForApplyingLocalChanges')
273 $setup_language->expects($this->once())
274 ->method(
'registerInstalledLanguage')
277 [
'de' => [
'obj_id' => 1,
'status' =>
'installed']],
282 'language_keys' =>
'de',
286 $this->assertSame([], $result[
'installed_language_keys']);
287 $this->assertSame([
'de'], $result[
'installed_with_local_language_keys']);
288 $this->assertSame([], $result[
'already_installed_language_keys']);
289 $this->assertSame([], $result[
'not_installed_language_keys']);
290 $this->assertSame([], $result[
'invalid_local_language_files']);
295 $setup_language = $this->createSetupLanguageMock(
296 [
'de' => [
'obj_id' => 1,
'status' =>
'installed']],
300 $setup_language->method(
'checkLanguageForInstallation')->willReturn(
true);
302 $setup_language->expects($this->once())
303 ->method(
'insertLanguageForApplyingLocalChanges')
304 ->willReturnCallback(
static function () use (&$calls): array {
305 $calls[] = func_get_args();
310 'language_keys' =>
'de',
314 $this->assertSame([[
'de']], $calls);
323 $setup_language = $this->createSetupLanguageMock(
324 [
'de' => [
'obj_id' => 1,
'status' =>
'installed']],
328 $setup_language->expects($this->once())->method(
'checkLanguageForInstallation')->with(
'de')->willReturn(
true);
329 $setup_language->expects($this->never())->method(
'flushLanguageForInstallation');
330 $setup_language->expects($this->never())->method(
'insertLanguageForInstallation');
331 $setup_language->expects($this->once())
332 ->method(
'insertLanguageForApplyingLocalChanges')
334 $setup_language->expects($this->once())->method(
'registerInstalledLanguage');
337 'language_keys' =>
'de',
341 $this->assertSame([], $result[
'installed_language_keys']);
342 $this->assertSame([], $result[
'installed_with_local_language_keys']);
343 $this->assertSame([
'de'], $result[
'already_installed_language_keys']);
344 $this->assertSame([], $result[
'not_installed_language_keys']);
352 $setup_language = $this->createSetupLanguageMock([], [], []);
353 $setup_language->expects($this->never())->method(
'checkLanguageForInstallation');
354 $setup_language->expects($this->never())->method(
'flushLanguageForInstallation');
355 $setup_language->expects($this->never())->method(
'insertLanguageForInstallation');
356 $setup_language->expects($this->never())->method(
'insertLanguageForApplyingLocalChanges');
357 $setup_language->expects($this->never())->method(
'registerInstalledLanguage');
360 'language_keys' =>
'de',
364 $this->assertSame([], $result[
'installed_language_keys']);
365 $this->assertSame([], $result[
'installed_with_local_language_keys']);
366 $this->assertSame([], $result[
'already_installed_language_keys']);
367 $this->assertSame([
'de'], $result[
'not_installed_language_keys']);
376 $setup_language = $this->createMock(ilSetupLanguage::class);
377 $setup_language->method(
'getInstalledLanguages')->willReturn([
'de',
'en']);
378 $setup_language->expects($this->never())->method(
'getAvailableLanguagesForInstallation');
379 $setup_language->expects($this->never())->method(
'getLocalLanguages');
380 $setup_language->expects($this->never())->method(
'getInvalidLocalLanguageFiles');
381 $setup_language->expects($this->never())->method(
'checkLanguageForInstallation');
382 $setup_language->expects($this->never())->method(
'flushLanguageForInstallation');
383 $setup_language->expects($this->never())->method(
'insertLanguageForInstallation');
384 $setup_language->expects($this->never())->method(
'insertLanguageForApplyingLocalChanges');
385 $setup_language->expects($this->never())->method(
'registerInstalledLanguage');
388 'language_keys' => [
'de',
'en'],
392 $this->assertSame([], $result[
'installed_language_keys']);
393 $this->assertSame([], $result[
'installed_with_local_language_keys']);
394 $this->assertSame([
'de',
'en'], $result[
'already_installed_language_keys']);
395 $this->assertSame([], $result[
'not_installed_language_keys']);
396 $this->assertSame([], $result[
'invalid_local_language_files']);
404 $setup_language = $this->createSetupLanguageMock(
405 [
'de' => [
'obj_id' => 1,
'status' =>
'installed']],
409 $setup_language->expects($this->exactly(2))
410 ->method(
'checkLanguageForInstallation')
415 $setup_language->expects($this->exactly(2))->method(
'flushLanguageForInstallation');
416 $setup_language->expects($this->exactly(2))->method(
'insertLanguageForInstallation');
417 $setup_language->expects($this->never())->method(
'insertLanguageForApplyingLocalChanges');
418 $setup_language->expects($this->exactly(2))->method(
'registerInstalledLanguage');
419 $setup_language->expects($this->once())
420 ->method(
'getInvalidLocalLanguageFiles')
421 ->with([
'en',
'fr']);
424 'language_keys' => [
'de',
'en',
'fr'],
428 $this->assertSame([
'en'], $result[
'installed_language_keys']);
429 $this->assertSame([
'fr'], $result[
'installed_with_local_language_keys']);
430 $this->assertSame([
'de'], $result[
'already_installed_language_keys']);
431 $this->assertSame([], $result[
'not_installed_language_keys']);
439 $setup_language = $this->createSetupLanguageMock(
441 'de' => [
'obj_id' => 1,
'status' =>
'installed'],
442 'en' => [
'obj_id' => 2,
'status' =>
'installed'],
447 $setup_language->expects($this->exactly(2))->method(
'checkLanguageForInstallation')->willReturn(
true);
448 $setup_language->expects($this->never())->method(
'flushLanguageForInstallation');
449 $setup_language->expects($this->never())->method(
'insertLanguageForInstallation');
450 $setup_language->expects($this->exactly(2))
451 ->method(
'insertLanguageForApplyingLocalChanges')
452 ->with($this->logicalOr(
'de',
'en'));
453 $setup_language->expects($this->exactly(2))->method(
'registerInstalledLanguage');
454 $setup_language->expects($this->once())
455 ->method(
'getInvalidLocalLanguageFiles')
456 ->with([
'de',
'en']);
459 'language_keys' => [
'de',
'en',
'fr'],
463 $this->assertSame([], $result[
'installed_language_keys']);
464 $this->assertSame([
'de'], $result[
'installed_with_local_language_keys']);
465 $this->assertSame([
'en'], $result[
'already_installed_language_keys']);
466 $this->assertSame([
'fr'], $result[
'not_installed_language_keys']);
471 $setup_language = $this->createSetupLanguageMock(
473 'en' => [
'obj_id' => 1,
'status' =>
'installed'],
478 $setup_language->expects($this->once())
479 ->method(
'checkLanguageForInstallation')
482 $setup_language->expects($this->once())->method(
'flushLanguageForInstallation');
483 $setup_language->expects($this->once())->method(
'insertLanguageForInstallation');
484 $setup_language->expects($this->once())
485 ->method(
'registerInstalledLanguage')
488 [
'en' => [
'obj_id' => 1,
'status' =>
'installed']],
493 'language_keys' =>
'de',
497 $this->assertSame([
'de'], $result[
'installed_language_keys']);
498 $this->assertSame([], $result[
'installed_with_local_language_keys']);
499 $this->assertSame([], $result[
'already_installed_language_keys']);
500 $this->assertSame([], $result[
'invalid_local_language_files']);
const string MODE_INSTALL_LOCAL
const string MODE_INSTALL
testAllRequestedLanguagesBeingNoOpsSkipsLanguageAndFileLookupsEntirely()
If every requested language is a no-op, perform() must not read the available/local languages or scan...
testMultipleLanguagesSeparatesNotInstalledFromAlreadyInstalledUnderInstallMode()
testInstallModeIsNoOpForAlreadyInstalledLanguageEvenWithACustomFile()
Mode "install" must not re-install or re-apply the local file of an already installed language.
testInstallLocalModeAppliesCustomFileToAlreadyInstalledLanguage()
testInstallLocalModeOnAlreadyInstalledLanguageWithoutCustomFileIsReportedAsAlreadyInstalled()
"install_local" on an already installed language without a local file runs its write methods,...
testInstallLocalModeListsTheLanguageWhoseOverlayCouldNotBeWritten()
testFullInstallListsOnlyTheLanguagesWhoseOverlayCouldNotBeWritten()
A non-empty list from insertLanguageForInstallation() (migrated modules whose overlay could not be wr...
testInstallLocalModeOnNotInstalledLanguageIsCompleteNoOp()
"install_local" on a language that is not installed at all is a complete no-op.
testNewLanguageWithCustomFileIsReportedAsInstalledWithLocalFile()
testFullInstallPassesOnlyTheLanguageKey()
The Activity passes exactly the language key (no $create_missing_mo flag).
static modesThatApplyTheCustomizingFile()
testBulkRequestUnderInstallLocalModePartitionsEachKeyIntoTheCorrectBucket()
Mode "install_local": only insertLanguageForApplyingLocalChanges, only for already installed keys.
testListsTheDuplicateCustomizingEntriesOfTheAffectedLanguagesOnly(string $mode, array $installed)
testNothingIsListedWhenEveryOverlayWasWrittenOrNothingWasInstalled()
testInstallLocalModePassesOnlyTheLanguageKey()
testBulkRequestUnderInstallModePartitionsEachKeyIntoTheCorrectBucket()
Languages in every state at once land in their own bucket; only affected ones trigger a write (mode "...
testSingleNewLanguageIsInstalled()
testInstallingNewLanguageDoesNotUpdateAlreadyInstalledLanguages()
Class ilLanguageBaseTest.
language handling for setup
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
createActivity(\Closure $lng_objects, \Closure $obj_language_factory, ?\ilRbacSystem $rbac=null, int $language_folder_ref_id=0, ?RepositoryProvider $repository=null,)