From 369e16afabb6514d5b56b2d283db0c28fe11db6d Mon Sep 17 00:00:00 2001 From: Catalin Pit <25515812+catalinpit@users.noreply.github.com> Date: Tue, 11 Feb 2025 16:52:02 +0200 Subject: [PATCH] chore: template fields testing --- .../template-fields-step.spec.ts | 292 ++++++++++++++++++ 1 file changed, 292 insertions(+) create mode 100644 packages/app-tests/e2e/templates-flow/template-fields-step.spec.ts diff --git a/packages/app-tests/e2e/templates-flow/template-fields-step.spec.ts b/packages/app-tests/e2e/templates-flow/template-fields-step.spec.ts new file mode 100644 index 000000000..807c3f5a8 --- /dev/null +++ b/packages/app-tests/e2e/templates-flow/template-fields-step.spec.ts @@ -0,0 +1,292 @@ +import { expect, test } from '@playwright/test'; + +import { seedBlankTemplate } from '@documenso/prisma/seed/templates'; +import { seedUser } from '@documenso/prisma/seed/users'; + +import { apiSignin } from '../fixtures/authentication'; + +test.describe.configure({ mode: 'parallel' }); + +test('[TEMPLATE_FLOW]: add signature fields for unique recipients', async ({ page }) => { + const user = await seedUser(); + const template = await seedBlankTemplate(user); + + await apiSignin({ + page, + email: user.email, + redirectPath: `/templates/${template.id}/edit`, + }); + + await page.getByRole('button', { name: 'Continue' }).click(); + await expect(page.getByRole('heading', { name: 'Add Placeholders' })).toBeVisible(); + + // Add 2 placeholder recipients. + await page.getByPlaceholder('Email').fill('recipient1@documenso.com'); + await page.getByPlaceholder('Name').fill('Recipient 1'); + + await page.getByRole('button', { name: 'Add Placeholder Recipient' }).click(); + + await page.getByPlaceholder('Email').nth(1).fill('recipient2@documenso.com'); + await page.getByPlaceholder('Name').nth(1).fill('Recipient 2'); + + // Advanced settings should not be visible for non EE users. + await expect(page.getByLabel('Show advanced settings')).toBeHidden(); + + await page.getByRole('button', { name: 'Continue' }).click(); + await expect(page.getByRole('heading', { name: 'Add Fields' })).toBeVisible(); + + await page.getByRole('button', { name: 'Signature' }).click(); + await page.locator('canvas').click({ + position: { + x: 100, + y: 100, + }, + }); + + await page.getByRole('combobox').click(); + await page.getByRole('option', { name: 'Recipient 2 (recipient2@documenso.com)' }).click(); + + await page.getByRole('button', { name: 'Signature' }).click(); + await page.locator('canvas').click({ + position: { + x: 200, + y: 100, + }, + }); + + await page.getByRole('button', { name: 'Save Template' }).click(); + + await page.waitForURL('**/templates'); + + await expect(page.getByRole('link', { name: template.title })).toBeVisible(); +}); + +test('[TEMPLATE_FLOW]: add signature fields for duplicate recipients', async ({ page }) => { + const user = await seedUser(); + const template = await seedBlankTemplate(user); + + await apiSignin({ + page, + email: user.email, + redirectPath: `/templates/${template.id}/edit`, + }); + + await page.getByRole('button', { name: 'Continue' }).click(); + await expect(page.getByRole('heading', { name: 'Add Placeholders' })).toBeVisible(); + + await page.getByPlaceholder('Email').fill('recipient@documenso.com'); + await page.getByPlaceholder('Name').fill('Recipient'); + + await page.getByRole('button', { name: 'Add Placeholder Recipient' }).click(); + + await page.getByPlaceholder('Email').nth(1).fill('recipient@documenso.com'); + await page.getByPlaceholder('Name').nth(1).fill('Recipient'); + + await page.getByRole('button', { name: 'Add Placeholder Recipient' }).click(); + + await page.getByPlaceholder('Email').nth(2).fill('recipient@documenso.com'); + await page.getByPlaceholder('Name').nth(2).fill('Recipient'); + + await page.getByRole('button', { name: 'Continue' }).click(); + await expect(page.getByRole('heading', { name: 'Add Fields' })).toBeVisible(); + + // Add signature fields for each recipient + await page.getByRole('button', { name: 'Signature' }).click(); + await page.locator('canvas').click({ + position: { + x: 100, + y: 100, + }, + }); + + await page.getByRole('combobox').click(); + await page.getByRole('option', { name: 'Recipient (recipient@documenso.com)' }).nth(1).click(); + + await page.getByRole('button', { name: 'Signature' }).click(); + await page.locator('canvas').click({ + position: { + x: 200, + y: 100, + }, + }); + + await page.getByRole('combobox').click(); + await page.getByRole('option', { name: 'Recipient (recipient@documenso.com)' }).nth(2).click(); + + await page.getByRole('button', { name: 'Signature' }).click(); + await page.locator('canvas').click({ + position: { + x: 300, + y: 100, + }, + }); + + await page.getByRole('button', { name: 'Save Template' }).click(); + + await page.waitForURL('**/templates'); + + await expect(page.getByRole('link', { name: template.title })).toBeVisible(); +}); + +test('[TEMPLATE_FLOW]: add signature fields for recipients with different roles', async ({ + page, +}) => { + const user = await seedUser(); + const template = await seedBlankTemplate(user); + + await apiSignin({ + page, + email: user.email, + redirectPath: `/templates/${template.id}/edit`, + }); + + await page.getByRole('button', { name: 'Continue' }).click(); + await expect(page.getByRole('heading', { name: 'Add Placeholders' })).toBeVisible(); + + // Add a placeholder recipient + await page.getByPlaceholder('Email').fill('recipient@documenso.com'); + await page.getByPlaceholder('Name').fill('Documenso Recipient'); + await page.getByRole('combobox').click(); + await page.getByLabel('Needs to sign').click(); + await page.getByRole('button', { name: 'Add Placeholder Recipient' }).click(); + + // Add an approver + await page.getByPlaceholder('Email').nth(1).fill('recipient@documenso.com'); + await page.getByPlaceholder('Name').nth(1).fill('Documenso Recipient'); + await page.getByRole('combobox').nth(1).click(); + await page.getByLabel('Needs to approve').click(); + await page.getByRole('button', { name: 'Add Placeholder Recipient' }).click(); + + // Add a viewer + await page.getByPlaceholder('Email').nth(2).fill('recipient@documenso.com'); + await page.getByPlaceholder('Name').nth(2).fill('Documenso Recipient'); + await page.getByRole('combobox').nth(2).click(); + await page.getByLabel('Needs to view').click(); + await page.getByRole('button', { name: 'Add Placeholder Recipient' }).click(); + + // Add a CC + await page.getByPlaceholder('Email').nth(3).fill('recipient@documenso.com'); + await page.getByPlaceholder('Name').nth(3).fill('Documenso Recipient'); + await page.getByRole('combobox').nth(3).click(); + await page.getByLabel('Receives copy').click(); + + await page.getByRole('button', { name: 'Continue' }).click(); + await expect(page.getByRole('heading', { name: 'Add Fields' })).toBeVisible(); + + // Add signature fields for signer and approver + await page.getByRole('button', { name: 'Signature' }).click(); + await page.locator('canvas').click({ + position: { + x: 100, + y: 100, + }, + }); + + await page.getByRole('combobox').click(); + await page + .getByRole('option', { name: 'Documenso Recipient (recipient@documenso.com)' }) + .nth(1) + .click(); + + await page.getByRole('button', { name: 'Signature' }).click(); + await page.locator('canvas').click({ + position: { + x: 200, + y: 100, + }, + }); + + await page.getByRole('button', { name: 'Save Template' }).click(); + + await page.waitForURL('**/templates'); + + await expect(page.getByRole('link', { name: template.title })).toBeVisible(); +}); + +test('[TEMPLATE_FLOW]: add signature fields for mixed recipients', async ({ page }) => { + const user = await seedUser(); + const template = await seedBlankTemplate(user); + + await apiSignin({ + page, + email: user.email, + redirectPath: `/templates/${template.id}/edit`, + }); + + await page.getByRole('button', { name: 'Continue' }).click(); + await expect(page.getByRole('heading', { name: 'Add Placeholders' })).toBeVisible(); + + // First placeholder recipient (unique) + await page.getByPlaceholder('Email').fill('recipient1@documenso.com'); + await page.getByPlaceholder('Name').fill('First Recipient'); + await page.getByRole('combobox').click(); + await page.getByLabel('Needs to approve').click(); + await page.getByRole('button', { name: 'Add Placeholder Recipient' }).click(); + + // Second placeholder recipient (duplicate of first) + await page.getByPlaceholder('Email').nth(1).fill('recipient1@documenso.com'); + await page.getByPlaceholder('Name').nth(1).fill('First Recipient'); + await page.getByRole('combobox').nth(1).click(); + await page.getByLabel('Needs to view').click(); + await page.getByRole('button', { name: 'Add Placeholder Recipient' }).click(); + + // Third placeholder recipient (unique) + await page.getByPlaceholder('Email').nth(2).fill('recipient2@documenso.com'); + await page.getByPlaceholder('Name').nth(2).fill('Second Recipient'); + await page.getByRole('combobox').nth(2).click(); + await page.getByLabel('Needs to sign').click(); + await page.getByRole('button', { name: 'Add Placeholder Recipient' }).click(); + + // Fourth placeholder recipient (duplicate of first) + await page.getByPlaceholder('Email').nth(3).fill('recipient1@documenso.com'); + await page.getByPlaceholder('Name').nth(3).fill('First Recipient'); + await page.getByRole('combobox').nth(3).click(); + await page.getByLabel('Receives copy').click(); + await page.getByRole('button', { name: 'Add Placeholder Recipient' }).click(); + + // Fifth placeholder recipient (unique) + await page.getByPlaceholder('Email').nth(4).fill('recipient3@documenso.com'); + await page.getByPlaceholder('Name').nth(4).fill('Third Recipient'); + await page.getByRole('combobox').nth(4).click(); + await page.getByLabel('Needs to sign').click(); + + await page.getByRole('button', { name: 'Continue' }).click(); + await expect(page.getByRole('heading', { name: 'Add Fields' })).toBeVisible(); + + // Add signature fields for approver and signers + await page.getByRole('button', { name: 'Signature' }).click(); + await page.locator('canvas').click({ + position: { + x: 100, + y: 100, + }, + }); + + await page.getByRole('combobox').click(); + await page.getByRole('option', { name: 'Second Recipient (recipient2@documenso.com)' }).click(); + + await page.getByRole('button', { name: 'Signature' }).click(); + await page.locator('canvas').click({ + position: { + x: 200, + y: 100, + }, + }); + + await page.getByRole('combobox').click(); + await page.getByRole('option', { name: 'Third Recipient (recipient3@documenso.com)' }).click(); + + await page.getByRole('button', { name: 'Signature' }).click(); + await page.locator('canvas').click({ + position: { + x: 300, + y: 100, + }, + }); + + await page.getByRole('button', { name: 'Save Template' }).click(); + + await page.waitForURL('**/templates'); + + await expect(page.getByRole('link', { name: template.title })).toBeVisible(); +});