mirror of
https://github.com/documenso/documenso.git
synced 2026-07-24 08:54:20 +10:00
77 lines
3.1 KiB
TypeScript
77 lines
3.1 KiB
TypeScript
import { seedDirectTemplate } from '@documenso/prisma/seed/templates';
|
|
import { seedUser } from '@documenso/prisma/seed/users';
|
|
import { expect, type Page, test } from '@playwright/test';
|
|
|
|
import { apiSignin } from '../fixtures/authentication';
|
|
import { clickEnvelopeEditorStep } from '../fixtures/envelope-editor';
|
|
|
|
const INVALID_DIRECT_TEMPLATE_ALERT_TITLE = 'Invalid direct link template';
|
|
|
|
/**
|
|
* Place a field on the PDF canvas in the envelope editor.
|
|
*/
|
|
const placeFieldOnPdf = async (root: Page, fieldName: 'Signature' | 'Text', position: { x: number; y: number }) => {
|
|
await root.getByRole('button', { name: fieldName, exact: true }).click();
|
|
|
|
const canvas = root.locator('.konva-container canvas').first();
|
|
await expect(canvas).toBeVisible();
|
|
await canvas.click({ position });
|
|
};
|
|
|
|
/**
|
|
* Seed a V2 direct template and open it in the native template editor.
|
|
*
|
|
* Only the native template editor is covered here: direct links only exist
|
|
* for templates and are not part of the embedded editor surfaces.
|
|
*/
|
|
const openDirectTemplateEditor = async (page: Page, options: { createDirectRecipientSignatureField: boolean }) => {
|
|
const { user, team } = await seedUser();
|
|
|
|
const template = await seedDirectTemplate({
|
|
title: `E2E Direct Template Validation ${Date.now()}`,
|
|
userId: user.id,
|
|
teamId: team.id,
|
|
internalVersion: 2,
|
|
createDirectRecipientSignatureField: options.createDirectRecipientSignatureField,
|
|
});
|
|
|
|
await apiSignin({
|
|
page,
|
|
email: user.email,
|
|
redirectPath: `/t/${team.url}/templates/${template.id}/edit`,
|
|
});
|
|
|
|
return { user, team, template };
|
|
};
|
|
|
|
test.describe('template editor', () => {
|
|
test('shows invalid direct template warning when a signer has no signature field', async ({ page }) => {
|
|
await openDirectTemplateEditor(page, { createDirectRecipientSignatureField: false });
|
|
|
|
await expect(page.getByText(INVALID_DIRECT_TEMPLATE_ALERT_TITLE)).toBeVisible();
|
|
await expect(page.getByText('are missing a signature field')).toBeVisible();
|
|
});
|
|
|
|
test('does not show the warning when all signers have signature fields', async ({ page }) => {
|
|
await openDirectTemplateEditor(page, { createDirectRecipientSignatureField: true });
|
|
|
|
// Wait for the editor to render before asserting the banner is absent.
|
|
await expect(page.getByTestId('envelope-editor-step-upload')).toBeVisible();
|
|
await expect(page.getByText(INVALID_DIRECT_TEMPLATE_ALERT_TITLE)).not.toBeVisible();
|
|
});
|
|
|
|
test('warning disappears after placing a signature field', async ({ page }) => {
|
|
await openDirectTemplateEditor(page, { createDirectRecipientSignatureField: false });
|
|
|
|
await expect(page.getByText(INVALID_DIRECT_TEMPLATE_ALERT_TITLE)).toBeVisible();
|
|
|
|
// Place a signature field for the direct recipient (auto-selected single recipient).
|
|
await clickEnvelopeEditorStep(page, 'addFields');
|
|
await expect(page.locator('.konva-container canvas').first()).toBeVisible();
|
|
await placeFieldOnPdf(page, 'Signature', { x: 120, y: 140 });
|
|
|
|
// The banner clears once the field is autosaved and the envelope state updates.
|
|
await expect(page.getByText(INVALID_DIRECT_TEMPLATE_ALERT_TITLE)).not.toBeVisible({ timeout: 15_000 });
|
|
});
|
|
});
|