packages/sql-faker/tests/Unit/Compiler/Resource/ArtifactDirectoryTest.php

1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\SqlFaker\Compiler\Resource;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\TestCase;
9use RuntimeException;
10use SqlFaker\Compiler\Resource\ArtifactDirectory;
11
12#[CoversClass(ArtifactDirectory::class)]
13final class ArtifactDirectoryTest extends TestCase
14{
15    public function testPreparedNamesTheDirectoryOfAnArtifactThatAlreadyHasOne(): void
16    {
17        $directory = sys_get_temp_dir();
18
19        self::assertSame($directory, (new ArtifactDirectory())->prepared($directory . '/lexical.php'));
20    }
21
22    public function testPreparedCreatesADirectoryThatDoesNotExistYet(): void
23    {
24        $directory = sys_get_temp_dir() . '/sql-faker-artifact-' . getmypid() . '/nested';
25
26        self::assertSame($directory, (new ArtifactDirectory())->prepared($directory . '/lexical.php'));
27        self::assertDirectoryExists($directory);
28
29        rmdir($directory);
30        rmdir(dirname($directory));
31    }
32
33    public function testPreparedReportsTheAncestorThatCanNeverHoldADirectory(): void
34    {
35        $this->expectException(RuntimeException::class);
36        $this->expectExceptionMessage('/dev/null is not a writable directory');
37
38        (new ArtifactDirectory())->prepared('/dev/null/no-such/lexical.php');
39    }
40}
41