From 51348959d44e755eb59f3b82fc70109e43dc5c08 Mon Sep 17 00:00:00 2001 From: Steve Bauman Date: Sat, 23 May 2026 20:00:02 -0400 Subject: [PATCH 1/2] Rename classes to prevent conflicts with other packages --- src/{Data.php => DummyData.php} | 2 +- src/Factory.php | 2 +- src/{HasFactory.php => HasDummyFactory.php} | 20 ++++----- tests/EloquentAttributesTest.php | 8 ++-- tests/FactoryTest.php | 12 ++--- .../Fixtures/FactoryWithConfigurationStub.php | 4 +- tests/Fixtures/HasDummyFactoryDataStub.php | 25 +++++++++++ ...ub.php => HasDummyFactoryInstanceStub.php} | 12 ++--- ...ummyFactoryWithEloquentAttributesStub.php} | 12 ++--- ...HasDummyFactoryWithReservedFactoryStub.php | 30 +++++++++++++ ....php => HasDummyFactoryWithStatesStub.php} | 12 ++--- tests/Fixtures/HasFactoryStub.php | 25 ----------- ...actoryTest.php => HasDummyFactoryTest.php} | 45 ++++++++++++------- 13 files changed, 125 insertions(+), 84 deletions(-) rename src/{Data.php => DummyData.php} (99%) rename src/{HasFactory.php => HasDummyFactory.php} (58%) create mode 100644 tests/Fixtures/HasDummyFactoryDataStub.php rename tests/Fixtures/{HasFactoryInstanceStub.php => HasDummyFactoryInstanceStub.php} (54%) rename tests/Fixtures/{HasFactoryWithEloquentAttributesStub.php => HasDummyFactoryWithEloquentAttributesStub.php} (55%) create mode 100644 tests/Fixtures/HasDummyFactoryWithReservedFactoryStub.php rename tests/Fixtures/{HasFactoryWithStatesStub.php => HasDummyFactoryWithStatesStub.php} (76%) delete mode 100644 tests/Fixtures/HasFactoryStub.php rename tests/{HasFactoryTest.php => HasDummyFactoryTest.php} (50%) diff --git a/src/Data.php b/src/DummyData.php similarity index 99% rename from src/Data.php rename to src/DummyData.php index efa67ca..5c83831 100644 --- a/src/Data.php +++ b/src/DummyData.php @@ -19,7 +19,7 @@ * @implements ArrayAccess * @implements IteratorAggregate */ -class Data implements ArrayAccess, IteratorAggregate, JsonSerializable +class DummyData implements ArrayAccess, IteratorAggregate, JsonSerializable { /** * The data attributes. diff --git a/src/Factory.php b/src/Factory.php index 49d089c..f07f3a8 100644 --- a/src/Factory.php +++ b/src/Factory.php @@ -80,7 +80,7 @@ protected function definition(): array */ protected function generate(array $attributes): mixed { - return new Data($attributes); + return new DummyData($attributes); } /** diff --git a/src/HasFactory.php b/src/HasDummyFactory.php similarity index 58% rename from src/HasFactory.php rename to src/HasDummyFactory.php index 888599b..d761009 100644 --- a/src/HasFactory.php +++ b/src/HasDummyFactory.php @@ -7,7 +7,7 @@ /** * @template TFactoryInstance of object */ -trait HasFactory +trait HasDummyFactory { /** * Create a new dummy factory. @@ -15,40 +15,40 @@ trait HasFactory * @param array $attributes * @return Factory */ - public static function factory(array $attributes = []): Factory + public static function dummy(array $attributes = []): Factory { - return static::newFactory($attributes)->using( - fn (Generator $faker, array $attributes) => static::toFactoryInstance(new Data($attributes)) + return static::newDummyFactory($attributes)->using( + fn (Generator $faker, array $attributes) => static::toDummyInstance(new DummyData($attributes)) ); } /** - * Get a new factory instance. + * Get a new dummy factory instance. * * @param array $attributes * @return Factory */ - protected static function newFactory(array $attributes): Factory + protected static function newDummyFactory(array $attributes): Factory { $class = static::class; return (new Factory(class: static::class))->state(function () use ($class) { - return $class::getFactoryDefinition($this->faker()); + return $class::getDummyDefinition($this->faker()); })->state($attributes); } /** * Transform the dummy data into a class instance. * - * @param Data $attributes + * @param DummyData $attributes * @return TFactoryInstance */ - abstract protected static function toFactoryInstance(Data $attributes): mixed; + abstract protected static function toDummyInstance(DummyData $attributes): mixed; /** * Define the dummy data definition. * * @return array */ - abstract protected static function getFactoryDefinition(Generator $faker): array; + abstract protected static function getDummyDefinition(Generator $faker): array; } diff --git a/tests/EloquentAttributesTest.php b/tests/EloquentAttributesTest.php index e871450..6335ab2 100644 --- a/tests/EloquentAttributesTest.php +++ b/tests/EloquentAttributesTest.php @@ -3,7 +3,7 @@ use DirectoryTree\Dummy\Tests\Fixtures\EloquentFactoryStub; use DirectoryTree\Dummy\Tests\Fixtures\EloquentModelStub; use DirectoryTree\Dummy\Tests\Fixtures\FactoryStub; -use DirectoryTree\Dummy\Tests\Fixtures\HasFactoryWithEloquentAttributesStub; +use DirectoryTree\Dummy\Tests\Fixtures\HasDummyFactoryWithEloquentAttributesStub; it('expands eloquent factories and models in factory attributes', function () { $instance = FactoryStub::new()->make([ @@ -28,7 +28,7 @@ }); it('expands eloquent factories and models in has factory definitions', function () { - $instance = HasFactoryWithEloquentAttributesStub::factory()->make(); + $instance = HasDummyFactoryWithEloquentAttributesStub::dummy()->make(); expect($instance->model_id)->toBe(123); expect($instance->factory_id)->toBe(456); @@ -36,7 +36,7 @@ }); it('expands eloquent attributes after state overrides are applied', function () { - $instance = HasFactoryWithEloquentAttributesStub::factory([ + $instance = HasDummyFactoryWithEloquentAttributesStub::dummy([ 'factory_id' => new EloquentFactoryStub(789), ])->make(); @@ -45,7 +45,7 @@ }); it('expands has factory attributes with factory definition context', function () { - $instance = HasFactoryWithEloquentAttributesStub::factory([ + $instance = HasDummyFactoryWithEloquentAttributesStub::dummy([ 'dependent_id' => fn (array $attributes) => new EloquentModelStub($attributes['factory_id'] + 2), ])->make(); diff --git a/tests/FactoryTest.php b/tests/FactoryTest.php index b384ecb..b91dd3b 100644 --- a/tests/FactoryTest.php +++ b/tests/FactoryTest.php @@ -1,6 +1,6 @@ make(); - expect($instance)->toBeInstanceOf(Data::class); + expect($instance)->toBeInstanceOf(DummyData::class); }); it('can generate multiple instances in a collection', function () { $collection = FactoryStub::new()->count(5)->make(); $collection->each( - fn ($instance) => expect($instance)->toBeInstanceOf(Data::class) + fn ($instance) => expect($instance)->toBeInstanceOf(DummyData::class) ); expect($collection)->toHaveCount(5); @@ -36,7 +36,7 @@ }); it('can interact with data attributes', function () { - $data = new Data([ + $data = new DummyData([ 0 => 'first', 1 => '', 'active' => 'true', @@ -71,7 +71,7 @@ }); it('can retrieve data as enums', function () { - $data = new Data([ + $data = new DummyData([ 'status' => 'active', 'statuses' => ['active', 'inactive', 'missing'], 'missing_status' => null, @@ -144,7 +144,7 @@ public function __invoke(array $attributes): array it('can make a single instance after a count has been set', function () { $instance = FactoryStub::new()->count(5)->makeOne(); - expect($instance)->toBeInstanceOf(Data::class); + expect($instance)->toBeInstanceOf(DummyData::class); }); it('can make many instances from a number', function () { diff --git a/tests/Fixtures/FactoryWithConfigurationStub.php b/tests/Fixtures/FactoryWithConfigurationStub.php index 00aa700..549ddfc 100644 --- a/tests/Fixtures/FactoryWithConfigurationStub.php +++ b/tests/Fixtures/FactoryWithConfigurationStub.php @@ -2,7 +2,7 @@ namespace DirectoryTree\Dummy\Tests\Fixtures; -use DirectoryTree\Dummy\Data; +use DirectoryTree\Dummy\DummyData; use DirectoryTree\Dummy\Factory; class FactoryWithConfigurationStub extends Factory @@ -17,7 +17,7 @@ protected function definition(): array protected function configure(): static { - return $this->afterMaking(function (Data $data) { + return $this->afterMaking(function (DummyData $data) { $data->name = 'Custom'; }); } diff --git a/tests/Fixtures/HasDummyFactoryDataStub.php b/tests/Fixtures/HasDummyFactoryDataStub.php new file mode 100644 index 0000000..86f86eb --- /dev/null +++ b/tests/Fixtures/HasDummyFactoryDataStub.php @@ -0,0 +1,25 @@ + $faker->name(), + 'email' => $faker->email(), + ]; + } +} diff --git a/tests/Fixtures/HasFactoryInstanceStub.php b/tests/Fixtures/HasDummyFactoryInstanceStub.php similarity index 54% rename from tests/Fixtures/HasFactoryInstanceStub.php rename to tests/Fixtures/HasDummyFactoryInstanceStub.php index b393d72..6e1c6cb 100644 --- a/tests/Fixtures/HasFactoryInstanceStub.php +++ b/tests/Fixtures/HasDummyFactoryInstanceStub.php @@ -2,24 +2,24 @@ namespace DirectoryTree\Dummy\Tests\Fixtures; -use DirectoryTree\Dummy\Data; -use DirectoryTree\Dummy\HasFactory; +use DirectoryTree\Dummy\DummyData; +use DirectoryTree\Dummy\HasDummyFactory; use Faker\Generator; -class HasFactoryInstanceStub +class HasDummyFactoryInstanceStub { - use HasFactory; + use HasDummyFactory; public function __construct( public readonly array $attributes ) {} - protected static function toFactoryInstance(Data $attributes): self + protected static function toDummyInstance(DummyData $attributes): self { return new static($attributes->all()); } - protected static function getFactoryDefinition(Generator $faker): array + protected static function getDummyDefinition(Generator $faker): array { return [ 'name' => $faker->name(), diff --git a/tests/Fixtures/HasFactoryWithEloquentAttributesStub.php b/tests/Fixtures/HasDummyFactoryWithEloquentAttributesStub.php similarity index 55% rename from tests/Fixtures/HasFactoryWithEloquentAttributesStub.php rename to tests/Fixtures/HasDummyFactoryWithEloquentAttributesStub.php index 549b4bb..e22efbf 100644 --- a/tests/Fixtures/HasFactoryWithEloquentAttributesStub.php +++ b/tests/Fixtures/HasDummyFactoryWithEloquentAttributesStub.php @@ -2,20 +2,20 @@ namespace DirectoryTree\Dummy\Tests\Fixtures; -use DirectoryTree\Dummy\Data; -use DirectoryTree\Dummy\HasFactory; +use DirectoryTree\Dummy\DummyData; +use DirectoryTree\Dummy\HasDummyFactory; use Faker\Generator; -class HasFactoryWithEloquentAttributesStub +class HasDummyFactoryWithEloquentAttributesStub { - use HasFactory; + use HasDummyFactory; - protected static function toFactoryInstance(Data $attributes): Data + protected static function toDummyInstance(DummyData $attributes): DummyData { return $attributes; } - protected static function getFactoryDefinition(Generator $faker): array + protected static function getDummyDefinition(Generator $faker): array { return [ 'model_id' => new EloquentModelStub(123), diff --git a/tests/Fixtures/HasDummyFactoryWithReservedFactoryStub.php b/tests/Fixtures/HasDummyFactoryWithReservedFactoryStub.php new file mode 100644 index 0000000..c9e9876 --- /dev/null +++ b/tests/Fixtures/HasDummyFactoryWithReservedFactoryStub.php @@ -0,0 +1,30 @@ + $faker->name(), + 'email' => $faker->email(), + ]; + } +} diff --git a/tests/Fixtures/HasFactoryWithStatesStub.php b/tests/Fixtures/HasDummyFactoryWithStatesStub.php similarity index 76% rename from tests/Fixtures/HasFactoryWithStatesStub.php rename to tests/Fixtures/HasDummyFactoryWithStatesStub.php index ed84782..ef90cf8 100644 --- a/tests/Fixtures/HasFactoryWithStatesStub.php +++ b/tests/Fixtures/HasDummyFactoryWithStatesStub.php @@ -2,13 +2,13 @@ namespace DirectoryTree\Dummy\Tests\Fixtures; -use DirectoryTree\Dummy\Data; -use DirectoryTree\Dummy\HasFactory; +use DirectoryTree\Dummy\DummyData; +use DirectoryTree\Dummy\HasDummyFactory; use Faker\Generator; -class HasFactoryWithStatesStub +class HasDummyFactoryWithStatesStub { - use HasFactory; + use HasDummyFactory; /** * Admin state method. @@ -43,12 +43,12 @@ public static function getPremiumState(): array ]; } - protected static function toFactoryInstance(Data $attributes): Data + protected static function toDummyInstance(DummyData $attributes): DummyData { return $attributes; } - protected static function getFactoryDefinition(Generator $faker): array + protected static function getDummyDefinition(Generator $faker): array { return [ 'name' => $faker->name(), diff --git a/tests/Fixtures/HasFactoryStub.php b/tests/Fixtures/HasFactoryStub.php deleted file mode 100644 index be1627d..0000000 --- a/tests/Fixtures/HasFactoryStub.php +++ /dev/null @@ -1,25 +0,0 @@ - $faker->name(), - 'email' => $faker->email(), - ]; - } -} diff --git a/tests/HasFactoryTest.php b/tests/HasDummyFactoryTest.php similarity index 50% rename from tests/HasFactoryTest.php rename to tests/HasDummyFactoryTest.php index ef16f2a..2f29d09 100644 --- a/tests/HasFactoryTest.php +++ b/tests/HasDummyFactoryTest.php @@ -1,27 +1,38 @@ make(); + $instance = HasDummyFactoryDataStub::dummy()->make(); - expect($instance)->toBeInstanceOf(Data::class); + expect($instance)->toBeInstanceOf(DummyData::class); expect($instance->all())->toHaveKeys(['name', 'email']); }); it('can overwrite fake data instance data', function () { - $instance = HasFactoryStub::factory()->make([ + $instance = HasDummyFactoryDataStub::dummy()->make([ 'name' => 'John Doe', ]); expect($instance->name)->toBe('John Doe'); }); +it('can generate fake data when factory is reserved by the target class', function () { + $instance = HasDummyFactoryWithReservedFactoryStub::dummy()->make([ + 'name' => 'John Doe', + ]); + + expect(HasDummyFactoryWithReservedFactoryStub::factory())->toBe('reserved'); + expect($instance)->toBeInstanceOf(DummyData::class); + expect($instance->name)->toBe('John Doe'); +}); + it('passes data into the factory instance transformer', function () { - $instance = HasFactoryInstanceStub::factory([ + $instance = HasDummyFactoryInstanceStub::dummy([ 'active' => 'true', 'visits' => '5', ])->make(); @@ -32,25 +43,25 @@ }); it('can generate fake instance of self', function () { - $instance = HasFactoryInstanceStub::factory()->make(); + $instance = HasDummyFactoryInstanceStub::dummy()->make(); - expect($instance)->toBeInstanceOf(HasFactoryInstanceStub::class); + expect($instance)->toBeInstanceOf(HasDummyFactoryInstanceStub::class); expect($instance->attributes)->toHaveKeys(['name', 'email']); }); it('can use dynamic state methods', function () { - $instance = HasFactoryWithStatesStub::factory()->admin()->make(); + $instance = HasDummyFactoryWithStatesStub::dummy()->admin()->make(); - expect($instance)->toBeInstanceOf(Data::class); + expect($instance)->toBeInstanceOf(DummyData::class); expect($instance->role)->toBe('admin'); expect($instance->name)->toBe('Admin User'); expect($instance->email)->toBe('admin@example.com'); }); it('can chain multiple dynamic state methods', function () { - $instance = HasFactoryWithStatesStub::factory()->admin()->inactive()->make(); + $instance = HasDummyFactoryWithStatesStub::dummy()->admin()->inactive()->make(); - expect($instance)->toBeInstanceOf(Data::class); + expect($instance)->toBeInstanceOf(DummyData::class); expect($instance->role)->toBe('admin'); expect($instance->name)->toBe('Admin User'); expect($instance->email)->toBe('admin@example.com'); @@ -58,15 +69,15 @@ }); it('can use dynamic state methods with premium state', function () { - $instance = HasFactoryWithStatesStub::factory()->premium()->make(); + $instance = HasDummyFactoryWithStatesStub::dummy()->premium()->make(); - expect($instance)->toBeInstanceOf(Data::class); + expect($instance)->toBeInstanceOf(DummyData::class); expect($instance->role)->toBe('premium'); expect($instance->subscription)->toBe('premium'); }); it('throws exception for non-existent state methods', function () { expect(function () { - HasFactoryWithStatesStub::factory()->nonExistentState()->make(); + HasDummyFactoryWithStatesStub::dummy()->nonExistentState()->make(); })->toThrow(BadMethodCallException::class); }); From 4ca321b7e972aebf9c61a93f0b142acd1c39b910 Mon Sep 17 00:00:00 2001 From: Steve Bauman Date: Sat, 23 May 2026 20:05:12 -0400 Subject: [PATCH 2/2] Update readme.md --- readme.md | 162 +++++++++++++++++++++++++++++++----------------------- 1 file changed, 93 insertions(+), 69 deletions(-) diff --git a/readme.md b/readme.md index b473c7c..b8a3e94 100644 --- a/readme.md +++ b/readme.md @@ -22,16 +22,16 @@ Generate PHP class instances populated with fake dummy data using