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) {
|
Schema::create('memberships', function (Blueprint $table) {
|
||||||
$table->id();
|
$table->id();
|
||||||
$table->string('name', 50);
|
$table->string('name', 50);
|
||||||
$table->text('terms_conditions')->nullable();
|
|
||||||
$table->unsignedInteger('min_purchase');
|
$table->unsignedInteger('min_purchase');
|
||||||
$table->decimal('discount_percentage', 5, 2);
|
$table->decimal('discount_percentage', 5, 2);
|
||||||
|
$table->text('terms_conditions')->nullable();
|
||||||
$table->timestamps();
|
$table->timestamps();
|
||||||
$table->softDeletes();
|
$table->softDeletes();
|
||||||
});
|
});
|
||||||
|
|||||||
@ -2,18 +2,15 @@
|
|||||||
|
|
||||||
namespace Database\Seeders;
|
namespace Database\Seeders;
|
||||||
|
|
||||||
// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
|
||||||
use Illuminate\Database\Seeder;
|
use Illuminate\Database\Seeder;
|
||||||
|
|
||||||
class DatabaseSeeder extends Seeder
|
class DatabaseSeeder extends Seeder
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* Seed the application's database.
|
|
||||||
*/
|
|
||||||
public function run(): void
|
public function run(): void
|
||||||
{
|
{
|
||||||
$this->call([
|
$this->call([
|
||||||
UserSeeder::class,
|
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