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