mirror of
https://github.com/documenso/documenso.git
synced 2025-11-12 15:53:02 +10:00
281 lines
8.3 KiB
TypeScript
281 lines
8.3 KiB
TypeScript
import type { Page } from '@playwright/test';
|
|
import { expect, test } from '@playwright/test';
|
|
import { EnvelopeType } from '@prisma/client';
|
|
|
|
import { getEnvelopeById } from '@documenso/lib/server-only/envelope/get-envelope-by-id';
|
|
import { seedBlankDocument } from '@documenso/prisma/seed/documents';
|
|
import { seedUser } from '@documenso/prisma/seed/users';
|
|
|
|
import { apiSignin } from '../fixtures/authentication';
|
|
|
|
test.describe.configure({ mode: 'parallel', timeout: 60000 });
|
|
|
|
const setupDocument = async (page: Page) => {
|
|
const { user, team } = await seedUser();
|
|
|
|
const document = await seedBlankDocument(user, team.id);
|
|
|
|
await apiSignin({
|
|
page,
|
|
email: user.email,
|
|
redirectPath: `/t/${team.url}/documents/${document.id}/edit`,
|
|
});
|
|
|
|
return { user, team, document };
|
|
};
|
|
|
|
const triggerAutosave = async (page: Page) => {
|
|
await page.locator('body').click({ position: { x: 0, y: 0 } });
|
|
await page.locator('#document-flow-form-container').blur();
|
|
|
|
await page.waitForTimeout(5000);
|
|
};
|
|
|
|
test.describe('AutoSave Settings Step', () => {
|
|
test('should autosave the title change', async ({ page }) => {
|
|
const { user, document, team } = await setupDocument(page);
|
|
|
|
const newDocumentTitle = 'New Document Title';
|
|
|
|
await page.getByRole('textbox', { name: 'Title *' }).fill(newDocumentTitle);
|
|
|
|
await triggerAutosave(page);
|
|
|
|
await expect(async () => {
|
|
const retrieved = await getEnvelopeById({
|
|
id: {
|
|
type: 'envelopeId',
|
|
id: document.id,
|
|
},
|
|
type: EnvelopeType.DOCUMENT,
|
|
userId: user.id,
|
|
teamId: team.id,
|
|
});
|
|
|
|
await expect(page.getByRole('textbox', { name: 'Title *' })).toHaveValue(retrieved.title);
|
|
}).toPass();
|
|
});
|
|
|
|
test('should autosave the language change', async ({ page }) => {
|
|
const { user, document, team } = await setupDocument(page);
|
|
|
|
const newDocumentLanguage = 'French';
|
|
const expectedLanguageCode = 'fr';
|
|
|
|
await page.getByRole('combobox').first().click();
|
|
await page.getByRole('option', { name: newDocumentLanguage }).click();
|
|
|
|
await triggerAutosave(page);
|
|
|
|
await expect(async () => {
|
|
const retrieved = await getEnvelopeById({
|
|
id: {
|
|
type: 'envelopeId',
|
|
id: document.id,
|
|
},
|
|
type: EnvelopeType.DOCUMENT,
|
|
userId: user.id,
|
|
teamId: team.id,
|
|
});
|
|
|
|
expect(retrieved.documentMeta?.language).toBe(expectedLanguageCode);
|
|
}).toPass();
|
|
});
|
|
|
|
test('should autosave the document access change', async ({ page }) => {
|
|
const { user, document, team } = await setupDocument(page);
|
|
|
|
const access = 'Require account';
|
|
const accessValue = 'ACCOUNT';
|
|
|
|
await page.getByRole('combobox').nth(1).click();
|
|
await page.getByRole('option', { name: access }).click();
|
|
|
|
await triggerAutosave(page);
|
|
|
|
await expect(async () => {
|
|
const retrieved = await getEnvelopeById({
|
|
id: {
|
|
type: 'envelopeId',
|
|
id: document.id,
|
|
},
|
|
type: EnvelopeType.DOCUMENT,
|
|
userId: user.id,
|
|
teamId: team.id,
|
|
});
|
|
|
|
expect(retrieved.authOptions?.globalAccessAuth).toContain(accessValue);
|
|
}).toPass();
|
|
});
|
|
|
|
test('should autosave the external ID change', async ({ page }) => {
|
|
const { user, document, team } = await setupDocument(page);
|
|
|
|
const newExternalId = '1234567890';
|
|
|
|
await page.getByRole('button', { name: 'Advanced Options' }).click();
|
|
|
|
await page.getByRole('textbox', { name: 'External ID' }).fill(newExternalId);
|
|
|
|
await triggerAutosave(page);
|
|
|
|
await expect(async () => {
|
|
const retrieved = await getEnvelopeById({
|
|
id: {
|
|
type: 'envelopeId',
|
|
id: document.id,
|
|
},
|
|
type: EnvelopeType.DOCUMENT,
|
|
userId: user.id,
|
|
teamId: team.id,
|
|
});
|
|
|
|
expect(retrieved.externalId).toBe(newExternalId);
|
|
}).toPass();
|
|
});
|
|
|
|
test('should autosave the allowed signature types change', async ({ page }) => {
|
|
const { user, document, team } = await setupDocument(page);
|
|
|
|
await page.getByRole('button', { name: 'Advanced Options' }).click();
|
|
|
|
await page.getByRole('combobox').nth(3).click();
|
|
await page.getByRole('option', { name: 'Draw' }).click();
|
|
await page.getByRole('option', { name: 'Type' }).click();
|
|
|
|
await triggerAutosave(page);
|
|
|
|
await expect(async () => {
|
|
const retrieved = await getEnvelopeById({
|
|
id: {
|
|
type: 'envelopeId',
|
|
id: document.id,
|
|
},
|
|
type: EnvelopeType.DOCUMENT,
|
|
userId: user.id,
|
|
teamId: team.id,
|
|
});
|
|
|
|
expect(retrieved.documentMeta?.drawSignatureEnabled).toBe(false);
|
|
expect(retrieved.documentMeta?.typedSignatureEnabled).toBe(false);
|
|
expect(retrieved.documentMeta?.uploadSignatureEnabled).toBe(true);
|
|
}).toPass();
|
|
});
|
|
|
|
test('should autosave the date format change', async ({ page }) => {
|
|
const { user, document, team } = await setupDocument(page);
|
|
|
|
await page.getByRole('button', { name: 'Advanced Options' }).click();
|
|
|
|
await page.getByRole('combobox').nth(5).click();
|
|
await page.getByRole('option', { name: 'ISO 8601', exact: true }).click();
|
|
|
|
await triggerAutosave(page);
|
|
|
|
await expect(async () => {
|
|
const retrieved = await getEnvelopeById({
|
|
id: {
|
|
type: 'envelopeId',
|
|
id: document.id,
|
|
},
|
|
type: EnvelopeType.DOCUMENT,
|
|
userId: user.id,
|
|
teamId: team.id,
|
|
});
|
|
|
|
expect(retrieved.documentMeta?.dateFormat).toBe("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
|
|
}).toPass();
|
|
});
|
|
|
|
test('should autosave the timezone change', async ({ page }) => {
|
|
const { user, document, team } = await setupDocument(page);
|
|
|
|
await page.getByRole('button', { name: 'Advanced Options' }).click();
|
|
|
|
await page.getByRole('combobox').nth(6).click();
|
|
await page.getByRole('option', { name: 'Europe/London' }).click();
|
|
|
|
await triggerAutosave(page);
|
|
|
|
await expect(async () => {
|
|
const retrieved = await getEnvelopeById({
|
|
id: {
|
|
type: 'envelopeId',
|
|
id: document.id,
|
|
},
|
|
type: EnvelopeType.DOCUMENT,
|
|
userId: user.id,
|
|
teamId: team.id,
|
|
});
|
|
|
|
expect(retrieved.documentMeta?.timezone).toBe('Europe/London');
|
|
}).toPass();
|
|
});
|
|
|
|
test('should autosave the redirect URL change', async ({ page }) => {
|
|
const { user, document, team } = await setupDocument(page);
|
|
|
|
const newRedirectUrl = 'https://documenso.com/test/';
|
|
|
|
await page.getByRole('button', { name: 'Advanced Options' }).click();
|
|
|
|
await page.getByRole('textbox', { name: 'Redirect URL' }).fill(newRedirectUrl);
|
|
|
|
await triggerAutosave(page);
|
|
|
|
await expect(async () => {
|
|
const retrieved = await getEnvelopeById({
|
|
id: {
|
|
type: 'envelopeId',
|
|
id: document.id,
|
|
},
|
|
type: EnvelopeType.DOCUMENT,
|
|
userId: user.id,
|
|
teamId: team.id,
|
|
});
|
|
|
|
expect(retrieved.documentMeta?.redirectUrl).toBe(newRedirectUrl);
|
|
}).toPass();
|
|
});
|
|
|
|
test('should autosave multiple field changes together', async ({ page }) => {
|
|
const { user, document, team } = await setupDocument(page);
|
|
|
|
const newTitle = 'Updated Document Title';
|
|
await page.getByRole('textbox', { name: 'Title *' }).fill(newTitle);
|
|
|
|
await page.getByRole('combobox').first().click();
|
|
await page.getByRole('option', { name: 'German' }).click();
|
|
|
|
await page.getByRole('combobox').nth(1).click();
|
|
await page.getByRole('option', { name: 'Require account' }).click();
|
|
|
|
await page.getByRole('button', { name: 'Advanced Options' }).click();
|
|
const newExternalId = 'MULTI-TEST-123';
|
|
await page.getByRole('textbox', { name: 'External ID' }).fill(newExternalId);
|
|
|
|
await page.getByRole('combobox').nth(6).click();
|
|
await page.getByRole('option', { name: 'Europe/Berlin' }).click();
|
|
|
|
await triggerAutosave(page);
|
|
|
|
await expect(async () => {
|
|
const retrieved = await getEnvelopeById({
|
|
id: {
|
|
type: 'envelopeId',
|
|
id: document.id,
|
|
},
|
|
type: EnvelopeType.DOCUMENT,
|
|
userId: user.id,
|
|
teamId: team.id,
|
|
});
|
|
|
|
expect(retrieved.title).toBe(newTitle);
|
|
expect(retrieved.documentMeta?.language).toBe('de');
|
|
expect(retrieved.authOptions?.globalAccessAuth).toContain('ACCOUNT');
|
|
expect(retrieved.externalId).toBe(newExternalId);
|
|
expect(retrieved.documentMeta?.timezone).toBe('Europe/Berlin');
|
|
}).toPass();
|
|
});
|
|
});
|