chore: add password tests

This commit is contained in:
David Nguyen
2025-02-19 18:41:53 +11:00
parent ac30654913
commit 90ce52164c
2 changed files with 95 additions and 1 deletions

View File

@ -122,7 +122,7 @@ export const PasswordForm = ({ className }: PasswordFormProps) => {
render={({ field }) => ( render={({ field }) => (
<FormItem> <FormItem>
<FormLabel> <FormLabel>
<Trans>Password</Trans> <Trans>New Password</Trans>
</FormLabel> </FormLabel>
<FormControl> <FormControl>
<PasswordInput autoComplete="new-password" {...field} /> <PasswordInput autoComplete="new-password" {...field} />

View File

@ -0,0 +1,94 @@
import { type Page, expect, test } from '@playwright/test';
import { prisma } from '@documenso/prisma';
import { seedUser } from '@documenso/prisma/seed/users';
import { apiSignin, apiSignout } from '../fixtures/authentication';
test.use({ storageState: { cookies: [], origins: [] } });
test('[USER] can reset password via forgot password', async ({ page }: { page: Page }) => {
const oldPassword = 'Test123!';
const newPassword = 'Test124!';
const user = await seedUser({
password: oldPassword,
});
await page.goto('http://localhost:3000/signin');
await page.getByRole('link', { name: 'Forgot your password?' }).click();
await page.getByRole('textbox', { name: 'Email' }).fill(user.email);
await page.getByRole('button', { name: 'Reset Password' }).click();
await expect(page.locator('body')).toContainText('Reset email sent');
const foundToken = await prisma.passwordResetToken.findFirstOrThrow({
where: {
userId: user.id,
},
include: {
user: true,
},
});
await page.goto(`http://localhost:3000/reset-password/${foundToken.token}`);
// Assert that password cannot be same as old password.
await page.getByRole('textbox', { name: 'Password', exact: true }).fill(oldPassword);
await page.getByRole('textbox', { name: 'Repeat Password' }).fill(oldPassword);
await page.getByRole('button', { name: 'Reset Password' }).click();
await expect(page.locator('body')).toContainText(
'Your new password cannot be the same as your old password.',
);
// Assert password reset.
await page.getByRole('textbox', { name: 'Password', exact: true }).fill(newPassword);
await page.getByRole('textbox', { name: 'Repeat Password' }).fill(newPassword);
await page.getByRole('button', { name: 'Reset Password' }).click();
await expect(page.locator('body')).toContainText('Your password has been updated successfully.');
// Assert sign in works.
await apiSignin({
page,
email: user.email,
password: newPassword,
});
await page.waitForURL('/documents');
await expect(page).toHaveURL('/documents');
});
test('[USER] can reset password via user settings', async ({ page }: { page: Page }) => {
const oldPassword = 'Test123!';
const newPassword = 'Test124!';
const user = await seedUser({
password: oldPassword,
});
await apiSignin({
page,
email: user.email,
password: oldPassword,
redirectPath: '/settings/security',
});
await page.getByRole('textbox', { name: 'Current password' }).fill(oldPassword);
await page.getByRole('textbox', { name: 'New password' }).fill(newPassword);
await page.getByRole('textbox', { name: 'Repeat password' }).fill(newPassword);
await page.getByRole('button', { name: 'Update password' }).click();
await expect(page.locator('body')).toContainText('Password updated');
await apiSignout({
page,
});
// Assert sign in works.
await apiSignin({
page,
email: user.email,
password: newPassword,
});
await page.waitForURL('/documents');
await expect(page).toHaveURL('/documents');
});