Completed
Push — master ( 3f89cd...b2545f )
by Divine Niiquaye
02:08
created

SimpleCacheTest::testMultiples()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 38
Code Lines 25

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 25
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 38
rs 9.52
1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * This file is part of BiuradPHP opensource projects.
7
 *
8
 * PHP version 7.1 and above required
9
 *
10
 * @author    Divine Niiquaye Ibok <[email protected]>
11
 * @copyright 2019 Biurad Group (https://biurad.com/)
12
 * @license   https://opensource.org/licenses/BSD-3-Clause License
13
 *
14
 * For the full copyright and license information, please view the LICENSE
15
 * file that was distributed with this source code.
16
 */
17
18
namespace BiuradPHP\Cache\Tests;
19
20
use __PHP_Incomplete_Class;
21
use ArrayIterator;
22
use BadMethodCallException;
23
use BiuradPHP\Cache\CacheItem;
24
use BiuradPHP\Cache\SimpleCache;
25
use Doctrine\Common\Cache\ArrayCache;
26
use Doctrine\Common\Cache\FilesystemCache;
27
use Exception;
28
use Generator;
29
use PHPUnit\Framework\TestCase;
30
use Psr\SimpleCache\CacheInterface;
31
use Psr\SimpleCache\InvalidArgumentException;
32
use Traversable;
33
34
/**
35
 * @internal
36
 */
37
class SimpleCacheTest extends TestCase
38
{
39
    /** @var SimpleCache */
40
    private $cache;
41
42
    protected function setUp(): void
43
    {
44
        parent::setUp();
45
46
        $pool        = new ArrayCache();
47
        $this->cache = new SimpleCache($pool);
48
    }
49
50
    /**
51
     * @throws InvalidArgumentException
52
     */
53
    public function testProvider(): void
54
    {
55
        $cache = $this->cache;
56
57
        self::assertInstanceOf(CacheInterface::class, $cache);
58
59
        $key = CacheItem::RESERVED_CHARACTERS;
60
61
        self::assertTrue($cache->delete($key));
62
        self::assertFalse($cache->has($key));
63
64
        self::assertTrue($cache->set($key, 'bar'));
65
        self::assertTrue($cache->has($key));
66
        self::assertSame('bar', $cache->get($key));
67
68
        self::assertTrue($cache->delete($key));
69
        self::assertNull($cache->get($key));
70
        self::assertTrue($cache->set($key, 'bar'));
71
72
        $cache->clear();
73
        self::assertNull($cache->get($key));
74
        self::assertFalse($cache->has($key));
75
    }
76
77
    /**
78
     * @throws InvalidArgumentException
79
     */
80
    public function testNullProviderMultiples(): void
81
    {
82
        $data = [
83
            'foo'                          => 'baz',
84
            CacheItem::RESERVED_CHARACTERS => 'bar',
85
        ];
86
        $cache = new SimpleCache(new Fixtures\NullAdapterTest());
87
88
        self::assertTrue($cache->deleteMultiple(
89
            new ArrayIterator(['foo', 'empty', CacheItem::RESERVED_CHARACTERS])
90
        ));
91
        self::assertFalse($cache->has('foo'));
92
        self::assertFalse($cache->has(CacheItem::RESERVED_CHARACTERS));
93
94
        self::assertTrue($cache->setMultiple(new ArrayIterator($data)));
95
        self::assertTrue($cache->has('foo'));
96
        self::assertTrue($cache->has(CacheItem::RESERVED_CHARACTERS));
97
98
        $foundMultiple = $cache->getMultiple(new ArrayIterator(['foo', CacheItem::RESERVED_CHARACTERS]));
99
        self::assertInstanceOf(Traversable::class, $foundMultiple);
100
        self::assertSame($data, \iterator_to_array($foundMultiple));
101
102
        $cache->clear();
103
    }
104
105
    /**
106
     * @throws InvalidArgumentException
107
     */
108
    public function testMultiples(): void
109
    {
110
        $data = [
111
            'foo'                          => 'baz',
112
            CacheItem::RESERVED_CHARACTERS => 'bar',
113
        ];
114
        $cache = $this->cache;
115
116
        self::assertTrue($cache->deleteMultiple(
117
            new ArrayIterator(['foo', CacheItem::RESERVED_CHARACTERS])
118
        ));
119
        self::assertFalse($cache->has('foo'));
120
        self::assertFalse($cache->has(CacheItem::RESERVED_CHARACTERS));
121
122
        self::assertTrue($cache->setMultiple(new ArrayIterator($data)));
123
        self::assertTrue($cache->has('foo'));
124
        self::assertTrue($cache->has(CacheItem::RESERVED_CHARACTERS));
125
126
        $foundMultiple = $cache->getMultiple(new ArrayIterator(['foo', CacheItem::RESERVED_CHARACTERS]));
127
        self::assertInstanceOf(Generator::class, $foundMultiple);
128
        self::assertSame($data, $foundMultiple->getReturn());
129
130
        self::assertTrue($cache->deleteMultiple(new ArrayIterator(['foo', CacheItem::RESERVED_CHARACTERS])));
131
132
        $foundMultiple = $cache->getMultiple(new ArrayIterator(['foo', CacheItem::RESERVED_CHARACTERS]));
133
        self::assertEmpty($foundMultiple->getReturn());
134
135
        self::assertTrue($cache->setMultiple(new ArrayIterator($data)));
136
137
        $cache->clear();
138
        $foundMultiple = $cache->getMultiple(new ArrayIterator(['foo', CacheItem::RESERVED_CHARACTERS]));
139
        self::assertEmpty($foundMultiple->getReturn());
140
141
        self::assertFalse($cache->has('foo'));
142
        self::assertFalse($cache->has(CacheItem::RESERVED_CHARACTERS));
143
144
        $this->expectException(InvalidArgumentException::class);
145
        $cache->getMultiple(null)->getReturn();
146
    }
147
148
    /**
149
     * @throws InvalidArgumentException
150
     */
151
    public function testNotUnserializable(): void
152
    {
153
        $cache = new SimpleCache(new FilesystemCache(__DIR__ . '/caches'));
154
        $cache->clear();
155
156
        $cache->set('foo', new Fixtures\NotUnserializableTest());
157
158
        $this->expectException(Exception::class);
159
        self::assertNull($cache->get('foo'));
160
    }
161
162
    public function testSerialization(): void
163
    {
164
        $this->expectException(BadMethodCallException::class);
165
        $cache = \serialize($this->cache);
166
        self::assertInstanceOf(__PHP_Incomplete_Class::class, $cache);
167
        self::assertInstanceOf(SimpleCache::class, $cache = \unserialize($cache));
168
    }
169
}
170