mirror of
https://github.com/documenso/documenso.git
synced 2026-07-27 02:15:05 +10:00
ba0dead96f
Currently direct templates can be created without the required signatures fields for signers. This means that the document can be fully signed by everyone but will ultimately fail the sealing step which leaves the document in an unrecoverable state.
96 lines
3.6 KiB
TypeScript
96 lines
3.6 KiB
TypeScript
import { NEXT_PUBLIC_WEBAPP_URL } from '@documenso/lib/constants/app';
|
|
import { prisma } from '@documenso/prisma';
|
|
import { seedDirectTemplate } from '@documenso/prisma/seed/templates';
|
|
import { seedUser } from '@documenso/prisma/seed/users';
|
|
import { expect, test } from '@playwright/test';
|
|
|
|
import { apiSignin } from '../fixtures/authentication';
|
|
import { expectToastTextToBeVisible } from '../fixtures/generic';
|
|
import { signSignaturePad } from '../fixtures/signature';
|
|
|
|
test('[PUBLIC_PROFILE]: create team profile', async ({ page }) => {
|
|
const { user, team } = await seedUser();
|
|
|
|
// Create direct template.
|
|
const directTemplate = await seedDirectTemplate({
|
|
userId: user.id,
|
|
teamId: team.id,
|
|
});
|
|
|
|
await apiSignin({
|
|
page,
|
|
email: user.email,
|
|
redirectPath: `/t/${team.url}/settings/public-profile`,
|
|
});
|
|
|
|
const publicProfileUrl = team.url;
|
|
const publicProfileBio = `public-profile-bio`;
|
|
|
|
await page.getByRole('textbox', { name: 'Bio' }).click();
|
|
await page.getByRole('textbox', { name: 'Bio' }).fill(publicProfileBio);
|
|
|
|
await page.getByRole('button', { name: 'Update' }).click();
|
|
|
|
await expect(page.getByRole('status').first()).toContainText('Your public profile has been updated.');
|
|
|
|
// Link direct template to public profile.
|
|
await page.getByRole('button', { name: 'Link template' }).click();
|
|
await page.getByRole('cell', { name: directTemplate.title }).click();
|
|
await page.getByRole('button', { name: 'Continue' }).click();
|
|
|
|
await page.getByRole('textbox', { name: 'Title *' }).fill('public-direct-template-title');
|
|
await page.getByRole('textbox', { name: 'Description *' }).fill('public-direct-template-description');
|
|
await page.getByRole('button', { name: 'Update' }).click();
|
|
|
|
// Wait for toast
|
|
await expectToastTextToBeVisible(page, 'Template has been updated');
|
|
|
|
// Check that public profile is disabled.
|
|
await page.goto(`${NEXT_PUBLIC_WEBAPP_URL()}/p/${publicProfileUrl}`);
|
|
await expect(page.locator('body')).toContainText('404 Profile not found');
|
|
|
|
// Go back to public profile page.
|
|
await page.goto(`${NEXT_PUBLIC_WEBAPP_URL()}/t/${team.url}/settings/public-profile`);
|
|
await page.getByRole('switch').click();
|
|
|
|
// Expect profile to be enabled via db.
|
|
await expect
|
|
.poll(
|
|
async () => {
|
|
const profile = await prisma.teamProfile.findFirst({
|
|
where: { teamId: team.id },
|
|
});
|
|
return profile?.enabled;
|
|
},
|
|
{
|
|
timeout: 1000,
|
|
},
|
|
)
|
|
.toBeTruthy();
|
|
|
|
// Assert values.
|
|
await page.goto(`${NEXT_PUBLIC_WEBAPP_URL()}/p/${publicProfileUrl}`);
|
|
await expect(page.getByRole('main')).toContainText(publicProfileBio);
|
|
await expect(page.locator('body')).toContainText('public-direct-template-title');
|
|
await expect(page.locator('body')).toContainText('public-direct-template-description');
|
|
|
|
const directSignatureField = directTemplate.fields[0];
|
|
|
|
if (!directSignatureField) {
|
|
throw new Error('Expected seeded direct template signature field to exist');
|
|
}
|
|
|
|
await page.getByRole('link', { name: 'Sign' }).click();
|
|
await page.getByRole('button', { name: 'Continue' }).click();
|
|
|
|
await signSignaturePad(page);
|
|
await page.locator(`#field-${directSignatureField.id}`).getByRole('button').click();
|
|
await expect(page.locator(`#field-${directSignatureField.id}`)).toHaveAttribute('data-inserted', 'true');
|
|
|
|
await page.getByRole('button', { name: 'Complete' }).click();
|
|
await page.getByRole('button', { name: 'Sign' }).click();
|
|
|
|
await expect(page.getByRole('heading', { name: 'Document Signed' })).toBeVisible();
|
|
await expect(page.getByRole('heading')).toContainText('Document Signed');
|
|
});
|