packages/sql-fixture/tests/Unit/Platform/PostgreSql/Value/StringGeneratorTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Platform\PostgreSql\Value;
6
7use Faker\Factory;
8use PHPUnit\Framework\Attributes\CoversClass;
9use PHPUnit\Framework\TestCase;
10use SqlFixture\Platform\PostgreSql\Value\StringGenerator as Subject;
11use SqlFixture\Schema\ColumnDefinition;
12
13#[CoversClass(Subject::class)]
14#[\PHPUnit\Framework\Attributes\UsesClass(ColumnDefinition::class)]
15final class StringGeneratorTest extends TestCase
16{
17 public function testGenerateCharRespectsDeclaredLength(): void
18 {
19 $faker = Factory::create();
20 $faker->seed(42);
21 $value = (new Subject())->generateChar($faker, new ColumnDefinition('code', 'CHAR', length: 12));
22 self::assertNotSame('', $value);
23 self::assertLessThanOrEqual(12, strlen($value));
24 }
25
26 public function testGenerateVarcharRespectsDeclaredLength(): void
27 {
28 $faker = Factory::create();
29 $faker->seed(42);
30 $value = (new Subject())->generateVarchar($faker, new ColumnDefinition('code', 'VARCHAR', length: 12));
31 self::assertNotSame('', $value);
32 self::assertLessThanOrEqual(12, strlen($value));
33 }
34
35 #[\PHPUnit\Framework\Attributes\DataProvider('providerShortVarchars')]
36 public function testGenerateVarcharSupportsColumnsShorterThanAFakerWord(int $length): void
37 {
38 $value = (new Subject())->generateVarchar(Factory::create(), new ColumnDefinition('code', 'VARCHAR', length: $length));
39 self::assertNotSame('', $value);
40 self::assertLessThanOrEqual($length, strlen($value));
41 }
42
43 public function testGenerateVarcharSupportsAZeroLengthColumn(): void
44 {
45 self::assertSame('', (new Subject())->generateVarchar(Factory::create(), new ColumnDefinition('code', 'VARCHAR', length: 0)));
46 }
47
48 /**
49 * @return list<array{int}>
50 */
51 public static function providerShortVarchars(): array
52 {
53 return [[1], [2], [3], [4]];
54 }
55}
56