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.
		
		
		
		
		
			
		
			
				
					
					
						
							122 lines
						
					
					
						
							4.2 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							122 lines
						
					
					
						
							4.2 KiB
						
					
					
				| /** | |
|  * @file Gift Recording Test Suite | |
|  * @description Tests TimeSafari's core gift recording functionality, ensuring proper creation, | |
|  * validation, and verification of gift records | |
|  *  | |
|  * This test verifies: | |
|  * 1. Gift Creation | |
|  *    - Random gift title generation | |
|  *    - Random non-zero amount assignment | |
|  *    - Proper recording and signing | |
|  *  | |
|  * 2. Gift Verification | |
|  *    - Gift appears in home view | |
|  *    - Details match input data | |
|  *    - Verifiable claim details accessible | |
|  *  | |
|  * 3. Public Verification | |
|  *    - Gift viewable on public server | |
|  *    - Claim details properly exposed | |
|  *  | |
|  * Test Flow: | |
|  * 1. Data Generation | |
|  *    - Generate random 4-char string for unique gift ID | |
|  *    - Generate random amount (1-99) | |
|  *    - Combine with standard "Gift" prefix | |
|  *  | |
|  * 2. Gift Recording | |
|  *    - Import User 00 (test account) | |
|  *    - Navigate to home | |
|  *    - Close onboarding dialog | |
|  *    - Select recipient | |
|  *    - Fill gift details | |
|  *    - Sign and submit | |
|  *  | |
|  * 3. Verification | |
|  *    - Check success notification | |
|  *    - Refresh home view | |
|  *    - Locate gift in list | |
|  *    - Verify gift details | |
|  *    - Check public server view | |
|  *  | |
|  * Test Data: | |
|  * - Gift Title: "Gift [4-char-random]" | |
|  * - Amount: Random 1-99 | |
|  * - Recipient: "Unnamed/Unknown" | |
|  *  | |
|  * Key Selectors: | |
|  * - Gift title: '[data-testid="giftTitle"]' | |
|  * - Amount input: 'input[type="number"]' | |
|  * - Submit button: 'button[name="Sign & Send"]' | |
|  * - Success alert: 'div[role="alert"]' | |
|  * - Details section: 'h2[name="Details"]' | |
|  *  | |
|  * Alert Handling: | |
|  * - Closes onboarding dialog | |
|  * - Verifies success message | |
|  * - Dismisses info alerts | |
|  *  | |
|  * State Requirements: | |
|  * - Clean database state | |
|  * - User 00 imported | |
|  * - Available API rate limits | |
|  *  | |
|  * Related Files: | |
|  * - Gift recording view: src/views/RecordGiftView.vue | |
|  * - JWT creation: sw_scripts/safari-notifications.js | |
|  * - Endorser API: src/libs/endorserServer.ts | |
|  *  | |
|  * @see Documentation in usage-guide.md for gift recording workflows | |
|  * @requires @playwright/test | |
|  * @requires ./testUtils - For user management utilities | |
|  *  | |
|  * @example Basic gift recording | |
|  * ```typescript | |
|  * await page.getByPlaceholder('What was given').fill('Gift abc123'); | |
|  * await page.getByRole('spinbutton').fill('42'); | |
|  * await page.getByRole('button', { name: 'Sign & Send' }).click(); | |
|  * await expect(page.getByText('That gift was recorded.')).toBeVisible(); | |
|  * ``` | |
|  */ | |
| import { test, expect } from '@playwright/test'; | |
| import { importUser } from './testUtils'; | |
| 
 | |
| test('Record something given', async ({ page }) => { | |
|   // Generate a random string of a few characters | |
|   const randomString = Math.random().toString(36).substring(2, 6); | |
| 
 | |
|   // Generate a random non-zero single-digit number | |
|   const randomNonZeroNumber = Math.floor(Math.random() * 99) + 1; | |
| 
 | |
|   // Standard title prefix | |
|   const standardTitle = 'Gift '; | |
| 
 | |
|   // Combine title prefix with the random string | |
|   const finalTitle = standardTitle + randomString; | |
| 
 | |
|   // Import user 00 | |
|   await importUser(page, '00'); | |
| 
 | |
|   // Record something given | |
|   await page.goto('./'); | |
|   await page.getByTestId('closeOnboardingAndFinish').click(); | |
|   await page.getByRole('button', { name: 'Person' }).click(); | |
|   await page.getByRole('listitem').filter({ hasText: 'Unnamed' }).locator('svg').click(); | |
|   await page.getByPlaceholder('What was given').fill(finalTitle); | |
|   await page.getByRole('spinbutton').fill(randomNonZeroNumber.toString()); | |
|   await page.getByRole('button', { name: 'Sign & Send' }).click(); | |
|   await expect(page.getByText('That gift was recorded.')).toBeVisible(); | |
|   await page.locator('div[role="alert"] button > svg.fa-xmark').click(); // dismiss info alert | |
|  | |
|   // Refresh home view and check gift | |
|   await page.goto('./'); | |
|   const item = await page.locator('li:first-child').filter({ hasText: finalTitle }); | |
|   await item.locator('[data-testid="circle-info-link"]').click(); | |
|   await expect(page.getByRole('heading', { name: 'Verifiable Claim Details' })).toBeVisible(); | |
|   await expect(page.getByText(finalTitle, { exact: true })).toBeVisible(); | |
|   const page1Promise = page.waitForEvent('popup'); | |
|   // expand the Details section to see the extended details | |
|   await page.getByRole('heading', { name: 'Details', exact: true }).click(); | |
|   await page.getByRole('link', { name: 'View on the Public Server' }).click(); | |
|   const page1 = await page1Promise; | |
| }); |