diff --git a/src/Concerns/MustBeApprovedFactory.php b/src/Concerns/MustBeApprovedFactory.php new file mode 100644 index 0000000..162fbb7 --- /dev/null +++ b/src/Concerns/MustBeApprovedFactory.php @@ -0,0 +1,18 @@ +afterMaking(function (Model $model) { + if (in_array(MustBeApproved::class, class_uses($model))) { + $model->withoutApproval(); + } + }); + } +} diff --git a/tests/Feature/Factories/FakeModelFactory.php b/tests/Feature/Factories/FakeModelFactory.php new file mode 100644 index 0000000..fca3f7c --- /dev/null +++ b/tests/Feature/Factories/FakeModelFactory.php @@ -0,0 +1,22 @@ + 'Bob', + 'meta' => 'green', + ]; + } +} diff --git a/tests/Feature/MustBeApprovedFactoryTraitTest.php b/tests/Feature/MustBeApprovedFactoryTraitTest.php new file mode 100644 index 0000000..6635776 --- /dev/null +++ b/tests/Feature/MustBeApprovedFactoryTraitTest.php @@ -0,0 +1,35 @@ +withoutApproval()->create(); + + $this->assertDatabaseHas('fake_models', [ + 'name' => 'Bob', + 'meta' => 'green', + ]); + + $this->assertDatabaseMissing('approvals', [ + 'new_data' => json_encode([ + 'name' => 'Bob', + ]), + ]); +}); + +test(description: 'many models are added via a factory when the "withoutApproval()" method is used ', closure: function () { + FakeModel::factory()->withoutApproval()->count(4)->create(); + + $this->assertCount(4, FakeModel::all()); + + FakeModel::all()->each(function ($model) { + $this->assertEquals('Bob', $model->name); + $this->assertEquals('green', $model->meta); + }); + + $this->assertDatabaseMissing('approvals', [ + 'new_data' => json_encode([ + 'name' => 'Bob', + ]), + ]); +}); diff --git a/tests/Models/FakeModel.php b/tests/Models/FakeModel.php index 036f92b..fa9f459 100644 --- a/tests/Models/FakeModel.php +++ b/tests/Models/FakeModel.php @@ -3,11 +3,14 @@ namespace Cjmellor\Approval\Tests\Models; use Cjmellor\Approval\Concerns\MustBeApproved; +use Cjmellor\Approval\Tests\Feature\Factories\FakeModelFactory; +use Illuminate\Database\Eloquent\Factories\Factory; +use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class FakeModel extends Model { - use MustBeApproved; + use MustBeApproved, HasFactory; /** * @var array @@ -18,4 +21,9 @@ class FakeModel extends Model * @var bool */ public $timestamps = false; + + protected static function newFactory(): Factory + { + return FakeModelFactory::new(); + } }