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