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(); | |
| 
 | |
| }); |