$token, 'email' => $email, ])->test(ResetPassword::class); } function attemptResetPassword( string $token = 'sample-token', string $email = 'user@example.com', string $password = 'password123', string $passwordConfirmation = 'password123' ) { return makeResetComponent($token, $email) ->set('form.password', $password) ->set('form.password_confirmation', $passwordConfirmation) ->call('resetPassword'); } function mockPasswordResetStatus(string $status): void { Password::shouldReceive('reset') ->once() ->andReturn($status); } /* |-------------------------------------------------------------------------- | Component Rendering & Mount |-------------------------------------------------------------------------- */ it('renders reset password component successfully', function () { $token = 'sample-token'; $email = 'user@example.com'; makeResetComponent($token, $email) ->assertViewIs('livewire.auth.reset-password') ->assertSet('token', $token) ->assertSet('email', $email); }); /* |-------------------------------------------------------------------------- | Validation Rules |-------------------------------------------------------------------------- */ it('validates password fields are required', function () { makeResetComponent() ->set('form.password', '') ->set('form.password_confirmation', '') ->call('resetPassword') ->assertHasErrors(['form.password', 'form.password_confirmation']); }); it('validates password confirmation must match', function () { makeResetComponent() ->set('form.password', 'password123') ->set('form.password_confirmation', 'different123') ->call('resetPassword') ->assertHasErrors(['form.password' => 'confirmed']); }); /* |-------------------------------------------------------------------------- | Reset Password |-------------------------------------------------------------------------- */ it('resets password successfully', function () { mockPasswordResetStatus(Password::PasswordReset); attemptResetPassword() ->assertHasNoErrors() ->assertRedirect(route('login', [ 'message' => 'Kata sandi berhasil diperbarui, silakan masuk kembali.', ])); }); it('handles failure when resetting password', function () { mockPasswordResetStatus('passwords.token'); attemptResetPassword() ->assertHasNoErrors(); });