You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							64 lines
						
					
					
						
							2.7 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							64 lines
						
					
					
						
							2.7 KiB
						
					
					
				
								/**
							 | 
						|
								 * @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);
							 | 
						|
								  
							 | 
						|
								  // Wait for the ContactNameDialog to appear before trying to fill the Name field
							 | 
						|
								  await expect(page.getByPlaceholder('Name', { exact: true })).toBeVisible();
							 | 
						|
								  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();
							 | 
						|
								});
							 | 
						|
								
							 |