packages/sql-fixture/tests/Unit/Platform/MySql/Value/NumericGeneratorTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Platform\MySql\Value;
6
7use Faker\Factory;
8use PHPUnit\Framework\Attributes\CoversClass;
9use PHPUnit\Framework\TestCase;
10use SqlFixture\Platform\MySql\Value\NumericGenerator as Subject;
11use SqlFixture\Schema\ColumnDefinition;
12
13#[CoversClass(Subject::class)]
14#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFixture\Platform\MySql\Value\DecimalGenerator::class)]
15#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFixture\Platform\MySql\Value\IntegerGenerator::class)]
16#[\PHPUnit\Framework\Attributes\UsesClass(ColumnDefinition::class)]
17#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFixture\TypeMapper\IntegerRange::class)]
18#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFixture\TypeMapper\IntegerWidth::class)]
19#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFixture\TypeMapper\DecimalRange::class)]
20final class NumericGeneratorTest extends TestCase
21{
22 public function testGenerateHandlesIntegerAndDecimalDeclarations(): void
23 {
24 $faker = Factory::create();
25 $faker->seed(42);
26 $generator = new Subject();
27 $integer = $generator->generate($faker, new ColumnDefinition('id', 'SMALLINT'));
28 self::assertIsInt($integer);
29 self::assertGreaterThanOrEqual(-32768, $integer);
30 self::assertLessThanOrEqual(32767, $integer);
31 $decimal = $generator->generate($faker, new ColumnDefinition('price', 'DECIMAL', precision: 4, scale: 2));
32 self::assertIsFloat($decimal);
33 self::assertLessThanOrEqual(99.99, abs($decimal));
34 }
35}
36