Passed
Push — master ( 7c550d...37ffb9 )
by Petr
02:16
created

MemoryTest::testLookup()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 52
Code Lines 39

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 39
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 52
rs 9.296

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
namespace StorageTests;
4
5
6
use CommonTestClass;
7
use kalanis\kw_storage\Storage\Target;
8
use kalanis\kw_storage\StorageException;
9
10
11
class MemoryTest extends CommonTestClass
12
{
13
    public function tearDown(): void
14
    {
15
        $this->rmFile($this->mockTestFile('', false));
16
        $this->rmDir($this->mockTestFile('', false));
17
        parent::tearDown();
18
    }
19
20
    /**
21
     * @throws StorageException
22
     */
23
    public function testExists(): void
24
    {
25
        $memory = new Target\Memory();
26
        $this->assertTrue($memory->check($this->getTestDir()));
27
        $this->assertFalse($memory->exists($this->mockTestFile()));
28
        $this->expectException(StorageException::class);
29
        $memory->load($this->mockTestFile());
30
    }
31
32
    /**
33
     * @throws StorageException
34
     */
35
    public function testOperations(): void
36
    {
37
        $memory = new Target\Memory();
38
        $this->assertFalse($memory->exists($this->mockTestFile()));
39
        $this->assertTrue($memory->save($this->mockTestFile(), 'asdfghjklpoiuztrewqyxcvbnm'));
40
        $this->assertTrue($memory->exists($this->mockTestFile()));
41
        $this->assertEquals('asdfghjklpoiuztrewqyxcvbnm', $memory->load($this->mockTestFile()));
42
        $this->assertTrue($memory->remove($this->mockTestFile()));
43
        $this->assertFalse($memory->exists($this->mockTestFile()));
44
    }
45
46
    /**
47
     * @throws StorageException
48
     */
49
    public function testLookup(): void
50
    {
51
        $memory = new Target\Memory();
52
        $this->assertTrue($memory->check($this->getTestDir()));
53
        $testFiles = [
54
            'dummyFile.tst' => $this->getTestDir() . 'dummyFile.tst',
55
            'dummyFile.0.tst' => $this->getTestDir() . 'dummyFile.0.tst',
56
            'dummyFile.1.tst' => $this->getTestDir() . 'dummyFile.1.tst',
57
            'dummyFile.2.tst' => $this->getTestDir() . 'dummyFile.2.tst',
58
        ];
59
        $removal = $memory->removeMulti($testFiles);
60
        $this->assertEquals([
61
            'dummyFile.tst' => false,
62
            'dummyFile.0.tst' => false,
63
            'dummyFile.1.tst' => false,
64
            'dummyFile.2.tst' => false,
65
        ], $removal);
66
67
        $memory->save($this->getTestDir() . 'dummyFile.tst', 'asdfghjklqwertzuiopyxcvbnm');
68
        $memory->save($this->getTestDir() . 'dummyFile.0.tst', 'asdfghjklqwertzuiopyxcvbnm');
69
        $memory->save($this->getTestDir() . 'dummyFile.1.tst', 'asdfghjklqwertzuiopyxcvbnm');
70
        $memory->save($this->getTestDir() . 'dummyFile.2.tst', 'asdfghjklqwertzuiopyxcvbnm');
71
72
        // non-existent path
73
        $this->assertEquals(0, count(array_filter(iterator_to_array($memory->lookup('this path does not exists')), [$this, 'dotDirs'])));
74
75
        // empty path - must show everything
76
        $this->assertEquals(4, count(array_filter(iterator_to_array($memory->lookup('')), [$this, 'dotDirs'])));
77
78
        // normal path
79
        $files = iterator_to_array($memory->lookup($this->getTestDir()));
80
        sort($files);
81
        $files = array_filter($files, [$this, 'dotDirs']);
82
83
        $this->assertEquals(count($testFiles), count($files));
84
        $this->assertEquals('dummyFile.0.tst', reset($files));
85
        $this->assertEquals('dummyFile.1.tst', next($files));
86
        $this->assertEquals('dummyFile.2.tst', next($files));
87
        $this->assertEquals('dummyFile.tst', next($files));
88
89
        $removal = $memory->removeMulti($testFiles);
90
        $this->assertFalse($memory->exists($this->getTestDir() . 'dummyFile.tst'));
91
        $this->assertFalse($memory->exists($this->getTestDir() . 'dummyFile.0.tst'));
92
        $this->assertFalse($memory->exists($this->getTestDir() . 'dummyFile.1.tst'));
93
        $this->assertFalse($memory->exists($this->getTestDir() . 'dummyFile.2.tst'));
94
95
        $this->assertEquals([
96
            'dummyFile.tst' => true,
97
            'dummyFile.0.tst' => true,
98
            'dummyFile.1.tst' => true,
99
            'dummyFile.2.tst' => true,
100
        ], $removal);
101
    }
102
103
    public function dotDirs(string $path): bool
104
    {
105
        return !in_array($path, ['.', '..']);
106
    }
107
108
    /**
109
     * @throws StorageException
110
     */
111
    public function testSimpleCounter(): void
112
    {
113
        $memory = new Target\Memory();
114
        $this->assertFalse($memory->exists($this->mockTestFile()));
115
        $this->assertTrue($memory->save($this->mockTestFile(), 15));
116
        $this->assertTrue($memory->decrement($this->mockTestFile()));
117
        $this->assertTrue($memory->decrement($this->mockTestFile()));
118
        $this->assertTrue($memory->increment($this->mockTestFile()));
119
        $this->assertEquals(14, $memory->load($this->mockTestFile()));
120
        $this->assertTrue($memory->remove($this->mockTestFile()));
121
        $this->assertFalse($memory->exists($this->mockTestFile()));
122
    }
123
124
    /**
125
     * @throws StorageException
126
     */
127
    public function testHarderCounter(): void
128
    {
129
        $memory = new Target\Memory();
130
        $this->assertFalse($memory->exists($this->mockTestFile()));
131
        $this->assertTrue($memory->decrement($this->mockTestFile()));
132
        $this->assertTrue($memory->increment($this->mockTestFile()));
133
        $this->assertEquals(1, $memory->load($this->mockTestFile()));
134
        $this->assertTrue($memory->remove($this->mockTestFile()));
135
        $this->assertTrue($memory->increment($this->mockTestFile()));
136
        $this->assertTrue($memory->decrement($this->mockTestFile()));
137
        $this->assertEquals(0, $memory->load($this->mockTestFile()));
138
        $this->assertTrue($memory->remove($this->mockTestFile()));
139
        $this->assertFalse($memory->exists($this->mockTestFile()));
140
    }
141
}
142