diff --git a/tests/Feature/Livewire/Studio/Master/FormulaTest.php b/tests/Feature/Livewire/Studio/Master/FormulaTest.php new file mode 100644 index 0000000..dbd4ce4 --- /dev/null +++ b/tests/Feature/Livewire/Studio/Master/FormulaTest.php @@ -0,0 +1,102 @@ +user = User::factory()->create(); + Bottle::factory()->count(3)->create(); + Formula::factory()->count(3)->create(); +}); + +function mountFormulaComponent(User $user) +{ + return Livewire::actingAs($user)->test(FormulaComponent::class); +} + +it('renders formula page successfully', function () { + mountFormulaComponent($this->user) + ->assertViewIs('livewire.studio.master.formulas') + ->assertViewHas('pageTitle', 'Rumus'); +}); + +it('mounts formulas and sizes correctly', function () { + $component = mountFormulaComponent($this->user); + + expect($component->formulas)->toHaveCount(3); + expect($component->sizes)->toHaveCount(Bottle::count()); +}); + +it('prevents creating formula when unauthorized', function () { + Formula::factory()->raw(); + mountFormulaComponent($this->user) + ->call('create') + ->assertForbidden(); +}); + +it('creates formula successfully when authorized', function () { + $permission = Permission::create(['name' => 'create formula']); + $this->user->givePermissionTo($permission); + + $data = Formula::factory()->raw(); + + $component = mountFormulaComponent($this->user); + + $component + ->set('form.quality', $data['quality']) + ->set('form.size', $data['size']) + ->set('form.volume', $data['volume']) + ->call('create') + ->assertHasNoErrors(); + + $this->assertDatabaseHas('formulas', [ + 'quality' => $data['quality'], + 'size' => $data['size'], + 'volume' => $data['volume'], + ]); + + expect($component->formulas[$data['size']][0]['quality'])->toBe($data['quality']); +}); + +it('updates formula successfully when authorized', function () { + $permission = Permission::create(['name' => 'update formula']); + $this->user->givePermissionTo($permission); + + $formulaToEdit = Formula::factory()->create(); + + $data = Formula::factory()->raw(); + + $component = mountFormulaComponent($this->user); + + $component + ->set('form.quality', $data['quality']) + ->set('form.size', $data['size']) + ->set('form.volume', $data['volume']) + ->call('update') + ->assertHasNoErrors(); + + $formulaToEdit->refresh(); + + $this->assertEquals($data['quality'], $formulaToEdit->quality); + + expect($component->formulas[$formulaToEdit->size][0]['quality'])->toBe('Updated Quality'); +}); + +it('deletes formula successfully', function () { + $formula = Formula::factory()->create(); + $component = mountFormulaComponent($this->user); + + $component->call('delete', $formula) + ->assertHasNoErrors(); + + $this->assertSoftDeleted('formulas', ['id' => $formula->id]); + + expect($component->formulas[$formula->size] ?? [])->toBeEmpty(); +});