actingAs($user = User::factory()->create()); $this->get(route('profile.edit'))->assertOk(); }); test('profile information can be updated', function () { $user = User::factory()->create(); $this->actingAs($user); $response = Livewire::test('pages::settings.profile') ->set('name', 'Test User') ->set('email', 'test@example.com') ->call('updateProfileInformation'); $response->assertHasNoErrors() ->assertDispatched('profile-updated') ->assertDispatched('toast', type: 'success', title: 'Saved.'); $user->refresh(); expect($user->name)->toEqual('Test User'); expect($user->email)->toEqual('test@example.com'); }); test('the profile saves with its own unchanged email address', function () { $user = User::factory()->create(); $this->actingAs($user); $response = Livewire::test('pages::settings.profile') ->set('name', 'Test User') ->set('email', $user->email) ->call('updateProfileInformation'); $response->assertHasNoErrors(); expect($user->refresh()->name)->toEqual('Test User'); }); test('user can delete their account', function () { $user = User::factory()->create(); $this->actingAs($user); $response = Livewire::test('pages::settings.delete-user-form') ->set('password', 'password') ->call('deleteUser'); $response ->assertHasNoErrors() ->assertRedirect('/'); expect($user->fresh())->toBeNull(); expect(auth()->check())->toBeFalse(); }); test('correct password must be provided to delete account', function () { $user = User::factory()->create(); $this->actingAs($user); $response = Livewire::test('pages::settings.delete-user-form') ->set('password', 'wrong-password') ->call('deleteUser'); $response->assertHasErrors(['password']); expect($user->fresh())->not->toBeNull(); }); test('the only admin cannot delete their account', function () { $admin = User::query()->where('is_admin', true)->sole(); $this->actingAs($admin); Livewire::test('pages::settings.delete-user-form') ->set('password', 'password') ->call('deleteUser') ->assertHasErrors(['password']) ->assertNoRedirect(); expect($admin->fresh())->not->toBeNull(); expect(auth()->check())->toBeTrue(); }); test('an admin can delete their account while another admin remains', function () { $admin = User::factory()->admin()->create(); $this->actingAs($admin); Livewire::test('pages::settings.delete-user-form') ->set('password', 'password') ->call('deleteUser') ->assertHasNoErrors() ->assertRedirect('/'); expect($admin->fresh())->toBeNull(); }); test('the only admin\'s account card explains why it cannot be deleted instead of offering the button', function () { $this->actingAs(User::query()->where('is_admin', true)->sole()); Livewire::test('pages::settings.delete-user-form') ->assertSee('You are the only admin, so this account cannot be deleted.') ->assertDontSee('data-test="delete-user-button"', false); });