FileSystemWriterTest::testCanContruct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 7
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 4
nc 1
nop 0
1
<?php
2
3
namespace Test\DiTesto\FileSystem;
4
5
use LazyEight\DiTesto\FileSystem\Exceptions\FileSystemException;
6
use LazyEight\DiTesto\FileSystem\Exceptions\InvalidPathException;
7
use LazyEight\DiTesto\FileSystem\FileSystemHandler;
8
use LazyEight\DiTesto\FileSystem\FileSystemPath;
9
use LazyEight\DiTesto\FileSystem\FileSystemWriter;
10
use PHPUnit\Framework\TestCase;
11
12
class FileSystemWriterTest extends TestCase
13
{
14
    /**
15
     * @var string
16
     */
17
    protected $file = './tests/files/urls.txt';
18
19
    /**
20
     * @var string
21
     */
22
    protected $path = './tests/files';
23
24
    /**
25
     * @var string
26
     */
27
    protected $newFilename = 'newFilename.txt';
28
29
    /**
30
     * @var string
31
     */
32
    protected $notReadable = './tests/files/urls_not_readable.txt';
33
34
    /**
35
     * @covers \LazyEight\DiTesto\FileSystem\FileSystemWriter::__construct
36
     * @uses \LazyEight\DiTesto\FileWriter
37
     */
38
    public function testCanContruct()
39
    {
40
        $newFilename = $this->path . '/' . $this->newFilename;
41
        $handler = new FileSystemWriter(new FileSystemPath($newFilename));
42
43
        $this->assertInstanceOf(FileSystemWriter::class, $handler);
44
    }
45
46
    /**
47
     * @covers \LazyEight\DiTesto\FileSystem\FileSystemWriter::__construct
48
     * @covers \LazyEight\DiTesto\FileSystem\FileSystemWriter::write
49
     * @covers \LazyEight\DiTesto\FileSystem\FileSystemWriter::validate
50
     * @covers \LazyEight\DiTesto\FileSystem\FileSystemWriter::validateWritableFile
51
     * @uses \LazyEight\DiTesto\FileWriter
52
     */
53
    public function testWriteNewFile()
54
    {
55
        $content = 'TEST';
56
        $newFilename = $this->path . '/' . $this->newFilename;
57
        $handler = new FileSystemWriter(new FileSystemPath($newFilename));
58
        $handler->write($content);
59
60
        $this->assertFileExists($newFilename);
61
    }
62
63
    /**
64
     * @covers \LazyEight\DiTesto\FileSystem\FileSystemWriter::isWritable
65
     * @uses \LazyEight\DiTesto\FileWriter
66
     */
67
    public function testIsWriteable()
68
    {
69
        $newFilename = $this->path . '/' . $this->newFilename;
70
71
        $handler = new FileSystemWriter(new FileSystemPath($newFilename));
72
        $errorHandler = new FileSystemWriter(new FileSystemPath($this->notReadable));
73
74
        $this->assertTrue($handler->isWritable());
75
        $this->assertFalse($errorHandler->isWritable());
76
    }
77
78
    /**
79
     * @covers \LazyEight\DiTesto\FileSystem\FileSystemWriter::validate
80
     * @covers \LazyEight\DiTesto\FileSystem\FileSystemWriter::validateIsDirectory
81
     * @covers \LazyEight\DiTesto\FileSystem\FileSystemWriter::isWritablePath
82
     * @covers \LazyEight\DiTesto\FileSystem\FileSystemWriter::validatePathIsWritable
83
     * @covers \LazyEight\DiTesto\FileSystem\FileSystemWriter::validateWritableFile
84
     * @expectedException \LazyEight\DiTesto\FileSystem\Exceptions\FileSystemException
85
     */
86
    public function testCantWrite()
87
    {
88
        $notReadableHandler = new FileSystemWriter(new FileSystemPath($this->notReadable));
89
        $pathHandler = new FileSystemWriter(new FileSystemPath($this->path));
90
91
        $this->expectException(FileSystemException::class);
92
        $notReadableHandler->write('TEST');
93
94
        $this->expectException(FileSystemException::class);
95
        $pathHandler->write('TEST');
96
    }
97
98
    /**
99
     * @covers \LazyEight\DiTesto\FileSystem\FileSystemWriter::validate
100
     * @covers \LazyEight\DiTesto\FileSystem\FileSystemWriter::validateIsDirectory
101
     * @covers \LazyEight\DiTesto\FileSystem\FileSystemWriter::isWritablePath
102
     * @covers \LazyEight\DiTesto\FileSystem\FileSystemWriter::validatePathIsWritable
103
     * @covers \LazyEight\DiTesto\FileSystem\FileSystemWriter::validateWritableFile
104
     * @expectedException \LazyEight\DiTesto\FileSystem\Exceptions\InvalidPathException
105
     */
106
    public function testCantWriteDirectory()
107
    {
108
        $pathHandler = new FileSystemWriter(new FileSystemPath($this->path));
109
110
        $this->expectException(InvalidPathException::class);
111
        $pathHandler->write('TEST');
112
    }
113
114
    /**
115
     * @covers \LazyEight\DiTesto\FileSystem\FileSystemWriter::validate
116
     * @covers \LazyEight\DiTesto\FileSystem\FileSystemWriter::validateIsDirectory
117
     * @covers \LazyEight\DiTesto\FileSystem\FileSystemWriter::validatePathIsWritable
118
     * @covers \LazyEight\DiTesto\FileSystem\FileSystemWriter::validateWritableFile
119
     * @covers \LazyEight\DiTesto\FileSystem\FileSystemWriter::isWritablePath
120
     * @expectedException \LazyEight\DiTesto\FileSystem\Exceptions\InvalidPathException
121
     */
122
    public function testCantWriteNoPermission()
123
    {
124
        $path = $this->path . '/' . 'newPath';
125
        mkdir($path);
126
        chmod($path, 0555);
127
128
        $newFilename = $path . '/' . $this->newFilename;
129
        $handler = new FileSystemWriter(new FileSystemPath($newFilename));
130
131
        $this->expectException(FileSystemException::class);
132
        $handler->write('TEST');
133
    }
134
135
    /**
136
     * @inheritDoc
137
     */
138
    public static function tearDownAfterClass()
139
    {
140
        $file = './tests/files/newFilename.txt';
141
        $newFilePath = './tests/files/newPath';
142
143
        if (file_exists($file)) {
144
            unlink($file);
145
        }
146
147
        if (file_exists($newFilePath)) {
148
            rmdir($newFilePath);
149
        }
150
151
        parent::tearDownAfterClass(); // TODO: Change the autogenerated stub
152
    }
153
}
154