Skip to content

Commit 9a039f9

Browse files
committed
test: Testinh Ini
closes #284
1 parent b08212b commit 9a039f9

1 file changed

Lines changed: 179 additions & 0 deletions

File tree

Lines changed: 179 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,179 @@
1+
<?php
2+
namespace WebFiori\Framework\Test;
3+
4+
use PHPUnit\Framework\TestCase;
5+
use WebFiori\Framework\Ini;
6+
7+
class IniTest extends TestCase {
8+
private string $tmpRoot;
9+
10+
protected function setUp(): void {
11+
$this->tmpRoot = sys_get_temp_dir().DIRECTORY_SEPARATOR.'ini_test_'.uniqid();
12+
mkdir($this->tmpRoot, 0755, true);
13+
}
14+
15+
protected function tearDown(): void {
16+
$this->removeDir($this->tmpRoot);
17+
}
18+
19+
// ── get() ────────────────────────────────────────────────────────────────
20+
21+
/** @test */
22+
public function testGet_returnsSameInstance() {
23+
$this->assertSame(Ini::get(), Ini::get());
24+
}
25+
26+
// ── mkdir() ──────────────────────────────────────────────────────────────
27+
28+
/** @test */
29+
public function testMkdir_createsDirectory() {
30+
$dir = $this->tmpRoot.DIRECTORY_SEPARATOR.'newdir';
31+
$this->assertFalse(is_dir($dir));
32+
Ini::mkdir($dir);
33+
$this->assertTrue(is_dir($dir));
34+
}
35+
36+
/** @test */
37+
public function testMkdir_doesNotFailIfAlreadyExists() {
38+
Ini::mkdir($this->tmpRoot);
39+
$this->assertTrue(is_dir($this->tmpRoot));
40+
}
41+
42+
// ── createAppDirs() ──────────────────────────────────────────────────────
43+
44+
/** @test */
45+
public function testCreateAppDirs_createsExpectedDirectories() {
46+
// Temporarily redefine constants via a sub-process is complex,
47+
// so we test the actual app dirs that were already created by bootstrap.
48+
$expected = [
49+
APP_PATH,
50+
APP_PATH.'Ini',
51+
APP_PATH.'Ini'.DIRECTORY_SEPARATOR.'Routes',
52+
APP_PATH.'Pages',
53+
APP_PATH.'Commands',
54+
APP_PATH.'Tasks',
55+
APP_PATH.'Middleware',
56+
APP_PATH.'Langs',
57+
APP_PATH.'Apis',
58+
APP_PATH.'Config',
59+
APP_PATH.'Storage',
60+
APP_PATH.'Storage'.DIRECTORY_SEPARATOR.'Uploads',
61+
APP_PATH.'Storage'.DIRECTORY_SEPARATOR.'Logs',
62+
APP_PATH.'Storage'.DIRECTORY_SEPARATOR.'Sessions',
63+
];
64+
65+
Ini::createAppDirs();
66+
67+
foreach ($expected as $dir) {
68+
$this->assertTrue(is_dir($dir), "Expected directory missing: $dir");
69+
}
70+
}
71+
72+
// ── createIniClass() ─────────────────────────────────────────────────────
73+
74+
/** @test */
75+
public function testCreateIniClass_createsFile() {
76+
$className = 'TestIniClass'.uniqid();
77+
Ini::get()->createIniClass($className, 'Test comment');
78+
79+
$file = APP_PATH.'Ini'.DIRECTORY_SEPARATOR.$className.'.php';
80+
$this->assertFileExists($file);
81+
unlink($file);
82+
}
83+
84+
/** @test */
85+
public function testCreateIniClass_fileContainsCorrectNamespace() {
86+
$className = 'TestIniNs'.uniqid();
87+
Ini::get()->createIniClass($className, 'NS test');
88+
89+
$file = APP_PATH.'Ini'.DIRECTORY_SEPARATOR.$className.'.php';
90+
$content = file_get_contents($file);
91+
$this->assertStringContainsString('namespace '.APP_DIR.'\\Ini', $content);
92+
$this->assertStringContainsString("class $className", $content);
93+
$this->assertStringContainsString('public static function initialize()', $content);
94+
unlink($file);
95+
}
96+
97+
/** @test */
98+
public function testCreateIniClass_fileContainsComment() {
99+
$className = 'TestIniComment'.uniqid();
100+
$comment = 'My special comment';
101+
Ini::get()->createIniClass($className, $comment);
102+
103+
$file = APP_PATH.'Ini'.DIRECTORY_SEPARATOR.$className.'.php';
104+
$content = file_get_contents($file);
105+
$this->assertStringContainsString($comment, $content);
106+
unlink($file);
107+
}
108+
109+
/** @test */
110+
public function testCreateIniClass_overwritesExistingFile() {
111+
$className = 'TestIniOverwrite'.uniqid();
112+
Ini::get()->createIniClass($className, 'First');
113+
Ini::get()->createIniClass($className, 'Second');
114+
115+
$file = APP_PATH.'Ini'.DIRECTORY_SEPARATOR.$className.'.php';
116+
$content = file_get_contents($file);
117+
$this->assertStringContainsString('Second', $content);
118+
$this->assertStringNotContainsString('First', $content);
119+
unlink($file);
120+
}
121+
122+
// ── createRoutesClass() ──────────────────────────────────────────────────
123+
124+
/** @test */
125+
public function testCreateRoutesClass_createsFile() {
126+
$className = 'TestRoutes'.uniqid();
127+
Ini::get()->createRoutesClass($className);
128+
129+
$file = APP_PATH.'Ini'.DIRECTORY_SEPARATOR.'Routes'.DIRECTORY_SEPARATOR.$className.'.php';
130+
$this->assertFileExists($file);
131+
unlink($file);
132+
}
133+
134+
/** @test */
135+
public function testCreateRoutesClass_fileContainsCorrectStructure() {
136+
$className = 'TestRoutesStruct'.uniqid();
137+
Ini::get()->createRoutesClass($className);
138+
139+
$file = APP_PATH.'Ini'.DIRECTORY_SEPARATOR.'Routes'.DIRECTORY_SEPARATOR.$className.'.php';
140+
$content = file_get_contents($file);
141+
$this->assertStringContainsString('namespace '.APP_DIR.'\\Ini\\Routes', $content);
142+
$this->assertStringContainsString("class $className", $content);
143+
$this->assertStringContainsString('public static function create()', $content);
144+
$this->assertStringContainsString('use WebFiori\\Framework\\Router\\Router', $content);
145+
unlink($file);
146+
}
147+
148+
/** @test */
149+
public function testCreateRoutesClass_overwritesExistingFile() {
150+
$className = 'TestRoutesOverwrite'.uniqid();
151+
Ini::get()->createRoutesClass($className);
152+
$file = APP_PATH.'Ini'.DIRECTORY_SEPARATOR.'Routes'.DIRECTORY_SEPARATOR.$className.'.php';
153+
$mtime1 = filemtime($file);
154+
155+
sleep(1);
156+
Ini::get()->createRoutesClass($className);
157+
clearstatcache();
158+
$mtime2 = filemtime($file);
159+
160+
$this->assertGreaterThan($mtime1, $mtime2);
161+
unlink($file);
162+
}
163+
164+
// ── helpers ──────────────────────────────────────────────────────────────
165+
166+
private function removeDir(string $dir): void {
167+
if (!is_dir($dir)) {
168+
return;
169+
}
170+
foreach (scandir($dir) as $item) {
171+
if ($item === '.' || $item === '..') {
172+
continue;
173+
}
174+
$path = $dir.DIRECTORY_SEPARATOR.$item;
175+
is_dir($path) ? $this->removeDir($path) : unlink($path);
176+
}
177+
rmdir($dir);
178+
}
179+
}

0 commit comments

Comments
 (0)