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.
		
		
		
		
		
			
		
			
				
					
					
						
							88 lines
						
					
					
						
							3.1 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							88 lines
						
					
					
						
							3.1 KiB
						
					
					
				
								/**
							 | 
						|
								 * End-to-End Contact Management Tests
							 | 
						|
								 * 
							 | 
						|
								 * Comprehensive test suite for Time Safari's contact management and gift recording features.
							 | 
						|
								 * Tests run sequentially to avoid state conflicts and API rate limits.
							 | 
						|
								 * 
							 | 
						|
								 * Test Flow:
							 | 
						|
								 * 1. Contact Creation & Verification
							 | 
						|
								 *    - Add contact using DID
							 | 
						|
								 *    - Verify contact appears in list
							 | 
						|
								 *    - Rename contact and verify change
							 | 
						|
								 *    - Check contact appears in "Record Something" section
							 | 
						|
								 * 
							 | 
						|
								 * 2. Gift Recording Flow
							 | 
						|
								 *    - Generate unique gift details
							 | 
						|
								 *    - Record gift to contact
							 | 
						|
								 *    - Verify gift confirmation
							 | 
						|
								 *    - Check gift appears in activity feed
							 | 
						|
								 * 
							 | 
						|
								 * 3. Contact Import/Export Tests
							 | 
						|
								 *    - Copy contact details to clipboard
							 | 
						|
								 *    - Delete existing contact
							 | 
						|
								 *    - Import contact from clipboard
							 | 
						|
								 *    - Verify imported contact details
							 | 
						|
								 * 
							 | 
						|
								 * Test Data Generation:
							 | 
						|
								 * - Gift titles: "Gift " + 16-char random string
							 | 
						|
								 * - Gift amounts: Random 1-99 value
							 | 
						|
								 * - Contact names: Predefined test values
							 | 
						|
								 * - DIDs: Uses test accounts (e.g., did:ethr:0x000...)
							 | 
						|
								 * 
							 | 
						|
								 * Key Selectors:
							 | 
						|
								 * - Contact list: 'li[data-testid="contactListItem"]'
							 | 
						|
								 * - Gift recording: '#sectionRecordSomethingGiven'
							 | 
						|
								 * - Contact name: '[data-testid="contactName"] input'
							 | 
						|
								 * - Alert dialogs: 'div[role="alert"]'
							 | 
						|
								 * 
							 | 
						|
								 * Timeouts & Retries:
							 | 
						|
								 * - Uses OS-specific timeouts (longer for Linux)
							 | 
						|
								 * - Implements retry logic for network operations
							 | 
						|
								 * - Waits for UI animations and state changes
							 | 
						|
								 * 
							 | 
						|
								 * Alert Handling:
							 | 
						|
								 * - Closes onboarding dialogs
							 | 
						|
								 * - Handles registration prompts
							 | 
						|
								 * - Verifies alert dismissal
							 | 
						|
								 * 
							 | 
						|
								 * State Requirements:
							 | 
						|
								 * - Clean database state
							 | 
						|
								 * - No existing contacts for test DIDs
							 | 
						|
								 * - Available API rate limits
							 | 
						|
								 * 
							 | 
						|
								 * @example Basic contact addition
							 | 
						|
								 * ```typescript
							 | 
						|
								 * await page.goto('./contacts');
							 | 
						|
								 * await page.getByPlaceholder('URL or DID, Name, Public Key')
							 | 
						|
								 *   .fill('did:ethr:0x000...., User Name');
							 | 
						|
								 * await page.locator('button > svg.fa-plus').click();
							 | 
						|
								 * ```
							 | 
						|
								 */
							 | 
						|
								import { test, expect } from '@playwright/test';
							 | 
						|
								import { importUser } from './testUtils';
							 | 
						|
								
							 | 
						|
								test('Check usage limits', async ({ page }) => {
							 | 
						|
								  // Check without ID first
							 | 
						|
								  await page.goto('./account');
							 | 
						|
								  await expect(page.locator('div.bg-slate-100.rounded-md').filter({ hasText: 'Usage Limits' })).toBeHidden();
							 | 
						|
								
							 | 
						|
								  // Import user 01
							 | 
						|
								  const did = await importUser(page, '01');
							 | 
						|
								
							 | 
						|
								  // Verify that "Usage Limits" section is visible
							 | 
						|
								  await expect(page.locator('#sectionUsageLimits')).toBeVisible();
							 | 
						|
								  await expect(page.locator('#sectionUsageLimits')).toContainText('You have done');
							 | 
						|
								  await expect(page.locator('#sectionUsageLimits')).toContainText('You have uploaded');
							 | 
						|
								
							 | 
						|
								  await expect(page.getByText('Your claims counter resets')).toBeVisible();
							 | 
						|
								  await expect(page.getByText('Your registration counter resets')).toBeVisible();
							 | 
						|
								  await expect(page.getByText('Your image counter resets')).toBeVisible();
							 | 
						|
								  await expect(page.getByRole('button', { name: 'Recheck Limits' })).toBeVisible();
							 | 
						|
								
							 | 
						|
								  // Set name
							 | 
						|
								  await page.getByRole('button', { name: 'Set Your Name' }).click();
							 | 
						|
								  const name = 'User ' + did.slice(11, 14);
							 | 
						|
								  await page.getByPlaceholder('Name').fill(name);
							 | 
						|
								  await page.getByRole('button', { name: 'Save', exact: true }).click();
							 | 
						|
								
							 | 
						|
								});
							 |