|
|
|
/**
|
|
|
|
* @file Invitation Flow Test
|
|
|
|
* @description Tests the end-to-end functionality of inviting a new user to TimeSafari
|
|
|
|
*
|
|
|
|
* This test verifies:
|
|
|
|
* 1. User can create a new invitation with:
|
|
|
|
* - Custom notes
|
|
|
|
* - Custom expiration date
|
|
|
|
* 2. The invitation appears in the list after creation
|
|
|
|
* 3. A new user can accept the invitation and become connected
|
|
|
|
*
|
|
|
|
* Test Flow:
|
|
|
|
* 1. Imports User 0 (test account)
|
|
|
|
* 2. Creates an invitation with:
|
|
|
|
* - Random neighbor identifier
|
|
|
|
* - 14 day expiration
|
|
|
|
* - Custom notes
|
|
|
|
* 3. Verifies the invite appears in the list
|
|
|
|
* 4. Creates a new user with Ethr DID
|
|
|
|
* 5. Accepts the invitation as the new user
|
|
|
|
* 6. Verifies the connection is established
|
|
|
|
*
|
|
|
|
* Related Files:
|
|
|
|
* - Frontend invite handling: src/libs/endorserServer.ts
|
|
|
|
* - JWT creation: sw_scripts/safari-notifications.js
|
|
|
|
*
|
|
|
|
* @see Documentation on invitation flows in usage-guide.md
|
|
|
|
* @requires @playwright/test
|
|
|
|
* @requires ./testUtils - For user management utilities
|
|
|
|
*/
|
|
|
|
import { test, expect } from '@playwright/test';
|
|
|
|
import { deleteContact, generateNewEthrUser, generateRandomString, importUser, switchToUser } from './testUtils';
|
|
|
|
|
|
|
|
test('Check User 0 can invite someone', async ({ page }) => {
|
|
|
|
await importUser(page, '00');
|
|
|
|
await page.goto('./invite-one');
|
|
|
|
await page.locator('button > svg.fa-plus').click();
|
|
|
|
const neighborNum = await generateRandomString(5);
|
|
|
|
await page.getByPlaceholder('Notes', { exact: true }).fill(`Neighbor ${neighborNum}`);
|
|
|
|
// get the expiration date input and set to 14 days from now
|
|
|
|
const expirationDate = new Date(Date.now() + 14 * 24 * 60 * 60 * 1000);
|
|
|
|
await page.locator('input[type="date"]').fill(expirationDate.toISOString().split('T')[0]);
|
|
|
|
await page.locator('button:has-text("Save")').click();
|
|
|
|
await expect(page.locator('div[role="alert"] button:has-text("Yes")')).toBeHidden();
|
|
|
|
|
|
|
|
// check that the invite is in the list
|
|
|
|
const newInviteLine = page.locator(`td:has-text("Neighbor ${neighborNum}")`);
|
|
|
|
await expect(newInviteLine).toBeVisible();
|
|
|
|
// retrieve the link from the title
|
|
|
|
const inviteLink = await newInviteLine.getAttribute('data-testId');
|
|
|
|
expect(inviteLink).not.toBeNull();
|
|
|
|
|
|
|
|
// become the new user and accept the invite
|
|
|
|
const newDid = await generateNewEthrUser(page);
|
|
|
|
await switchToUser(page, newDid);
|
|
|
|
await page.goto(inviteLink as string);
|
|
|
|
await page.getByPlaceholder('Name', { exact: true }).fill(`My pal User #0`);
|
|
|
|
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();
|
|
|
|
});
|