packages/sql-faker/tests/Unit/Generation/Value/RandomCharactersTest.php

1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\SqlFaker\Generation\Value;
6
7use Faker\Factory;
8use PHPUnit\Framework\Attributes\CoversClass;
9use PHPUnit\Framework\TestCase;
10use SqlFaker\Generation\Value\RandomCharacters;
11
12#[CoversClass(RandomCharacters::class)]
13final class RandomCharactersTest extends TestCase
14{
15    public function testStringDrawsAsManyCharactersAsWereAskedFor(): void
16    {
17        self::assertSame(8, strlen((new RandomCharacters(Factory::create()))->string('abcdef', 8)));
18    }
19
20    public function testStringDrawsOnlyFromTheAlphabetItWasGiven(): void
21    {
22        self::assertSame('aaaa', (new RandomCharacters(Factory::create()))->string('a', 4));
23    }
24
25    public function testStringDrawsNothingWhenNoCharactersWereAskedFor(): void
26    {
27        self::assertSame('', (new RandomCharacters(Factory::create()))->string('abcdef', 0));
28    }
29
30    public function testStringIsRepeatableFromOneSeed(): void
31    {
32        $faker = Factory::create();
33        $characters = new RandomCharacters($faker);
34
35        $faker->seed(20_260_825);
36        $first = $characters->string('abcdefghij', 16);
37        $faker->seed(20_260_825);
38
39        self::assertSame($first, $characters->string('abcdefghij', 16));
40    }
41
42    public function testCharacterDrawsOneOfTheAlphabet(): void
43    {
44        self::assertStringContainsString(
45            (new RandomCharacters(Factory::create()))->character('abcdef'),
46            'abcdef',
47        );
48    }
49}
50