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