user = User::factory()->create(); }); it('renders create user page', function () { Livewire::actingAs($this->user) ->test(Create::class) ->assertViewIs('livewire.studio.master.user.form') ->assertViewHas('pageTitle', 'Tambah Pegawai'); }); it('mounts outlets correctly', function () { $outlets = Outlet::factory()->count(3)->create(); $component = Livewire::actingAs($this->user) ->test(Create::class); expect($component->outlets)->toHaveCount(3); foreach ($outlets as $outlet) { expect($component->outlets)->toHaveKey($outlet->id); expect($component->outlets[$outlet->id])->toBe($outlet->name); } }); it('prevents creation when unauthorized', function () { Gate::define('create user', fn () => false); Livewire::actingAs($this->user) ->test(Create::class) ->call('save') ->assertForbidden(); }); it('saves outlet successfully when authorized', function () { $permission = Permission::create(['name' => 'create user']); $this->user->givePermissionTo($permission); $outlets = Outlet::factory()->count(2)->create(); $userRaw = User::factory()->make()->toArray(); $employeeRaw = Employee::factory()->make()->toArray(); $data = array_merge($userRaw, [ 'full_name' => $employeeRaw['full_name'], 'phone_number' => $employeeRaw['phone_number'], 'base_salary' => $employeeRaw['base_salary'], 'birthdate' => $employeeRaw['birthdate'], 'hire_date' => $employeeRaw['hire_date'], 'address' => $employeeRaw['address'], 'gender' => $employeeRaw['gender'], 'status' => UserStatus::ACTIVE->value, 'outlet_ids' => $outlets->pluck('id')->toArray(), ]); Livewire::actingAs($this->user) ->test(Create::class) ->set('form.full_name', $data['full_name']) ->set('form.username', $data['username']) ->set('form.email', $data['email']) ->set('form.phone_number', $data['phone_number']) ->set('form.base_salary', $data['base_salary']) ->set('form.birthdate', $data['birthdate']) ->set('form.hire_date', $data['hire_date']) ->set('form.address', $data['address']) ->set('form.gender', $data['gender']) ->set('form.status', $data['status']) ->set('form.outlet_ids', $data['outlet_ids']) ->call('save') ->assertHasNoErrors() ->assertRedirect(Index::class); $user = User::where('email', $data['email'])->first(); $this->assertDatabaseHas('users', [ 'id' => $user->id, 'username' => $data['username'], 'email' => $data['email'], ]); $this->assertDatabaseHas('employees', [ 'user_id' => $user->id, 'full_name' => $data['full_name'], 'phone_number' => $data['phone_number'], ]); expect($user->outlets->pluck('id')->toArray())->toMatchArray($data['outlet_ids']); });