ILIAS  trunk Revision v13.0_alpha-62-g3b72d83f2e5
MigratedLanguageFileSyncUnwritableTest Class Reference

MigratedLanguageFileSync::findUnwritableOverlayDirectories(). More...

+ Inheritance diagram for MigratedLanguageFileSyncUnwritableTest:
+ Collaboration diagram for MigratedLanguageFileSyncUnwritableTest:

Public Member Functions

 testAFileInPlaceOfTheOverlayDirectoryIsReported ()
 Root-proof: a regular file in place of the overlay directory - no user can create it, so it is reported. More...
 
 testAFileInPlaceOfAParentOfTheOverlayDirectoryIsReported ()
 A file further up (where "<client data dir>/lang" is created) blocks the path just as well. More...
 
 testADanglingSymlinkInTheOverlayPathIsReported (\Closure $link_path)
 A dangling symlink does not "exist" for file_exists(), but mkdir() cannot create anything in its place (overlay directory or a parent). More...
 
 testASymlinkToAWritableDirectoryIsNotReported ()
 A symlink to an existing writable directory is fine (e.g. More...
 
 testAMissingButCreatableOverlayDirectoryIsNotReported ()
 A missing directory is fine if the closest existing parent is writable: sync() creates it. More...
 
 testAMissingClientDataDirWithACreatableParentIsNotReported ()
 
 testAnExistingWritableOverlayDirectoryIsNotReported ()
 
 testWithoutClientDataDirNothingIsReported ()
 
 testAModuleThatIsNotMigratedForTheLanguageIsIgnored ()
 Only modules migrated for a given language count: without a shipped .po no overlay is written, so a blocked directory is irrelevant (as for modules without contributed directory and the main directory). More...
 
 testEachUnwritableOverlayDirectoryIsReportedOnceAcrossLanguagesAndModules ()
 Each module has an overlay directory per language (lang/<module>/<lang>); each blocked one is reported once. More...
 

Static Public Member Functions

static danglingSymlinkPositions ()
 
- Static Public Member Functions inherited from MigratedLanguageFileSyncTestCase
static refreshFlags ()
 

Additional Inherited Members

- Protected Member Functions inherited from MigratedLanguageFileSyncTestCase
 setUp ()
 
 tearDown ()
 
 seedShipped (array $entries, string $lang_key='de', string $module=self::MODULE)
 
 seedOverlay (array $entries, string $lang_key='de')
 
 shippedPo (string $lang_key='de', string $module=self::MODULE)
 
 overlayBase (string $lang_key='de')
 
 overlayPo ()
 
 sync (array $entries, bool $refresh=false, ?string $client_data_dir='default')
 
 overlayIdentifiers ()
 
 overlayDirectory ()
 
 findUnwritable (array $lang_keys=['de'], ?string $client_data_dir='default', ?LanguageFileDirectoryManager $manager=null)
 
- Protected Attributes inherited from MigratedLanguageFileSyncTestCase
const string MODULE = 'stest'
 
string $fixture_directory
 
string $client_data_dir
 
string $ilias_root
 
LanguageFileDirectory $directory
 
LanguageFileDirectoryManager $manager
 

Detailed Description

MigratedLanguageFileSync::findUnwritableOverlayDirectories().

Definition at line 34 of file MigratedLanguageFileSyncUnwritableTest.php.

Member Function Documentation

◆ danglingSymlinkPositions()

static MigratedLanguageFileSyncUnwritableTest::danglingSymlinkPositions ( )
static
Returns
array<string, array<int, mixed>>

Definition at line 75 of file MigratedLanguageFileSyncUnwritableTest.php.

75 : array
76 {
77 return [
78 'the overlay directory' => [static fn(self $test): string => $test->overlayDirectory()],
79 'a parent ("lang")' => [static fn(self $test): string => $test->client_data_dir . '/lang'],
80 ];
81 }

◆ testADanglingSymlinkInTheOverlayPathIsReported()

MigratedLanguageFileSyncUnwritableTest::testADanglingSymlinkInTheOverlayPathIsReported ( \Closure  $link_path)

A dangling symlink does not "exist" for file_exists(), but mkdir() cannot create anything in its place (overlay directory or a parent).

Definition at line 60 of file MigratedLanguageFileSyncUnwritableTest.php.

60 : void
61 {
62 $this->seedShipped(['greeting' => 'Hallo']);
63 $link = $link_path($this);
64 if (!is_dir(dirname($link))) {
65 mkdir(dirname($link), 0775, true);
66 }
67 symlink($this->client_data_dir . '/does-not-exist', $link);
68
69 $this->assertSame([$this->overlayDirectory()], $this->findUnwritable());
70 }
seedShipped(array $entries, string $lang_key='de', string $module=self::MODULE)
findUnwritable(array $lang_keys=['de'], ?string $client_data_dir='default', ?LanguageFileDirectoryManager $manager=null)

References MigratedLanguageFileSyncTestCase\findUnwritable(), MigratedLanguageFileSyncTestCase\overlayDirectory(), and MigratedLanguageFileSyncTestCase\seedShipped().

+ Here is the call graph for this function:

◆ testAFileInPlaceOfAParentOfTheOverlayDirectoryIsReported()

MigratedLanguageFileSyncUnwritableTest::testAFileInPlaceOfAParentOfTheOverlayDirectoryIsReported ( )

A file further up (where "<client data dir>/lang" is created) blocks the path just as well.

Definition at line 47 of file MigratedLanguageFileSyncUnwritableTest.php.

47 : void
48 {
49 $this->seedShipped(['greeting' => 'Hallo']);
50 file_put_contents($this->client_data_dir . '/lang', 'not a directory');
51
52 $this->assertSame([$this->overlayDirectory()], $this->findUnwritable());
53 }

References MigratedLanguageFileSyncTestCase\findUnwritable(), MigratedLanguageFileSyncTestCase\overlayDirectory(), and MigratedLanguageFileSyncTestCase\seedShipped().

+ Here is the call graph for this function:

◆ testAFileInPlaceOfTheOverlayDirectoryIsReported()

MigratedLanguageFileSyncUnwritableTest::testAFileInPlaceOfTheOverlayDirectoryIsReported ( )

Root-proof: a regular file in place of the overlay directory - no user can create it, so it is reported.

Definition at line 37 of file MigratedLanguageFileSyncUnwritableTest.php.

37 : void
38 {
39 $this->seedShipped(['greeting' => 'Hallo']);
40 mkdir(dirname($this->overlayDirectory()), 0775, true);
41 file_put_contents($this->overlayDirectory(), 'not a directory');
42
43 $this->assertSame([$this->overlayDirectory()], $this->findUnwritable());
44 }

References MigratedLanguageFileSyncTestCase\findUnwritable(), MigratedLanguageFileSyncTestCase\overlayDirectory(), and MigratedLanguageFileSyncTestCase\seedShipped().

+ Here is the call graph for this function:

◆ testAMissingButCreatableOverlayDirectoryIsNotReported()

MigratedLanguageFileSyncUnwritableTest::testAMissingButCreatableOverlayDirectoryIsNotReported ( )

A missing directory is fine if the closest existing parent is writable: sync() creates it.

Definition at line 94 of file MigratedLanguageFileSyncUnwritableTest.php.

94 : void
95 {
96 $this->seedShipped(['greeting' => 'Hallo']);
97
98 $this->assertDirectoryDoesNotExist($this->client_data_dir . '/lang');
99 $this->assertSame([], $this->findUnwritable());
100 $this->assertDirectoryDoesNotExist($this->client_data_dir . '/lang', 'the check itself creates nothing');
101 }

References MigratedLanguageFileSyncTestCase\findUnwritable(), and MigratedLanguageFileSyncTestCase\seedShipped().

+ Here is the call graph for this function:

◆ testAMissingClientDataDirWithACreatableParentIsNotReported()

MigratedLanguageFileSyncUnwritableTest::testAMissingClientDataDirWithACreatableParentIsNotReported ( )

Definition at line 103 of file MigratedLanguageFileSyncUnwritableTest.php.

103 : void
104 {
105 $this->seedShipped(['greeting' => 'Hallo']);
106
107 $this->assertSame([], $this->findUnwritable(['de'], $this->client_data_dir . '/not-yet-created'));
108 }

References MigratedLanguageFileSyncTestCase\findUnwritable(), and MigratedLanguageFileSyncTestCase\seedShipped().

+ Here is the call graph for this function:

◆ testAModuleThatIsNotMigratedForTheLanguageIsIgnored()

MigratedLanguageFileSyncUnwritableTest::testAModuleThatIsNotMigratedForTheLanguageIsIgnored ( )

Only modules migrated for a given language count: without a shipped .po no overlay is written, so a blocked directory is irrelevant (as for modules without contributed directory and the main directory).

Definition at line 130 of file MigratedLanguageFileSyncUnwritableTest.php.

130 : void
131 {
132 $this->seedShipped(['greeting' => 'Hello'], 'en');
133 file_put_contents($this->client_data_dir . '/lang', 'not a directory');
134
135 $this->assertSame([], $this->findUnwritable(['de']));
136 $this->assertSame([$this->client_data_dir . '/lang/' . self::MODULE . '/en'], $this->findUnwritable(['de', 'en']));
137 }

References MigratedLanguageFileSyncTestCase\findUnwritable(), and MigratedLanguageFileSyncTestCase\seedShipped().

+ Here is the call graph for this function:

◆ testAnExistingWritableOverlayDirectoryIsNotReported()

MigratedLanguageFileSyncUnwritableTest::testAnExistingWritableOverlayDirectoryIsNotReported ( )

Definition at line 110 of file MigratedLanguageFileSyncUnwritableTest.php.

110 : void
111 {
112 $this->seedShipped(['greeting' => 'Hallo']);
113 mkdir($this->overlayDirectory(), 0775, true);
114
115 $this->assertSame([], $this->findUnwritable());
116 }

References MigratedLanguageFileSyncTestCase\findUnwritable(), MigratedLanguageFileSyncTestCase\overlayDirectory(), and MigratedLanguageFileSyncTestCase\seedShipped().

+ Here is the call graph for this function:

◆ testASymlinkToAWritableDirectoryIsNotReported()

MigratedLanguageFileSyncUnwritableTest::testASymlinkToAWritableDirectoryIsNotReported ( )

A symlink to an existing writable directory is fine (e.g.

a mounted data volume).

Definition at line 84 of file MigratedLanguageFileSyncUnwritableTest.php.

84 : void
85 {
86 $this->seedShipped(['greeting' => 'Hallo']);
87 mkdir($this->client_data_dir . '/elsewhere');
88 symlink($this->client_data_dir . '/elsewhere', $this->client_data_dir . '/lang');
89
90 $this->assertSame([], $this->findUnwritable());
91 }

References MigratedLanguageFileSyncTestCase\findUnwritable(), and MigratedLanguageFileSyncTestCase\seedShipped().

+ Here is the call graph for this function:

◆ testEachUnwritableOverlayDirectoryIsReportedOnceAcrossLanguagesAndModules()

MigratedLanguageFileSyncUnwritableTest::testEachUnwritableOverlayDirectoryIsReportedOnceAcrossLanguagesAndModules ( )

Each module has an overlay directory per language (lang/<module>/<lang>); each blocked one is reported once.

Definition at line 142 of file MigratedLanguageFileSyncUnwritableTest.php.

142 : void
143 {
144 $second = MigratedPoFixture::directory('stwo', 'components/ILIAS/Language/tests/ComponentTranslation/' . basename($this->fixture_directory) . '/sub/');
145 $manager = new LanguageFileDirectoryManager(new CustomizingLanguageFileDirectory(), $this->directory, $second);
146 $this->seedShipped(['greeting' => 'Hallo'], 'de');
147 $this->seedShipped(['greeting' => 'Hello'], 'en');
149 $this->fixture_directory . '/sub/stwo_de.po',
150 MigratedPoFixture::catalog('stwo', ['x' => 'y'])
151 );
152 file_put_contents($this->client_data_dir . '/lang', 'not a directory');
153
154 $this->assertSame(
155 [
156 $this->client_data_dir . '/lang/' . self::MODULE . '/de',
157 $this->client_data_dir . '/lang/stwo/de',
158 $this->client_data_dir . '/lang/' . self::MODULE . '/en',
159 ],
160 $this->findUnwritable(['de', 'en', 'de'], 'default', $manager)
161 );
162 }
static directory(string $prefix, string $path, bool $local=false)
static catalog(string $module, array $entries)
static writePo(string $file, TranslationCatalog $catalog)

References MigratedLanguageFileSyncTestCase\$manager, MigratedPoFixture\catalog(), MigratedPoFixture\directory(), MigratedLanguageFileSyncTestCase\findUnwritable(), MigratedLanguageFileSyncTestCase\seedShipped(), and MigratedPoFixture\writePo().

+ Here is the call graph for this function:

◆ testWithoutClientDataDirNothingIsReported()

MigratedLanguageFileSyncUnwritableTest::testWithoutClientDataDirNothingIsReported ( )

Definition at line 118 of file MigratedLanguageFileSyncUnwritableTest.php.

118 : void
119 {
120 $this->seedShipped(['greeting' => 'Hallo']);
121 file_put_contents($this->client_data_dir . '/lang', 'not a directory');
122
123 $this->assertSame([], $this->findUnwritable(['de'], null));
124 }

References MigratedLanguageFileSyncTestCase\findUnwritable(), and MigratedLanguageFileSyncTestCase\seedShipped().

+ Here is the call graph for this function:

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