feat(membership): mengurtkan fiield di migrasi
-membuat seeder dan mendaftarkannya di database seeder -membuat factrory untuk keperluan testing -membuat feature test
This commit is contained in:
parent
28c69dbf23
commit
b53e873bb8
18
database/factories/MembershipFactory.php
Normal file
18
database/factories/MembershipFactory.php
Normal file
@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Factories;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\Factory;
|
||||
|
||||
class MembershipFactory extends Factory
|
||||
{
|
||||
public function definition(): array
|
||||
{
|
||||
return [
|
||||
'name' => $this->faker->name(),
|
||||
'min_purchase' => $this->faker->randomNumber(2),
|
||||
'discount_percentage' => $this->faker->randomFloat(2, 0, 100),
|
||||
'terms_conditions' => $this->faker->optional()->text(),
|
||||
];
|
||||
}
|
||||
}
|
||||
@ -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();
|
||||
});
|
||||
|
||||
@ -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,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
39
database/seeders/MembershipSeeder.php
Normal file
39
database/seeders/MembershipSeeder.php
Normal file
@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Seeder;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class MembershipSeeder extends Seeder
|
||||
{
|
||||
public function run(): void
|
||||
{
|
||||
DB::table('memberships')->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.',
|
||||
],
|
||||
]);
|
||||
}
|
||||
}
|
||||
68
tests/Feature/Livewire/Studio/Loyalty/MembershipTest.php
Normal file
68
tests/Feature/Livewire/Studio/Loyalty/MembershipTest.php
Normal file
@ -0,0 +1,68 @@
|
||||
<?php
|
||||
|
||||
use App\Livewire\Studio\Loyalty\Membership;
|
||||
use App\Models\Membership as MembershipModel;
|
||||
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||
use Livewire\Livewire;
|
||||
|
||||
uses(RefreshDatabase::class);
|
||||
|
||||
it('renders successfully', function () {
|
||||
Livewire::test(Membership::class)
|
||||
->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);
|
||||
});
|
||||
Loading…
Reference in New Issue
Block a user