Passed
Push — attributes ( d4959e...6cfdd6 )
by Peter
03:00
created

AssetManagerBootstrapperTest::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 AbterPhp\Framework\Bootstrappers\Assets;
6
7
use AbterPhp\Framework\Assets\AssetManager;
8
use AbterPhp\Framework\Assets\CacheManager\ICacheManager;
9
use AbterPhp\Framework\Assets\UrlFixer;
10
use AbterPhp\Framework\Config\Routes;
11
use AbterPhp\Framework\Constant\Env;
12
use AbterPhp\Framework\Environments\Environment;
13
use AbterPhp\Framework\Filesystem\FileFinder;
14
use Opulence\Ioc\Container;
15
use Opulence\Views\Compilers\Fortune\ITranspiler;
16
use PHPUnit\Framework\MockObject\MockObject;
17
use PHPUnit\Framework\TestCase;
18
19
class AssetManagerBootstrapperTest extends TestCase
20
{
21
    /** @var AssetManagerBootstrapper - System Under Test */
22
    protected AssetManagerBootstrapper $sut;
23
24
    /** @var ITranspiler|MockObject */
25
    protected $transpilerMock;
26
27
    public function setUp(): void
28
    {
29
        Environment::setVar(Env::DIR_MEDIA, '/media');
30
        Environment::setVar(Env::CACHE_BASE_PATH, '/cache');
31
        Environment::setVar(Env::ENV_NAME, 'foo');
32
33
        $this->sut = new AssetManagerBootstrapper();
34
35
        $this->transpilerMock = $this->getMockBuilder(ITranspiler::class)->getMock();
36
    }
37
38
    public function testRegisterBindingsBindsAnAssetManager(): void
39
    {
40
        $fileFinderMock   = $this->createMock(FileFinder::class);
41
        $cacheManagerMock = $this->createMock(ICacheManager::class);
42
        $urlFixerMock     = $this->getMockBuilder(UrlFixer::class)->disableOriginalConstructor()->getMock();
43
        $routesMock       = $this->createMock(Routes::class);
44
45
        $container = new Container();
46
        $container->bindInstance(FileFinder::class, $fileFinderMock);
47
        $container->bindInstance(ICacheManager::class, $cacheManagerMock);
48
        $container->bindInstance(UrlFixer::class, $urlFixerMock);
49
        $container->bindInstance(ITranspiler::class, $this->transpilerMock);
50
        $container->bindInstance(Routes::class, $routesMock);
51
52
        $this->transpilerMock->expects($this->exactly(3))->method('registerViewFunction');
53
54
        $this->sut->registerBindings($container);
55
56
        $actual = $container->resolve(AssetManager::class);
57
        $this->assertInstanceOf(AssetManager::class, $actual);
58
    }
59
60
    public function testCreateAssetJsViewFunctionSimple(): void
61
    {
62
        $keyStub     = 'foo';
63
        $webPathStub = 'baz';
64
65
        $assetManagerMock = $this->getMockBuilder(AssetManager::class)->disableOriginalConstructor()->getMock();
66
        $assetManagerMock->expects($this->once())->method('ensureJsWebPath')->with($keyStub)->willReturn($webPathStub);
67
68
        $actual = $this->sut->createAssetJsViewFunction($assetManagerMock)([$keyStub]);
69
        $this->assertSame("<script src=\"$webPathStub\"></script>\n", $actual);
70
    }
71
72
    public function testCreateAssetJsViewFunctionEmpty(): void
73
    {
74
        $keyStub     = 'foo';
75
        $webPathStub = '';
76
77
        $assetManagerMock = $this->getMockBuilder(AssetManager::class)->disableOriginalConstructor()->getMock();
78
        $assetManagerMock->expects($this->once())->method('ensureJsWebPath')->with($keyStub)->willReturn($webPathStub);
79
80
        $actual = $this->sut->createAssetJsViewFunction($assetManagerMock)([$keyStub]);
81
        $this->assertSame('', $actual);
82
    }
83
84
    public function testCreateAssetJsViewFunctionCustomType(): void
85
    {
86
        $keyStub     = 'foo';
87
        $typeStub    = 'bar';
88
        $webPathStub = 'baz';
89
90
        $assetManagerMock = $this->getMockBuilder(AssetManager::class)->disableOriginalConstructor()->getMock();
91
        $assetManagerMock->expects($this->once())->method('ensureJsWebPath')->with($keyStub)->willReturn($webPathStub);
92
93
        $actual = $this->sut->createAssetJsViewFunction($assetManagerMock)([$keyStub], $typeStub);
94
        $this->assertSame("<script type=\"$typeStub\" src=\"$webPathStub\"></script>\n", $actual);
95
    }
96
97
    public function testCreateAssetJsViewFunctionMultiple(): void
98
    {
99
        $keyStub1     = 'foo';
100
        $keyStub2     = 'bar';
101
        $webPathStub1 = 'baz';
102
        $webPathStub2 = 'quix';
103
104
        $assetManagerMock = $this->getMockBuilder(AssetManager::class)->disableOriginalConstructor()->getMock();
105
        $assetManagerMock
106
            ->expects($this->exactly(2))
107
            ->method('ensureJsWebPath')
108
            ->withConsecutive([$keyStub1], [$keyStub2])
109
            ->willReturnOnConsecutiveCalls($webPathStub1, $webPathStub2);
110
111
        $actual = $this->sut->createAssetJsViewFunction($assetManagerMock)([$keyStub1, $keyStub2]);
112
        $this->assertStringContainsString("<script src=\"$webPathStub1\"></script>", $actual);
113
        $this->assertStringContainsString("<script src=\"$webPathStub2\"></script>", $actual);
114
    }
115
116
    public function testCreateAssetCssViewFunctionSimple(): void
117
    {
118
        $keyStub     = 'foo';
119
        $webPathStub = 'baz';
120
121
        $assetManagerMock = $this->getMockBuilder(AssetManager::class)->disableOriginalConstructor()->getMock();
122
        $assetManagerMock->expects($this->once())->method('ensureCssWebPath')->with($keyStub)->willReturn($webPathStub);
123
124
        $actual = $this->sut->createAssetCssViewFunction($assetManagerMock)([$keyStub]);
125
        $this->assertSame("<link href=\"$webPathStub\" rel=\"stylesheet\">\n", $actual);
126
    }
127
128
    public function testCreateAssetCssViewFunctionEmpty(): void
129
    {
130
        $keyStub     = 'foo';
131
        $webPathStub = '';
132
133
        $assetManagerMock = $this->getMockBuilder(AssetManager::class)->disableOriginalConstructor()->getMock();
134
        $assetManagerMock->expects($this->once())->method('ensureCssWebPath')->with($keyStub)->willReturn($webPathStub);
135
136
        $actual = $this->sut->createAssetCssViewFunction($assetManagerMock)([$keyStub]);
137
        $this->assertSame('', $actual);
138
    }
139
140
    public function testCreateAssetCssViewFunctionMultiple(): void
141
    {
142
        $keyStub1     = 'foo';
143
        $keyStub2     = 'bar';
144
        $webPathStub1 = 'baz';
145
        $webPathStub2 = 'quix';
146
147
        $assetManagerMock = $this->getMockBuilder(AssetManager::class)->disableOriginalConstructor()->getMock();
148
        $assetManagerMock
149
            ->expects($this->exactly(2))
150
            ->method('ensureCssWebPath')
151
            ->withConsecutive([$keyStub1], [$keyStub2])
152
            ->willReturnOnConsecutiveCalls($webPathStub1, $webPathStub2);
153
154
        $actual = $this->sut->createAssetCssViewFunction($assetManagerMock)([$keyStub1, $keyStub2]);
155
        $this->assertStringContainsString("<link href=\"$webPathStub1\" rel=\"stylesheet\">", $actual);
156
        $this->assertStringContainsString("<link href=\"$webPathStub2\" rel=\"stylesheet\">", $actual);
157
    }
158
159
    public function testCreateAssetImgViewFunction(): void
160
    {
161
        $keyStub     = 'foo';
162
        $altStub     = 'bar';
163
        $webPathStub = 'baz';
164
165
        $assetManagerMock = $this->getMockBuilder(AssetManager::class)->disableOriginalConstructor()->getMock();
166
        $assetManagerMock->expects($this->once())->method('ensureImgWebPath')->with($keyStub)->willReturn($webPathStub);
167
168
        $actual = $this->sut->createAssetImgViewFunction($assetManagerMock)($keyStub, $altStub);
169
        $this->assertSame("<img src=\"$webPathStub\" alt=\"$altStub\">\n", $actual);
170
    }
171
}
172