diff --git a/database/factories/ChooseUsFactory.php b/database/factories/ChooseUsFactory.php index 48d92b6..ad620f4 100644 --- a/database/factories/ChooseUsFactory.php +++ b/database/factories/ChooseUsFactory.php @@ -14,6 +14,7 @@ public function definition(): array return [ 'name' => $this->faker->words(2, true), 'description' => $this->faker->paragraph(), + 'icon' => 'star', 'sort_order' => $this->faker->numberBetween(1, 50), ]; } diff --git a/tests/Feature/Studio/Feature/ChooseUsTest.php b/tests/Feature/Studio/Feature/ChooseUsTest.php new file mode 100644 index 0000000..c993f4c --- /dev/null +++ b/tests/Feature/Studio/Feature/ChooseUsTest.php @@ -0,0 +1,134 @@ +setupUser(); + + // Setup Permissions + $role = Role::create(['name' => 'super-admin']); + $role->givePermissionTo(Permission::create(['name' => 'create choose us'])); + $role->givePermissionTo(Permission::create(['name' => 'update choose us'])); + $role->givePermissionTo(Permission::create(['name' => 'delete choose us'])); + $this->user->assignRole($role); +}); + +it('renders the choose us page', function () { + Livewire::actingAs($this->user) + ->test(ChooseUs::class) + ->assertStatus(200) + ->assertViewIs('livewire.studio.feature.choose-us') + ->assertSee('Pilih Kami'); +}); + +it('can create a choose us item', function () { + Livewire::actingAs($this->user) + ->test(ChooseUs::class) + ->call('openModal', 'create', 'Tambah Pilih Kami') + ->set('form.name', 'Kualitas Terbaik') + ->set('form.description', 'Kami menjamin kualitas.') + ->set('form.icon', 'star') + ->call('create') + ->assertDispatched('refreshDatatable') + // ->assertDispatched('toast', message: 'Pilih kami berhasil ditambahkan.') + ->assertHasNoErrors(); + + $this->assertDatabaseHas('choose_us', [ + 'name' => 'Kualitas Terbaik', + 'description' => 'Kami menjamin kualitas.', + 'icon' => 'star', + ]); +}); + +it('validates required fields when creating', function () { + Livewire::actingAs($this->user) + ->test(ChooseUs::class) + ->call('openModal', 'create', 'Tambah Pilih Kami') + ->set('form.name', '') + ->set('form.description', '') + ->set('form.icon', '') + ->call('create') + ->assertHasErrors([ + 'form.name' => 'required', + 'form.description' => 'required', + 'form.icon' => 'required', + ]); +}); + +it('can update a choose us item', function () { + $item = ChooseUsModel::factory()->create([ + 'name' => 'Original', + 'description' => 'Old Description', + 'icon' => 'star', + ]); + + Livewire::actingAs($this->user) + ->test(ChooseUs::class) + ->call('openModal', 'update', 'Edit Pilih Kami', $item->hash) + ->assertSet('form.name', 'Original') + ->assertSet('form.description', 'Old Description') + ->assertSet('form.icon', 'star') + ->set('form.name', 'Updated Name') + ->set('form.description', 'New Description') + ->set('form.icon', 'heart') + ->call('update') + ->assertDispatched('refreshDatatable') + // ->assertDispatched('toast', message: 'Pilih kami berhasil diperbarui.') + ->assertHasNoErrors(); + + $this->assertDatabaseHas('choose_us', [ + 'id' => $item->id, + 'name' => 'Updated Name', + 'description' => 'New Description', + 'icon' => 'heart', + ]); +}); + +it('can delete a choose us item', function () { + $item = ChooseUsModel::factory()->create(); + + Livewire::actingAs($this->user) + ->test(ChooseUs::class) + ->call('delete', $item) + ->assertDispatched('refreshDatatable') + // ->assertDispatched('toast', message: 'Pilih kami berhasil dihapus.') + ->assertHasNoErrors(); + + $this->assertSoftDeleted('choose_us', [ + 'id' => $item->id, + ]); +}); + +it('can sort choose us items', function () { + $item1 = ChooseUsModel::factory()->create(['sort_order' => 1]); + $item2 = ChooseUsModel::factory()->create(['sort_order' => 2]); + + Livewire::actingAs($this->user) + ->test(ChooseUs::class) + ->call('sortOrder', $item1, 'down') + ->assertDispatched('refreshDatatable'); + + $this->assertDatabaseHas('choose_us', [ + 'id' => $item1->id, + 'sort_order' => 2, + ]); + + $this->assertDatabaseHas('choose_us', [ + 'id' => $item2->id, + 'sort_order' => 1, + ]); +}); + +it('cannot access without permission', function () { + $userWithoutPermission = User::factory()->create(); + + Livewire::actingAs($userWithoutPermission) + ->test(ChooseUs::class) + ->call('create') + ->assertForbidden(); +}); diff --git a/tests/Feature/Studio/Feature/PerfumeFeatureTest.php b/tests/Feature/Studio/Feature/PerfumeFeatureTest.php new file mode 100644 index 0000000..33fdc34 --- /dev/null +++ b/tests/Feature/Studio/Feature/PerfumeFeatureTest.php @@ -0,0 +1,126 @@ +setupUser(); + + // Setup Permissions + $role = Role::create(['name' => 'super-admin']); + $role->givePermissionTo(Permission::create(['name' => 'create perfume feature'])); + $role->givePermissionTo(Permission::create(['name' => 'update perfume feature'])); + $role->givePermissionTo(Permission::create(['name' => 'delete perfume feature'])); + $this->user->assignRole($role); +}); + +it('renders the perfume feature page', function () { + Livewire::actingAs($this->user) + ->test(PerfumeFeature::class) + ->assertStatus(200) + ->assertViewIs('livewire.studio.feature.perfume-features') + ->assertSee('Keunggulan Parfum'); +}); + +it('can create a perfume feature', function () { + Livewire::actingAs($this->user) + ->test(PerfumeFeature::class) + ->call('openModal', 'create', 'Tambah Keunggulan') + ->set('form.name', 'Tahan Lama') + ->set('form.description', 'Wangi tahan hingga 24 jam') + ->call('create') + ->assertDispatched('refreshDatatable') + // ->assertDispatched('toast', message: 'Keunggulan parfum berhasil ditambahkan.') + ->assertHasNoErrors(); + + $this->assertDatabaseHas('perfume_features', [ + 'name' => 'Tahan Lama', + 'description' => 'Wangi tahan hingga 24 jam', + ]); +}); + +it('validates required fields when creating', function () { + Livewire::actingAs($this->user) + ->test(PerfumeFeature::class) + ->call('openModal', 'create', 'Tambah Keunggulan') + ->set('form.name', '') + ->set('form.description', '') + ->call('create') + ->assertHasErrors([ + 'form.name' => 'required', + 'form.description' => 'required', + ]); +}); + +it('can update a perfume feature', function () { + $feature = PerfumeFeatureModel::factory()->create([ + 'name' => 'Original', + 'description' => 'Old Description', + ]); + + Livewire::actingAs($this->user) + ->test(PerfumeFeature::class) + ->call('openModal', 'update', 'Edit Keunggulan', $feature->hash) + ->assertSet('form.name', 'Original') + ->assertSet('form.description', 'Old Description') + ->set('form.name', 'Updated Name') + ->set('form.description', 'New Description') + ->call('update') + ->assertDispatched('refreshDatatable') + // ->assertDispatched('toast', message: 'Keunggulan parfum berhasil diperbarui.') + ->assertHasNoErrors(); + + $this->assertDatabaseHas('perfume_features', [ + 'id' => $feature->id, + 'name' => 'Updated Name', + 'description' => 'New Description', + ]); +}); + +it('can delete a perfume feature', function () { + $feature = PerfumeFeatureModel::factory()->create(); + + Livewire::actingAs($this->user) + ->test(PerfumeFeature::class) + ->call('delete', $feature) + ->assertDispatched('refreshDatatable') + // ->assertDispatched('toast', message: 'Keunggulan parfum berhasil dihapus.') + ->assertHasNoErrors(); + + $this->assertSoftDeleted('perfume_features', [ + 'id' => $feature->id, + ]); +}); + +it('can sort perfume features', function () { + $feature1 = PerfumeFeatureModel::factory()->create(['sort_order' => 1]); + $feature2 = PerfumeFeatureModel::factory()->create(['sort_order' => 2]); + + Livewire::actingAs($this->user) + ->test(PerfumeFeature::class) + ->call('sortOrder', $feature1, 'down') + ->assertDispatched('refreshDatatable'); + + $this->assertDatabaseHas('perfume_features', [ + 'id' => $feature1->id, + 'sort_order' => 2, + ]); + + $this->assertDatabaseHas('perfume_features', [ + 'id' => $feature2->id, + 'sort_order' => 1, + ]); +}); + +it('cannot access without permission', function () { + $userWithoutPermission = User::factory()->create(); + + Livewire::actingAs($userWithoutPermission) + ->test(PerfumeFeature::class) + ->call('create') + ->assertForbidden(); +});