forked from trent_larson/crowd-funder-for-time-pwa
- Add detailed header documentation to playwright tests - Document test categories and flows - Add key selector documentation - Document state verification and alert handling - Include code examples and usage patterns - Add important checks and requirements The documentation helps developers understand the foundational tests that verify basic application functionality before running more complex test suites.
88 lines
3.1 KiB
TypeScript
88 lines
3.1 KiB
TypeScript
/**
|
|
* 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();
|
|
|
|
}); |