Passed
Push — main ( 8161e3...71fa0f )
by Chema
04:11
created

ClassResolverCacheTest::tearDown()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 3
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 5
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
namespace GacelaTest\Unit\Framework\ClassResolver;
6
7
use Gacela\Framework\Bootstrap\GacelaConfig;
8
use Gacela\Framework\ClassResolver\Cache\InMemoryCache;
9
use Gacela\Framework\ClassResolver\ClassResolverCache;
10
use Gacela\Framework\Config\Config;
11
use Gacela\Framework\Gacela;
12
use PHPUnit\Framework\TestCase;
13
14
final class ClassResolverCacheTest extends TestCase
15
{
16
    protected function setUp(): void
17
    {
18
        ClassResolverCache::resetCache();
19
        InMemoryCache::resetCache();
20
        Config::resetInstance();
21
    }
22
23
    protected function tearDown(): void
24
    {
25
        ClassResolverCache::resetCache();
26
        InMemoryCache::resetCache();
27
        Config::resetInstance();
28
    }
29
30
    public function test_get_cache_returns_in_memory_cache_when_file_cache_is_disabled(): void
31
    {
32
        // Bootstrap with file cache disabled
33
        Gacela::bootstrap(__DIR__, static function (GacelaConfig $config): void {
34
            $config->resetInMemoryCache();
35
        });
36
37
        $cache = ClassResolverCache::getCache();
38
39
        self::assertInstanceOf(InMemoryCache::class, $cache);
40
    }
41
42
    public function test_get_cache_returns_same_instance_on_subsequent_calls(): void
43
    {
44
        Gacela::bootstrap(__DIR__, static function (GacelaConfig $config): void {
45
            $config->resetInMemoryCache();
46
        });
47
48
        $cache1 = ClassResolverCache::getCache();
49
        $cache2 = ClassResolverCache::getCache();
50
51
        // Should return the same cached instance
52
        self::assertSame($cache1, $cache2);
53
    }
54
55
    public function test_reset_cache_clears_cached_instance(): void
56
    {
57
        Gacela::bootstrap(__DIR__, static function (GacelaConfig $config): void {
58
            $config->resetInMemoryCache();
59
        });
60
61
        $cache1 = ClassResolverCache::getCache();
62
63
        ClassResolverCache::resetCache();
64
65
        $cache2 = ClassResolverCache::getCache();
66
67
        // After reset, should create a new instance (not the same object)
68
        self::assertNotSame($cache1, $cache2);
69
        self::assertInstanceOf(InMemoryCache::class, $cache2);
70
    }
71
72
    public function test_cache_can_store_and_retrieve_values(): void
73
    {
74
        Gacela::bootstrap(__DIR__, static function (GacelaConfig $config): void {
75
            $config->resetInMemoryCache();
76
        });
77
78
        $cache = ClassResolverCache::getCache();
79
80
        $cache->put('test-key', 'TestClassName');
81
82
        self::assertTrue($cache->has('test-key'));
83
        self::assertSame('TestClassName', $cache->get('test-key'));
84
    }
85
86
    public function test_cache_has_returns_false_for_non_existent_key(): void
87
    {
88
        Gacela::bootstrap(__DIR__, static function (GacelaConfig $config): void {
89
            $config->resetInMemoryCache();
90
        });
91
92
        $cache = ClassResolverCache::getCache();
93
94
        self::assertFalse($cache->has('non-existent-key'));
95
    }
96
97
    public function test_multiple_cache_operations(): void
98
    {
99
        Gacela::bootstrap(__DIR__, static function (GacelaConfig $config): void {
100
            $config->resetInMemoryCache();
101
        });
102
103
        $cache = ClassResolverCache::getCache();
104
105
        // Store multiple values
106
        $cache->put('key1', 'ClassName1');
107
        $cache->put('key2', 'ClassName2');
108
        $cache->put('key3', 'ClassName3');
109
110
        // Verify all values
111
        self::assertTrue($cache->has('key1'));
112
        self::assertTrue($cache->has('key2'));
113
        self::assertTrue($cache->has('key3'));
114
        self::assertSame('ClassName1', $cache->get('key1'));
115
        self::assertSame('ClassName2', $cache->get('key2'));
116
        self::assertSame('ClassName3', $cache->get('key3'));
117
    }
118
119
    public function test_cache_persists_across_multiple_get_cache_calls(): void
120
    {
121
        Gacela::bootstrap(__DIR__, static function (GacelaConfig $config): void {
122
            $config->resetInMemoryCache();
123
        });
124
125
        $cache1 = ClassResolverCache::getCache();
126
        $cache1->put('persistent-key', 'PersistentClass');
127
128
        // Get cache again (should be same instance)
129
        $cache2 = ClassResolverCache::getCache();
130
131
        // Value should still be there
132
        self::assertTrue($cache2->has('persistent-key'));
133
        self::assertSame('PersistentClass', $cache2->get('persistent-key'));
134
    }
135
136
    public function test_reset_cache_clears_stored_values(): void
137
    {
138
        Gacela::bootstrap(__DIR__, static function (GacelaConfig $config): void {
139
            $config->resetInMemoryCache();
140
        });
141
142
        $cache = ClassResolverCache::getCache();
143
        $cache->put('temp-key', 'TempClass');
144
145
        self::assertTrue($cache->has('temp-key'));
146
147
        // Reset should clear everything
148
        ClassResolverCache::resetCache();
149
        InMemoryCache::resetCache();
150
151
        $newCache = ClassResolverCache::getCache();
152
153
        // Old key should not exist in new cache
154
        self::assertFalse($newCache->has('temp-key'));
155
    }
156
}
157