packages/sql-fixture/tests/Unit/Version/ReleasesTest.php

1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Version;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\Attributes\DataProvider;
9use PHPUnit\Framework\Attributes\UsesClass;
10use PHPUnit\Framework\TestCase;
11use SqlFixture\Version\Releases as Subject;
12use SqlFixture\Version\UnsupportedVersionException;
13
14#[CoversClass(Subject::class)]
15#[UsesClass(UnsupportedVersionException::class)]
16final class ReleasesTest extends TestCase
17{
18    /**
19     * @return iterable<string, array{string}>
20     */
21    public static function providerDialects(): iterable
22    {
23        yield 'mysql' => ['mysql'];
24        yield 'postgres' => ['pgsql'];
25        yield 'sqlite' => ['sqlite'];
26    }
27
28    #[DataProvider('providerDialects')]
29    public function testDefaultTagIsOneOfTheReleases(string $dialect): void
30    {
31        $releases = new Subject();
32
33        self::assertArrayHasKey($releases->defaultTag($dialect), $releases->numbers($dialect));
34    }
35
36    public function testNumbersNameEachTagAfterItsNumber(): void
37    {
38        $numbers = (new Subject())->numbers('mysql');
39
40        self::assertSame(array_map(static fn (string $number): string => 'mysql-' . $number, array_values($numbers)), array_keys($numbers));
41    }
42
43    public function testEntryRejectsAnUnknownDialect(): void
44    {
45        $this->expectException(UnsupportedVersionException::class);
46        (new Subject())->entry('oracle');
47    }
48}
49