mirror of
https://github.com/documenso/documenso.git
synced 2026-07-25 09:25:08 +10:00
102 lines
3.2 KiB
TypeScript
102 lines
3.2 KiB
TypeScript
import { FIELD_SIGNATURE_META_DEFAULT_VALUES } from '@documenso/lib/types/field-meta';
|
|
import { prisma } from '@documenso/prisma';
|
|
import { seedTemplate } from '@documenso/prisma/seed/templates';
|
|
import { seedUser } from '@documenso/prisma/seed/users';
|
|
import { expect, test } from '@playwright/test';
|
|
import { DocumentStatus, FieldType } from '@prisma/client';
|
|
|
|
import { apiSignin } from '../fixtures/authentication';
|
|
import { expectToastTextToBeVisible } from '../fixtures/generic';
|
|
|
|
const seedSignatureFieldForRecipient = async (options: { envelopeId: string; recipientId: number }) => {
|
|
const envelopeItem = await prisma.envelopeItem.findFirstOrThrow({
|
|
where: { envelopeId: options.envelopeId },
|
|
});
|
|
|
|
return await prisma.field.create({
|
|
data: {
|
|
envelopeId: options.envelopeId,
|
|
envelopeItemId: envelopeItem.id,
|
|
recipientId: options.recipientId,
|
|
type: FieldType.SIGNATURE,
|
|
page: 1,
|
|
positionX: 5,
|
|
positionY: 10,
|
|
width: 20,
|
|
height: 5,
|
|
customText: '',
|
|
inserted: false,
|
|
fieldMeta: FIELD_SIGNATURE_META_DEFAULT_VALUES,
|
|
},
|
|
});
|
|
};
|
|
|
|
test('[TEMPLATE_USE]: shows missing signature fields error when sending a template without signature fields', async ({
|
|
page,
|
|
}) => {
|
|
const { user, team } = await seedUser();
|
|
|
|
// seedTemplate creates one SIGNER recipient and no fields.
|
|
await seedTemplate({
|
|
title: 'Template missing signature fields',
|
|
userId: user.id,
|
|
teamId: team.id,
|
|
});
|
|
|
|
await apiSignin({
|
|
page,
|
|
email: user.email,
|
|
redirectPath: `/t/${team.url}/templates`,
|
|
});
|
|
|
|
await page.getByRole('button', { name: 'Use Template' }).click();
|
|
await expect(page.getByRole('heading', { name: 'Create document from template' })).toBeVisible();
|
|
|
|
// Enable distribution so the document is sent on creation.
|
|
await page.locator('#distributeDocument').click();
|
|
await page.getByRole('button', { name: 'Create and send' }).click();
|
|
|
|
await expectToastTextToBeVisible(page, 'Missing signature fields');
|
|
await expectToastTextToBeVisible(
|
|
page,
|
|
'The document could not be sent because some signers do not have a signature field',
|
|
);
|
|
});
|
|
|
|
test('[TEMPLATE_USE]: creates and sends a document when signers have signature fields', async ({ page }) => {
|
|
const { user, team } = await seedUser();
|
|
|
|
const template = await seedTemplate({
|
|
title: 'Template with signature fields',
|
|
userId: user.id,
|
|
teamId: team.id,
|
|
});
|
|
|
|
await seedSignatureFieldForRecipient({
|
|
envelopeId: template.id,
|
|
recipientId: template.recipients[0].id,
|
|
});
|
|
|
|
await apiSignin({
|
|
page,
|
|
email: user.email,
|
|
redirectPath: `/t/${team.url}/templates`,
|
|
});
|
|
|
|
await page.getByRole('button', { name: 'Use Template' }).click();
|
|
await expect(page.getByRole('heading', { name: 'Create document from template' })).toBeVisible();
|
|
|
|
await page.locator('#distributeDocument').click();
|
|
await page.getByRole('button', { name: 'Create and send' }).click();
|
|
|
|
await page.waitForURL(new RegExp(`/t/${team.url}/documents/envelope_.*`));
|
|
|
|
const envelopeId = page.url().split('/').pop()?.split('?')[0];
|
|
|
|
const envelope = await prisma.envelope.findFirstOrThrow({
|
|
where: { id: envelopeId },
|
|
});
|
|
|
|
expect(envelope.status).toBe(DocumentStatus.PENDING);
|
|
});
|