Skip to content

Commit c293e99

Browse files
committed
Add PhpExtensionsDetectorTest!!!
1 parent f99bdf0 commit c293e99

File tree

2 files changed

+292
-3
lines changed

2 files changed

+292
-3
lines changed

src/Detectors/PhpExtensionsDetector.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public function supported(array $supported = null): self|array
2020
return $this;
2121
}
2222

23-
public function detect(): string|false
23+
public function detect(): string
2424
{
2525
$extensions = [
2626
$this->getDefaultExtensions(),
@@ -44,15 +44,15 @@ public function detect(): string|false
4444
/**
4545
* @return string[]
4646
*/
47-
private function getDefaultExtensions(): array
47+
public function getDefaultExtensions(): array
4848
{
4949
return ['bcmath'];
5050
}
5151

5252
/**
5353
* @return string[]
5454
*/
55-
private function getCacheExtensions(): array
55+
public function getCacheExtensions(): array
5656
{
5757
$store = config('cache.default');
5858
$driver = config("cache.stores.$store.driver");
Lines changed: 289 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,289 @@
1+
<?php
2+
3+
namespace BlameButton\LaravelDockerBuilder\Tests\Unit\Detectors;
4+
5+
use BlameButton\LaravelDockerBuilder\Detectors\PhpExtensionsDetector;
6+
use BlameButton\LaravelDockerBuilder\Tests\TestCase;
7+
8+
/**
9+
* @uses \BlameButton\LaravelDockerBuilder\DockerServiceProvider
10+
*
11+
* @covers \BlameButton\LaravelDockerBuilder\Detectors\PhpExtensionsDetector
12+
*/
13+
class PhpExtensionsDetectorTest extends TestCase
14+
{
15+
protected function setUp(): void
16+
{
17+
parent::setUp();
18+
19+
$this->app->bind(PhpExtensionsDetector::class, function () {
20+
$supported = [
21+
'apcu',
22+
'bcmath',
23+
'memcached',
24+
'pdo_mysql',
25+
'pdo_pgsql',
26+
'pdo_sqlsrv',
27+
'redis',
28+
'sqlsrv',
29+
];
30+
31+
return (new PhpExtensionsDetector())
32+
->supported($supported);
33+
});
34+
}
35+
36+
public function provideConfigurations(): array
37+
{
38+
return [
39+
[
40+
'1',
41+
[
42+
'cache.default' => 'array',
43+
'cache.stores.array.driver' => 'array',
44+
'cache.stores.redis.driver' => 'redis',
45+
'database.default' => 'sqlite',
46+
'database.connections.sqlite.driver' => 'sqlite',
47+
'broadcasting.default' => 'log',
48+
'broadcasting.connections.log.driver' => 'log',
49+
'queue.default' => 'sync',
50+
'queue.connections.sync.driver' => 'sync',
51+
'session.driver' => 'array',
52+
],
53+
],
54+
[
55+
'0,1',
56+
[
57+
'cache.default' => 'apc',
58+
'cache.stores.apc.driver' => 'apc',
59+
'database.default' => 'sqlite',
60+
'database.connections.sqlite.driver' => 'sqlite',
61+
'broadcasting.default' => 'log',
62+
'broadcasting.connections.log.driver' => 'log',
63+
'queue.default' => 'sync',
64+
'queue.connections.sync.driver' => 'sync',
65+
'session.driver' => 'apc',
66+
],
67+
],
68+
[
69+
'1,6',
70+
[
71+
'cache.default' => 'array',
72+
'cache.stores.array.driver' => 'array',
73+
'database.default' => 'sqlite',
74+
'database.connections.sqlite.driver' => 'sqlite',
75+
'broadcasting.default' => 'log',
76+
'broadcasting.connections.log.driver' => 'log',
77+
'queue.default' => 'redis',
78+
'queue.connections.redis.driver' => 'redis',
79+
'session.driver' => 'array',
80+
],
81+
],
82+
[
83+
'1,6',
84+
[
85+
'cache.default' => 'array',
86+
'cache.stores.array.driver' => 'array',
87+
'database.default' => 'sqlite',
88+
'database.connections.sqlite.driver' => 'sqlite',
89+
'broadcasting.default' => 'redis',
90+
'broadcasting.connections.redis.driver' => 'redis',
91+
'queue.default' => 'sync',
92+
'queue.connections.redis.driver' => 'sync',
93+
'session.driver' => 'array',
94+
],
95+
],
96+
[
97+
'0,1,3',
98+
[
99+
'cache.default' => 'apc',
100+
'cache.stores.apc.driver' => 'apc',
101+
'database.default' => 'mysql',
102+
'database.connections.mysql.driver' => 'mysql',
103+
'broadcasting.default' => 'log',
104+
'broadcasting.connections.log.driver' => 'log',
105+
'queue.default' => 'sync',
106+
'queue.connections.sync.driver' => 'sync',
107+
'session.driver' => 'apc',
108+
],
109+
],
110+
[
111+
'1,2,5,6,7',
112+
[
113+
'cache.default' => 'memcached',
114+
'cache.stores.memcached.driver' => 'memcached',
115+
'cache.stores.redis.driver' => 'redis',
116+
'database.default' => 'sqlsrv',
117+
'database.connections.sqlsrv.driver' => 'sqlsrv',
118+
'broadcasting.default' => 'log',
119+
'broadcasting.connections.log.driver' => 'log',
120+
'queue.default' => 'sync',
121+
'queue.connections.sync.driver' => 'sync',
122+
'session.driver' => 'redis',
123+
],
124+
],
125+
];
126+
}
127+
128+
/** @dataProvider provideConfigurations */
129+
public function testItDetectsExtensionsWithoutDuplicates(string $expected, array $config): void
130+
{
131+
config()->set($config);
132+
133+
$detected = app(PhpExtensionsDetector::class)->detect();
134+
135+
self::assertEquals($expected, $detected);
136+
137+
}
138+
139+
public function testItReturnsDefaultExtensions(): void
140+
{
141+
$detected = app(PhpExtensionsDetector::class)->getDefaultExtensions();
142+
143+
self::assertEquals(['bcmath'], $detected);
144+
}
145+
146+
public function provideCacheConfigurations(): array
147+
{
148+
return [
149+
'apc' => [
150+
['apcu'],
151+
['cache.default' => 'apc', 'cache.stores.apc.driver' => 'apc'],
152+
],
153+
'memcached' => [
154+
['memcached'],
155+
['cache.default' => 'memcached', 'cache.stores.memcached.driver' => 'memcached'],
156+
],
157+
'redis' => [
158+
['redis'],
159+
['cache.default' => 'redis', 'cache.stores.redis.driver' => 'redis'],
160+
],
161+
'array' => [
162+
[],
163+
['cache.default' => 'array', 'cache.stores.array.driver' => 'array'],
164+
],
165+
];
166+
}
167+
168+
/** @dataProvider provideCacheConfigurations */
169+
public function testItDetectsCacheExtensions(array $expected, array $config): void
170+
{
171+
config()->set($config);
172+
173+
$detected = app(PhpExtensionsDetector::class)->getCacheExtensions();
174+
175+
self::assertEquals($expected, $detected);
176+
}
177+
178+
public function provideDatabaseConfigurations(): array
179+
{
180+
return [
181+
'mysql' => [
182+
['pdo_mysql'],
183+
['database.default' => 'mysql', 'database.connections.mysql.driver' => 'mysql'],
184+
],
185+
'pgsql' => [
186+
['pdo_pgsql'],
187+
['database.default' => 'pgsql', 'database.connections.pgsql.driver' => 'pgsql'],
188+
],
189+
'sqlsrv' => [
190+
['pdo_sqlsrv', 'sqlsrv'],
191+
['database.default' => 'sqlsrv', 'database.connections.sqlsrv.driver' => 'sqlsrv'],
192+
],
193+
'sqlite' => [
194+
[],
195+
['database.default' => 'sqlite', 'database.connections.sqlite.driver' => 'sqlite'],
196+
],
197+
];
198+
}
199+
200+
/** @dataProvider provideDatabaseConfigurations */
201+
public function testItDetectsDatabaseExtensions(array $expected, array $config): void
202+
{
203+
config()->set($config);
204+
205+
$detected = app(PhpExtensionsDetector::class)->getDatabaseExtensions();
206+
207+
self::assertEquals($expected, $detected);
208+
}
209+
210+
public function provideBroadcastingConfigurations(): array
211+
{
212+
return [
213+
'redis' => [
214+
['redis'],
215+
['broadcasting.default' => 'redis', 'broadcasting.connections.redis.driver' => 'redis'],
216+
],
217+
'log' => [
218+
[],
219+
['broadcasting.default' => 'log', 'database.connections.log.driver' => 'log'],
220+
],
221+
];
222+
}
223+
224+
/** @dataProvider provideBroadcastingConfigurations */
225+
public function testItDetectsBroadcastingExtensions(array $expected, array $config): void
226+
{
227+
config()->set($config);
228+
229+
$detected = app(PhpExtensionsDetector::class)->getBroadcastingExtensions();
230+
231+
self::assertEquals($expected, $detected);
232+
}
233+
234+
public function provideQueueConfigurations(): array
235+
{
236+
return [
237+
'redis' => [
238+
['redis'],
239+
['queue.default' => 'redis', 'queue.connections.redis.driver' => 'redis'],
240+
],
241+
'sync' => [
242+
[],
243+
['queue.default' => 'sync', 'queue.connections.sync.driver' => 'sync'],
244+
],
245+
];
246+
}
247+
248+
/** @dataProvider provideQueueConfigurations */
249+
public function testItDetectsQueueExtensions(array $expected, array $config): void
250+
{
251+
config()->set($config);
252+
253+
$detected = app(PhpExtensionsDetector::class)->getQueueExtensions();
254+
255+
self::assertEquals($expected, $detected);
256+
}
257+
258+
public function provideSessionConfigurations(): array
259+
{
260+
return [
261+
'apc' => [
262+
['apcu'],
263+
['session.driver' => 'apc', 'cache.stores.apc.driver' => 'apc'],
264+
],
265+
'memcached' => [
266+
['memcached'],
267+
['session.driver' => 'memcached', 'cache.stores.memcached.driver' => 'memcached'],
268+
],
269+
'redis' => [
270+
['redis'],
271+
['session.driver' => 'redis', 'cache.stores.redis.driver' => 'redis'],
272+
],
273+
'array' => [
274+
[],
275+
['session.driver' => 'array', 'cache.stores.array.driver' => 'array'],
276+
],
277+
];
278+
}
279+
280+
/** @dataProvider provideSessionConfigurations */
281+
public function testItDetectsSessionExtensions(array $expected, array $config): void
282+
{
283+
config()->set($config);
284+
285+
$detected = app(PhpExtensionsDetector::class)->getSessionExtensions();
286+
287+
self::assertEquals($expected, $detected);
288+
}
289+
}

0 commit comments

Comments
 (0)