diff --git a/test-playwright/05-invite.spec.ts b/test-playwright/05-invite.spec.ts index 821f7c39..d0cf5b19 100644 --- a/test-playwright/05-invite.spec.ts +++ b/test-playwright/05-invite.spec.ts @@ -8,6 +8,7 @@ * - Custom expiration date * 2. The invitation appears in the list after creation * 3. A new user can accept the invitation and become connected + * 4. The new user can create gift records from the front page * * Test Flow: * 1. Imports User 0 (test account) @@ -19,6 +20,8 @@ * 4. Creates a new user with Ethr DID * 5. Accepts the invitation as the new user * 6. Verifies the connection is established + * 7. Tests that the new user can create gift records from the front page + * 8. Verifies the gift appears in the home view * * Related Files: * - Frontend invite handling: src/libs/endorserServer.ts @@ -29,7 +32,7 @@ * @requires ./testUtils - For user management utilities */ import { test, expect } from '@playwright/test'; -import { deleteContact, generateNewEthrUser, generateRandomString, importUser, switchToUser } from './testUtils'; +import { createGiftFromFrontPageForNewUser, deleteContact, generateNewEthrUser, generateRandomString, importUser, switchToUser } from './testUtils'; test('Check User 0 can invite someone', async ({ page }) => { await importUser(page, '00'); @@ -58,4 +61,7 @@ test('Check User 0 can invite someone', async ({ page }) => { await page.locator('button:has-text("Save")').click(); await expect(page.locator('button:has-text("Save")')).toBeHidden(); await expect(page.locator(`li:has-text("My pal User #0")`)).toBeVisible(); + + // Verify the new user can create a gift record from the front page + const giftTitle = await createGiftFromFrontPageForNewUser(page, `Gift from new user ${neighborNum}`); }); diff --git a/test-playwright/testUtils.ts b/test-playwright/testUtils.ts index 6d232a99..d0128a4e 100644 --- a/test-playwright/testUtils.ts +++ b/test-playwright/testUtils.ts @@ -1,4 +1,5 @@ import { expect, Page } from "@playwright/test"; +import { UNNAMED_ENTITY_NAME } from '../src/constants/entities'; // Get test user data based on the ID. // '01' -> user 111 @@ -215,3 +216,44 @@ export function isResourceIntensiveTest(testPath: string): boolean { testPath.includes("40-add-contact") ); } + +/** + * Create a gift record from the front page + * @param page - Playwright page object + * @param giftTitle - Optional custom title, defaults to "Gift " + random string + * @param amount - Optional amount, defaults to random 1-99 + * @returns Promise resolving to the created gift title + */ +export async function createGiftFromFrontPageForNewUser( + page: Page, + giftTitle?: string, + amount?: number +): Promise { + // Generate random values if not provided + const randomString = Math.random().toString(36).substring(2, 6); + const finalTitle = giftTitle || `Gift ${randomString}`; + const finalAmount = amount || Math.floor(Math.random() * 99) + 1; + + // Navigate to home page and close onboarding + await page.goto('./'); + await page.getByTestId('closeOnboardingAndFinish').click(); + + // Start gift creation flow + await page.getByRole('button', { name: 'Person' }).click(); + await page.getByRole('listitem').filter({ hasText: UNNAMED_ENTITY_NAME }).locator('svg').click(); + + // Fill gift details + await page.getByPlaceholder('What was given').fill(finalTitle); + await page.getByRole('spinbutton').fill(finalAmount.toString()); + + // Submit gift + await page.getByRole('button', { name: 'Sign & Send' }).click(); + + // Verify success + await expect(page.getByText('That gift was recorded.')).toBeVisible(); + await page.locator('div[role="alert"] button > svg.fa-xmark').click(); // dismiss info alert + + // Verify the gift appears in the home view + await page.goto('./'); + await expect(page.locator('ul#listLatestActivity li').filter({ hasText: giftTitle })).toBeVisible(); +}