Passed
Push — master ( c6a6de...ed87d4 )
by Kirill
02:46
created

DirectoriesTest::testDeleteDirectory()   A

Complexity

Conditions 3
Paths 4

Size

Total Lines 42
Code Lines 27

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 1 Features 0
Metric Value
eloc 27
c 1
b 1
f 0
dl 0
loc 42
rs 9.488
cc 3
nc 4
nop 0
1
<?php
2
3
/**
4
 * This file is part of Spiral Framework package.
5
 *
6
 * For the full copyright and license information, please view the LICENSE
7
 * file that was distributed with this source code.
8
 */
9
10
declare(strict_types=1);
11
12
namespace Spiral\Tests\Files;
13
14
use Spiral\Files\Exception\FilesException;
15
use Spiral\Files\Files;
16
use Spiral\Files\FilesInterface;
17
18
class DirectoriesTest extends TestCase
19
{
20
    public function setUp(): void
21
    {
22
        $files = new Files();
23
        $files->ensureDirectory(self::FIXTURE_DIRECTORY, FilesInterface::RUNTIME);
24
    }
25
26
    public function tearDown(): void
27
    {
28
        $files = new Files();
29
        $files->deleteDirectory(self::FIXTURE_DIRECTORY, true);
30
    }
31
32
    public function testEnsureDirectory(): void
33
    {
34
        $files = new Files();
35
        $directory = self::FIXTURE_DIRECTORY . 'directory/';
36
37
        $this->assertFalse($files->exists($directory));
38
        $this->assertFalse($files->isDirectory($directory));
39
40
        $files->ensureDirectory($directory);
41
42
        $this->assertTrue($files->exists($directory));
43
        $this->assertTrue($files->isDirectory($directory));
44
    }
45
46
    public function testEnsureExistedDirectory(): void
47
    {
48
        $files = new Files();
49
        $directory = self::FIXTURE_DIRECTORY . 'directory/';
50
51
        $this->assertFalse($files->exists($directory));
52
        $this->assertFalse($files->isDirectory($directory));
53
54
        mkdir($directory);
55
56
        $this->assertTrue($files->exists($directory));
57
        $this->assertTrue($files->isDirectory($directory));
58
59
        $files->ensureDirectory($directory);
60
61
        $this->assertTrue($files->exists($directory));
62
        $this->assertTrue($files->isDirectory($directory));
63
    }
64
65
    public function testEnsureNestedDirectory(): void
66
    {
67
        $files = new Files();
68
        $directory = self::FIXTURE_DIRECTORY . 'directory/sub/other';
69
70
        $this->assertFalse($files->exists($directory));
71
        $this->assertFalse($files->isDirectory($directory));
72
73
        $files->ensureDirectory($directory);
74
75
        $this->assertTrue($files->exists($directory));
76
        $this->assertTrue($files->isDirectory($directory));
77
    }
78
79
    public function testEnsureNestedDirectoryNoRecursivePermissions(): void
80
    {
81
        $files = new Files();
82
        $directory = self::FIXTURE_DIRECTORY . 'directory/sub/other';
83
84
        $this->assertFalse($files->exists($directory));
85
        $this->assertFalse($files->isDirectory($directory));
86
87
        $files->ensureDirectory($directory, Files::DEFAULT_FILE_MODE, false);
88
89
        $this->assertTrue($files->exists($directory));
90
        $this->assertTrue($files->isDirectory($directory));
91
    }
92
93
    public function testEnsureExistedNestedDirectory(): void
94
    {
95
        $files = new Files();
96
        $directory = self::FIXTURE_DIRECTORY . 'directory/sub/other';
97
98
        $this->assertFalse($files->exists($directory));
99
        $this->assertFalse($files->isDirectory($directory));
100
101
        mkdir(self::FIXTURE_DIRECTORY . 'directory');
102
        mkdir(self::FIXTURE_DIRECTORY . 'directory/sub');
103
        mkdir(self::FIXTURE_DIRECTORY . 'directory/sub/other');
104
105
        $this->assertTrue($files->exists($directory));
106
        $this->assertTrue($files->isDirectory($directory));
107
108
        $files->ensureDirectory($directory);
109
110
        $this->assertTrue($files->exists($directory));
111
        $this->assertTrue($files->isDirectory($directory));
112
    }
113
114
    public function testDeleteDirectoryContent(): void
115
    {
116
        $files = new Files();
117
        $baseDirectory = self::FIXTURE_DIRECTORY . 'directory/';
118
        $directory = $baseDirectory . 'sub/other';
119
120
        $filenames = [
121
            $baseDirectory . 'test.file',
122
            $directory . 'other.file',
123
            $directory . '.sample',
124
        ];
125
126
        $this->assertFalse($files->exists($baseDirectory));
127
        $this->assertFalse($files->isDirectory($baseDirectory));
128
129
        $this->assertFalse($files->exists($directory));
130
        $this->assertFalse($files->isDirectory($directory));
131
132
        $files->ensureDirectory($directory);
133
134
        $this->assertTrue($files->exists($baseDirectory));
135
        $this->assertTrue($files->isDirectory($baseDirectory));
136
137
        $this->assertTrue($files->exists($directory));
138
        $this->assertTrue($files->isDirectory($directory));
139
140
        foreach ($filenames as $filename) {
141
            $this->assertFalse($files->exists($filename));
142
            $files->write($filename, 'random-data');
143
            $this->assertTrue($files->exists($filename));
144
        }
145
146
        $files->deleteDirectory($baseDirectory, true);
147
148
        $this->assertTrue($files->exists($baseDirectory));
149
        $this->assertTrue($files->isDirectory($baseDirectory));
150
151
        $this->assertFalse($files->exists($directory));
152
        $this->assertFalse($files->isDirectory($directory));
153
154
        foreach ($filenames as $filename) {
155
            $this->assertFalse($files->exists($filename));
156
        }
157
    }
158
159
    public function testDeleteDirectory(): void
160
    {
161
        $files = new Files();
162
        $baseDirectory = self::FIXTURE_DIRECTORY . 'directory/';
163
        $directory = $baseDirectory . 'sub/other';
164
165
        $filenames = [
166
            $baseDirectory . 'test.file',
167
            $directory . 'other.file',
168
            $directory . '.sample',
169
        ];
170
171
        $this->assertFalse($files->exists($baseDirectory));
172
        $this->assertFalse($files->isDirectory($baseDirectory));
173
174
        $this->assertFalse($files->exists($directory));
175
        $this->assertFalse($files->isDirectory($directory));
176
177
        $files->ensureDirectory($directory);
178
179
        $this->assertTrue($files->exists($baseDirectory));
180
        $this->assertTrue($files->isDirectory($baseDirectory));
181
182
        $this->assertTrue($files->exists($directory));
183
        $this->assertTrue($files->isDirectory($directory));
184
185
        foreach ($filenames as $filename) {
186
            $this->assertFalse($files->exists($filename));
187
            $files->write($filename, 'random-data');
188
            $this->assertTrue($files->exists($filename));
189
        }
190
191
        $files->deleteDirectory($baseDirectory, false);
192
193
        $this->assertFalse($files->exists($baseDirectory));
194
        $this->assertFalse($files->isDirectory($baseDirectory));
195
196
        $this->assertFalse($files->exists($directory));
197
        $this->assertFalse($files->isDirectory($directory));
198
199
        foreach ($filenames as $filename) {
200
            $this->assertFalse($files->exists($filename));
201
        }
202
    }
203
204
    public function testDeleteDirectoryButFile(): void
205
    {
206
        $this->expectException(FilesException::class);
207
208
        $files = new Files();
209
210
        $files->write(self::FIXTURE_DIRECTORY . 'test', 'data');
211
        $files->deleteDirectory(self::FIXTURE_DIRECTORY . 'test');
212
    }
213
214
    public function testGetFiles(): void
215
    {
216
        $files = new Files();
217
        $this->assertNotEmpty($files->getFiles(__DIR__));
218
    }
219
220
    public function testGetFilesRecursive(): void
221
    {
222
        $files = new Files();
223
        $this->assertNotEmpty($files->getFiles(dirname(__DIR__)));
224
    }
225
226
    public function testGetFilesPattern(): void
227
    {
228
        $files = new Files();
229
        $this->assertEmpty($files->getFiles(__DIR__, '*.jpg'));
230
    }
231
232
    public function testGetFilesRecursivePattern(): void
233
    {
234
        $files = new Files();
235
        $this->assertEmpty($files->getFiles(dirname(__DIR__), '*.jpg'));
236
        $this->assertNotEmpty($files->getFiles(dirname(__DIR__), '*.php'));
237
    }
238
}
239