Passed
Branch master (f6ba96)
by Joao
03:04
created

CachePSR6Test::testTtl()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 42

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 42
rs 9.248
c 0
b 0
f 0
cc 3
nc 3
nop 1
1
<?php
2
3
namespace Test;
4
5
use ByJG\Cache\Psr16\BaseCacheEngine;
6
use ByJG\Cache\Psr6\CachePool;
7
use DateInterval;
8
9
require_once 'BaseCacheTest.php';
10
11
class CachePSR6Test extends BaseCacheTest
12
{
13
    /**
14
     * @dataProvider CachePoolProvider
15
     * @param \ByJG\Cache\Psr16\BaseCacheEngine $cacheEngine
16
     * @throws \Psr\SimpleCache\InvalidArgumentException
17
     */
18
    public function testGetOneItem(BaseCacheEngine $cacheEngine)
19
    {
20
        $this->cacheEngine = $cacheEngine;
21
22
        $object = new CachePool($cacheEngine);
23
        if ($object->isAvailable()) {
24
            // First time
25
            $item = $object->getItem('chave');
26
            $this->assertFalse($item->isHit());
27
28
            // Set object
29
            $item->set('valor');
30
            $object->save($item);
31
            $this->assertTrue($item->isHit());
32
33
            // Get Object
34
            $item2 = $object->getItem('chave');
35
            $this->assertTrue($item2->isHit());
36
            $this->assertEquals('valor', $item2->get());
37
38
            // Remove
39
            $object->deleteItem('chave');
40
41
            // Check Removed
42
            $item = $object->getItem('chave');
43
            $this->assertFalse($item->isHit());
44
        } else {
45
            $this->markTestIncomplete('Object is not fully functional');
46
        }
47
    }
48
49
    /**
50
     * @dataProvider CachePoolProvider
51
     * @param \ByJG\Cache\Psr16\BaseCacheEngine $cacheEngine
52
     * @throws \Psr\SimpleCache\InvalidArgumentException
53
     */
54
    public function testGetMultipleItems(BaseCacheEngine $cacheEngine)
55
    {
56
        $this->cacheEngine = $cacheEngine;
57
58
        $object = new CachePool($cacheEngine);
59
        if ($object->isAvailable()) {
60
            // First time
61
            $items = $object->getItems(['chave1', 'chave2']);
62
            $this->assertFalse($items[0]->isHit());
63
            $this->assertFalse($items[1]->isHit());
64
65
            // Set object
66
            $items[0]->set('valor1');
67
            $items[1]->set('valor2');
68
            $object->saveDeferred($items[0]);
69
            $object->saveDeferred($items[1]);
70
            $object->commit();
71
            $this->assertTrue($items[0]->isHit());
72
            $this->assertTrue($items[1]->isHit());
73
74
            // Get Object
75
            $item2 = $object->getItems(['chave1', 'chave2']);
76
            $this->assertTrue($item2[0]->isHit());
77
            $this->assertTrue($item2[1]->isHit());
78
            $this->assertEquals('valor1', $item2[0]->get());
79
            $this->assertEquals('valor2', $item2[1]->get());
80
81
            // Remove
82
            $object->deleteItems(['chave1', 'chave2']);
83
84
            // Check Removed
85
            $items = $object->getItems(['chave1', 'chave2']);
86
            $this->assertFalse($items[0]->isHit());
87
            $this->assertFalse($items[1]->isHit());
88
        } else {
89
            $this->markTestIncomplete('Object is not fully functional');
90
        }
91
    }
92
93
    /**
94
     * @dataProvider CachePoolProvider
95
     * @param \ByJG\Cache\Psr16\BaseCacheEngine $cacheEngine
96
     * @throws \Psr\SimpleCache\InvalidArgumentException
97
     */
98
    public function testTtl(BaseCacheEngine $cacheEngine)
99
    {
100
        $timeList = [
101
            2,
102
            DateInterval::createFromDateString("2 seconds")
103
        ];
104
105
        foreach ($timeList as $time) {
106
            $this->cacheEngine = $cacheEngine;
107
108
            $object = new CachePool($cacheEngine);
109
            if ($object->isAvailable()) {
110
                // First time
111
                $item = $object->getItem('chave');
112
                $this->assertFalse($item->isHit());
113
114
                // Set object
115
                $item->set('valor');
116
                $item->expiresAfter($time);
117
                $object->save($item);
118
                $this->assertTrue($item->isHit());
119
120
                // Get Object
121
                $item2 = $object->getItem('chave');
122
                $this->assertTrue($item2->isHit());
123
                $this->assertEquals('valor', $item2->get());
124
                sleep(3);
125
                $item3 = $object->getItem('chave');
126
                $this->assertFalse($item3->isHit());
127
                $this->assertEquals(null, $item3->get());
128
129
                // Remove
130
                $object->deleteItem('chave');
131
132
                // Check Removed
133
                $item = $object->getItem('chave');
134
                $this->assertFalse($item->isHit());
135
            } else {
136
                $this->markTestIncomplete('Object is not fully functional');
137
            }
138
        }
139
    }
140
141
    /**
142
     * @dataProvider CachePoolProvider
143
     * @param \ByJG\Cache\Psr16\BaseCacheEngine $cacheEngine
144
     * @throws \Psr\SimpleCache\InvalidArgumentException
145
     */
146
    public function testCacheObject(BaseCacheEngine $cacheEngine)
147
    {
148
        $this->cacheEngine = $cacheEngine;
149
150
        $object = new CachePool($cacheEngine);
151
        if ($object->isAvailable()) {
152
            // First time
153
            $item = $object->getItem('chave');
154
            $this->assertFalse($item->isHit());
155
156
            // Set object
157
            $model = new Model(10, 20);
158
            $item->set($model);
159
            $object->save($item);
160
            $this->assertTrue($item->isHit());
161
162
            // Get Object
163
            $item2 = $object->getItem('chave');
164
            $this->assertTrue($item2->isHit());
165
            $this->assertEquals($model, $item2->get());
166
167
            // Remove
168
            $object->deleteItem('chave');
169
170
            // Check Removed
171
            $item = $object->getItem('chave');
172
            $this->assertFalse($item->isHit());
173
        } else {
174
            $this->markTestIncomplete('Object is not fully functional');
175
        }
176
    }
177
}
178