From b53e873bb8b5958c41b5dbad273444aec178153a Mon Sep 17 00:00:00 2001 From: Yoga Pangestu Date: Thu, 25 Sep 2025 19:54:03 +0700 Subject: [PATCH] feat(membership): mengurtkan fiield di migrasi -membuat seeder dan mendaftarkannya di database seeder -membuat factrory untuk keperluan testing -membuat feature test --- database/factories/MembershipFactory.php | 18 +++++ ..._09_24_141358_create_memberships_table.php | 2 +- database/seeders/DatabaseSeeder.php | 5 +- database/seeders/MembershipSeeder.php | 39 +++++++++++ .../Studio/Loyalty/MembershipTest.php | 68 +++++++++++++++++++ 5 files changed, 127 insertions(+), 5 deletions(-) create mode 100644 database/factories/MembershipFactory.php create mode 100644 database/seeders/MembershipSeeder.php create mode 100644 tests/Feature/Livewire/Studio/Loyalty/MembershipTest.php diff --git a/database/factories/MembershipFactory.php b/database/factories/MembershipFactory.php new file mode 100644 index 0000000..63a0c86 --- /dev/null +++ b/database/factories/MembershipFactory.php @@ -0,0 +1,18 @@ + $this->faker->name(), + 'min_purchase' => $this->faker->randomNumber(2), + 'discount_percentage' => $this->faker->randomFloat(2, 0, 100), + 'terms_conditions' => $this->faker->optional()->text(), + ]; + } +} diff --git a/database/migrations/2025_09_24_141358_create_memberships_table.php b/database/migrations/2025_09_24_141358_create_memberships_table.php index a0dbd40..3c7b132 100644 --- a/database/migrations/2025_09_24_141358_create_memberships_table.php +++ b/database/migrations/2025_09_24_141358_create_memberships_table.php @@ -14,9 +14,9 @@ public function up(): void Schema::create('memberships', function (Blueprint $table) { $table->id(); $table->string('name', 50); - $table->text('terms_conditions')->nullable(); $table->unsignedInteger('min_purchase'); $table->decimal('discount_percentage', 5, 2); + $table->text('terms_conditions')->nullable(); $table->timestamps(); $table->softDeletes(); }); diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index c0dcc6a..a62809a 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -2,18 +2,15 @@ namespace Database\Seeders; -// use Illuminate\Database\Console\Seeds\WithoutModelEvents; use Illuminate\Database\Seeder; class DatabaseSeeder extends Seeder { - /** - * Seed the application's database. - */ public function run(): void { $this->call([ UserSeeder::class, + MembershipSeeder::class, ]); } } diff --git a/database/seeders/MembershipSeeder.php b/database/seeders/MembershipSeeder.php new file mode 100644 index 0000000..6686d5b --- /dev/null +++ b/database/seeders/MembershipSeeder.php @@ -0,0 +1,39 @@ +insert([ + [ + 'name' => 'Silver', + 'min_purchase' => 500000, + 'discount_percentage' => 5, + 'terms_conditions' => 'Minimal belanja Rp500.000 dalam 1 bulan.', + ], + [ + 'name' => 'Gold', + 'min_purchase' => 1000000, + 'discount_percentage' => 10, + 'terms_conditions' => 'Minimal belanja Rp1.000.000 dalam 1 bulan.', + ], + [ + 'name' => 'Platinum', + 'min_purchase' => 2500000, + 'discount_percentage' => 15, + 'terms_conditions' => 'Minimal belanja Rp2.500.000 dalam 1 bulan.', + ], + [ + 'name' => 'Diamond', + 'min_purchase' => 5000000, + 'discount_percentage' => 20, + 'terms_conditions' => 'Minimal belanja Rp5.000.000 dalam 1 bulan.', + ], + ]); + } +} diff --git a/tests/Feature/Livewire/Studio/Loyalty/MembershipTest.php b/tests/Feature/Livewire/Studio/Loyalty/MembershipTest.php new file mode 100644 index 0000000..feed229 --- /dev/null +++ b/tests/Feature/Livewire/Studio/Loyalty/MembershipTest.php @@ -0,0 +1,68 @@ +assertViewIs('livewire.studio.loyalty.memberships') + ->assertViewHas('pageTitle', 'Membership'); +}); + +it('displays all memberships', function () { + MembershipModel::Factory()->count(10)->create(); + + $membership = MembershipModel::first(); + + Livewire::test(Membership::class)->assertSee($membership->name); +}); + +it('can create a membership', function () { + $data = MembershipModel::factory()->raw(); + + Livewire::test(Membership::class) + ->set('form.name', $data['name']) + ->set('form.min_purchase', $data['min_purchase']) + ->set('form.discount_percentage', $data['discount_percentage']) + ->set('form.terms_conditions', $data['terms_conditions']) + ->call('create') + ->assertDispatched('refreshDatatable'); + + expect(MembershipModel::count())->toBe(1); + expect(MembershipModel::first()->name)->toBe($data['name']); +}); + +it('can update a membership', function () { + $membership = MembershipModel::factory()->create(); + + $data = MembershipModel::factory()->raw(); + + Livewire::test(Membership::class) + ->call('openModal', 'update', 'Edit Membership', $membership->id) + ->set('form.name', $data['name']) + ->set('form.min_purchase', $data['min_purchase']) + ->set('form.discount_percentage', $data['discount_percentage']) + ->set('form.terms_conditions', $data['terms_conditions']) + ->call('update') + ->assertDispatched('refreshDatatable'); + + $membership->refresh(); + + expect($membership->name)->toBe($data['name']); + expect($membership->min_purchase)->toBe($data['min_purchase']); + expect($membership->discount_percentage)->toBe($data['discount_percentage']); +}); + +it('can delete an membership', function () { + $membership = MembershipModel::factory()->create(); + + Livewire::test(Membership::class) + ->call('delete', $membership) + ->assertDispatched('refreshDatatable'); + + expect(MembershipModel::count())->toBe(0); +});