packages/deriver/tests/Unit/Configuration/EnvironmentTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Configuration;
6
7use Deriver\Configuration\Environment;
8use Deriver\Exception\ConfigurationException;
9use PHPUnit\Framework\Attributes\CoversClass;
10use PHPUnit\Framework\Attributes\DataProvider;
11use PHPUnit\Framework\TestCase;
12use stdClass;
13
14#[CoversClass(Environment::class)]
15final class EnvironmentTest extends TestCase
16{
17 public function testValuesPreserveNativeInputs(): void
18 {
19 $input = ['$_GET' => ['ids' => [1, 2], 'flag' => false], 'APP_ENV' => 'test', 'EMPTY' => null];
20 self::assertSame($input, (new Environment($input))->values);
21 }
22
23 /**
24 * @param array<array-key, mixed> $input
25 */
26 #[DataProvider('providerInvalidInputs')]
27 public function testValuesRejectInvalidInputs(array $input): void
28 {
29 $this->expectException(ConfigurationException::class);
30 (new Environment($input))->values;
31 }
32
33 /**
34 * @return array<string, array{array<array-key, mixed>}>
35 */
36 public static function providerInvalidInputs(): array
37 {
38 return ['numeric name' => [[0 => 'test']], 'empty name' => [['' => 'test']], 'object' => [['APP_ENV' => new stdClass()]], 'nested object' => [['$_GET' => ['invalid' => new stdClass()]]]];
39 }
40}
41