diff --git a/database/factories/BrandFactory.php b/database/factories/BrandFactory.php new file mode 100644 index 0000000..3cd7d31 --- /dev/null +++ b/database/factories/BrandFactory.php @@ -0,0 +1,22 @@ + $this->faker->unique()->name(), + 'slug' => $this->faker->slug(), + 'sort_order' => function () { + $max = Brand::max('sort_order') ?? 0; + + return $max + 1; + }, + ]; + } +} diff --git a/tests/Feature/Livewire/Studio/Catalog/BrandTest.php b/tests/Feature/Livewire/Studio/Catalog/BrandTest.php new file mode 100644 index 0000000..2d9ad9b --- /dev/null +++ b/tests/Feature/Livewire/Studio/Catalog/BrandTest.php @@ -0,0 +1,67 @@ +assertViewIs('livewire.studio.catalog.brands') + ->assertViewHas('pageTitle', 'Merek'); +}); + +it('displays all brands', function () { + BrandModel::factory()->count(10)->create(); + + $brand = BrandModel::first(); + + Livewire::test(Brand::class)->assertSee($brand->name); +}); + +it('can create a brand', function () { + $data = BrandModel::factory()->raw(); + + Livewire::test(Brand::class) + ->call('openModal', 'create', 'Tambah Merek') + ->set('form.name', $data['name']) + ->set('form.slug', $data['slug']) + ->set('form.sort_order', $data['sort_order']) + ->call('create') + ->assertHasNoErrors() + ->assertDispatched('refreshDatatable'); + + expect(BrandModel::count())->toBe(1); + expect(BrandModel::first()->name)->toBe($data['name']); +}); + +it('can update a brand', function () { + $brand = BrandModel::factory()->create(); + + $data = BrandModel::factory()->raw(); + + Livewire::test(Brand::class) + ->call('openModal', 'update', 'Edit Merek', $brand->id) + ->set('form.name', $data['name']) + ->set('form.sort_order', $data['sort_order']) + ->call('update') + ->assertHasNoErrors() + ->assertDispatched('refreshDatatable'); + + $brand->refresh(); + + expect($brand->name)->toBe($data['name']); +}); + +it('can delete an brand', function () { + $brand = BrandModel::factory()->create(); + + Livewire::test(Brand::class) + ->call('delete', $brand) + ->assertHasNoErrors() + ->assertDispatched('refreshDatatable'); + + expect(BrandModel::count())->toBe(0); +});