diff --git a/src/FieldResolution/BetweenMinimumAndMaximumCountResolutionStrategy.php b/src/FieldResolution/BetweenMinimumAndMaximumCountResolutionStrategy.php new file mode 100644 index 00000000..f95ee47f --- /dev/null +++ b/src/FieldResolution/BetweenMinimumAndMaximumCountResolutionStrategy.php @@ -0,0 +1,33 @@ +numberBetween( + $count->minimum(), + $count->maximum(), + ); + } +} diff --git a/src/FieldResolution/DefaultStrategy.php b/src/FieldResolution/DefaultStrategy.php index 8b73524a..eb3559eb 100644 --- a/src/FieldResolution/DefaultStrategy.php +++ b/src/FieldResolution/DefaultStrategy.php @@ -13,7 +13,6 @@ namespace Ergebnis\FactoryBot\FieldResolution; -use Ergebnis\FactoryBot\Count; use Ergebnis\FactoryBot\FieldDefinition; use Ergebnis\FactoryBot\FixtureFactory; use Faker\Generator; @@ -21,7 +20,7 @@ /** * @internal */ -final class DefaultStrategy implements CountResolutionStrategy, FieldValueResolutionStrategy +final class DefaultStrategy implements FieldValueResolutionStrategy { public function resolveFieldValue( Generator $faker, @@ -37,14 +36,4 @@ public function resolveFieldValue( $fixtureFactory, ); } - - public function resolveCount( - Generator $faker, - Count $count, - ): int { - return $faker->numberBetween( - $count->minimum(), - $count->maximum(), - ); - } } diff --git a/src/FixtureFactory.php b/src/FixtureFactory.php index 464a4147..de1df7d2 100644 --- a/src/FixtureFactory.php +++ b/src/FixtureFactory.php @@ -34,7 +34,7 @@ public function __construct( private Generator $faker, ) { $this->fieldValueResolutionStrategy = new FieldResolution\DefaultStrategy(); - $this->countResolutionStrategy = new FieldResolution\DefaultStrategy(); + $this->countResolutionStrategy = new FieldResolution\BetweenMinimumAndMaximumCountResolutionStrategy(); } /** diff --git a/test/Integration/FixtureFactoryTest.php b/test/Integration/FixtureFactoryTest.php index 6e1cf439..d0b9ceda 100644 --- a/test/Integration/FixtureFactoryTest.php +++ b/test/Integration/FixtureFactoryTest.php @@ -30,6 +30,7 @@ #[Framework\Attributes\UsesClass(FieldDefinition\Reference::class)] #[Framework\Attributes\UsesClass(FieldDefinition\Sequence::class)] #[Framework\Attributes\UsesClass(FieldDefinition\Value::class)] +#[Framework\Attributes\UsesClass(FieldResolution\BetweenMinimumAndMaximumCountResolutionStrategy::class)] #[Framework\Attributes\UsesClass(FieldResolution\DefaultStrategy::class)] final class FixtureFactoryTest extends AbstractTestCase { diff --git a/test/Unit/FieldDefinition/ReferencesTest.php b/test/Unit/FieldDefinition/ReferencesTest.php index 3971dd2c..6963870f 100644 --- a/test/Unit/FieldDefinition/ReferencesTest.php +++ b/test/Unit/FieldDefinition/ReferencesTest.php @@ -30,6 +30,7 @@ #[Framework\Attributes\UsesClass(FieldDefinition::class)] #[Framework\Attributes\UsesClass(FieldDefinition\Value::class)] #[Framework\Attributes\UsesClass(FixtureFactory::class)] +#[Framework\Attributes\UsesClass(FieldResolution\BetweenMinimumAndMaximumCountResolutionStrategy::class)] #[Framework\Attributes\UsesClass(FieldResolution\DefaultStrategy::class)] final class ReferencesTest extends Test\Unit\AbstractTestCase { diff --git a/test/Unit/FieldResolution/BetweenMinimumAndMaximumCountResolutionStrategyTest.php b/test/Unit/FieldResolution/BetweenMinimumAndMaximumCountResolutionStrategyTest.php new file mode 100644 index 00000000..7411c694 --- /dev/null +++ b/test/Unit/FieldResolution/BetweenMinimumAndMaximumCountResolutionStrategyTest.php @@ -0,0 +1,100 @@ +resolveCount( + self::faker(), + Count::exact($value), + ); + + self::assertSame($value, $resolved); + } + + #[Framework\Attributes\DataProviderExternal(Test\DataProvider\IntProvider::class, 'greaterThanOrEqualToZero')] + public function testResolveCountResolvesCountWithFakerWhenCountIsBetweenAndFakerReturnsMinimum(int $minimum): void + { + $maximum = self::faker()->numberBetween($minimum + 1); + + $strategy = new FieldResolution\BetweenMinimumAndMaximumCountResolutionStrategy(); + + $resolved = $strategy->resolveCount( + new Test\Double\Faker\MinimumGenerator(), + Count::between( + $minimum, + $maximum, + ), + ); + + self::assertSame($minimum, $resolved); + } + + #[Framework\Attributes\DataProviderExternal(Test\DataProvider\IntProvider::class, 'greaterThanZero')] + public function testResolveCountResolvesCountWithFakerWhenCountIsBetweenAndFakerReturnsMaximum(int $maximum): void + { + $minimum = self::faker()->numberBetween(0, $maximum - 1); + + $strategy = new FieldResolution\BetweenMinimumAndMaximumCountResolutionStrategy(); + + $resolved = $strategy->resolveCount( + new Test\Double\Faker\MaximumGenerator(), + Count::between( + $minimum, + $maximum, + ), + ); + + self::assertSame($maximum, $resolved); + } + + public function testResolveCountResolvesCountWithFakerWhenCountIsBetween(): void + { + $faker = self::faker(); + + $minimum = $faker->numberBetween(1); + $maximum = $faker->numberBetween($minimum + 1); + + $strategy = new FieldResolution\BetweenMinimumAndMaximumCountResolutionStrategy(); + + $resolved = $strategy->resolveCount( + $faker, + Count::between( + $minimum, + $maximum, + ), + ); + + self::assertGreaterThanOrEqual($minimum, $resolved); + self::assertLessThanOrEqual($maximum, $resolved); + } +} diff --git a/test/Unit/FieldResolution/DefaultStrategyTest.php b/test/Unit/FieldResolution/DefaultStrategyTest.php index 6b76f538..d77c078f 100644 --- a/test/Unit/FieldResolution/DefaultStrategyTest.php +++ b/test/Unit/FieldResolution/DefaultStrategyTest.php @@ -130,74 +130,4 @@ public function testResolveFieldValueResolvesFieldDefinitionWithFakerAndFixtureF self::assertSame($expected, $resolved); } - - #[Framework\Attributes\DataProviderExternal(Test\DataProvider\IntProvider::class, 'greaterThanOrEqualToZero')] - public function testResolveCountResolvesCountWithFakerWhenCountIsExact(int $value): void - { - $strategy = new FieldResolution\DefaultStrategy(); - - $resolved = $strategy->resolveCount( - self::faker(), - Count::exact($value), - ); - - self::assertSame($value, $resolved); - } - - #[Framework\Attributes\DataProviderExternal(Test\DataProvider\IntProvider::class, 'greaterThanOrEqualToZero')] - public function testResolveCountResolvesCountWithFakerWhenCountIsBetweenAndFakerReturnsMinimum(int $minimum): void - { - $maximum = self::faker()->numberBetween($minimum + 1); - - $strategy = new FieldResolution\DefaultStrategy(); - - $resolved = $strategy->resolveCount( - new Test\Double\Faker\MinimumGenerator(), - Count::between( - $minimum, - $maximum, - ), - ); - - self::assertSame($minimum, $resolved); - } - - #[Framework\Attributes\DataProviderExternal(Test\DataProvider\IntProvider::class, 'greaterThanZero')] - public function testResolveCountResolvesCountWithFakerWhenCountIsBetweenAndFakerReturnsMaximum(int $maximum): void - { - $minimum = self::faker()->numberBetween(0, $maximum - 1); - - $strategy = new FieldResolution\DefaultStrategy(); - - $resolved = $strategy->resolveCount( - new Test\Double\Faker\MaximumGenerator(), - Count::between( - $minimum, - $maximum, - ), - ); - - self::assertSame($maximum, $resolved); - } - - public function testResolveCountResolvesCountWithFakerWhenCountIsBetween(): void - { - $faker = self::faker(); - - $minimum = $faker->numberBetween(1); - $maximum = $faker->numberBetween($minimum + 1); - - $strategy = new FieldResolution\DefaultStrategy(); - - $resolved = $strategy->resolveCount( - $faker, - Count::between( - $minimum, - $maximum, - ), - ); - - self::assertGreaterThanOrEqual($minimum, $resolved); - self::assertLessThanOrEqual($maximum, $resolved); - } } diff --git a/test/Unit/FixtureFactory/UsingDefaultStrategyTest.php b/test/Unit/FixtureFactory/UsingDefaultStrategyTest.php index 7b15cdaf..b75c3762 100644 --- a/test/Unit/FixtureFactory/UsingDefaultStrategyTest.php +++ b/test/Unit/FixtureFactory/UsingDefaultStrategyTest.php @@ -33,6 +33,7 @@ #[Framework\Attributes\UsesClass(FieldDefinition\References::class)] #[Framework\Attributes\UsesClass(FieldDefinition\Sequence::class)] #[Framework\Attributes\UsesClass(FieldDefinition\Value::class)] +#[Framework\Attributes\UsesClass(FieldResolution\BetweenMinimumAndMaximumCountResolutionStrategy::class)] #[Framework\Attributes\UsesClass(FieldResolution\DefaultStrategy::class)] final class UsingDefaultStrategyTest extends Test\Unit\AbstractTestCase { diff --git a/test/Unit/FixtureFactoryTest.php b/test/Unit/FixtureFactoryTest.php index 18a3d01f..a3bdf7b1 100644 --- a/test/Unit/FixtureFactoryTest.php +++ b/test/Unit/FixtureFactoryTest.php @@ -43,6 +43,7 @@ #[Framework\Attributes\UsesClass(FieldDefinition\References::class)] #[Framework\Attributes\UsesClass(FieldDefinition\Sequence::class)] #[Framework\Attributes\UsesClass(FieldDefinition\Value::class)] +#[Framework\Attributes\UsesClass(FieldResolution\BetweenMinimumAndMaximumCountResolutionStrategy::class)] #[Framework\Attributes\UsesClass(FieldResolution\DefaultStrategy::class)] final class FixtureFactoryTest extends AbstractTestCase {