Files
unisono/tests/e2e/multi-user-all-participants-submit-desires.e2e.test.ts
2025-12-21 00:19:46 +02:00

75 lines
4.3 KiB
TypeScript

import { test, expect } from '@playwright/test';
test.describe('Submit Desires Functionality', () => {
test('Multi-User - All Participants Submit Desires', async ({ page, browser }) => {
// 1. Create a session with `Number of Expected Responses` set to 2.
await page.goto('https://unisono.aglink.duckdns.org/login');
await page.getByRole('textbox', { name: 'Passphrase' }).fill('HonorableHumansPrivilegeIsToBeAllowedHere');
await page.getByRole('button', { name: 'Enter' }).click();
await page.waitForURL(/.*\/session\/.*/);
await page.getByRole('textbox', { name: 'Topic' }).fill('Multi-User All Desires');
await page.getByRole('textbox', { name: 'Details (Optional)' }).fill('Testing submission of all desire categories by multiple users.');
await page.getByRole('spinbutton', { name: 'Number of Expected Responses' }).fill('2');
await page.getByRole('button', { name: 'Start Session' }).click();
await page.waitForURL(/.*\/session\/.*/);
// Copy the session link.
const sessionLink = page.url();
// 3. User 1 (in the initial browser context):
// a. Enter desires into all categories.
await page.getByRole('textbox', { name: 'Enter items you want' }).fill('User1 Want A
User1 Want B');
await page.getByRole('textbox', { name: 'Enter sensitive ideas privately' }).fill('User1 Secret Item');
await page.getByRole('textbox', { name: 'Enter items you accept' }).fill('User1 Accept Item');
await page.getByRole('textbox', { name: 'Enter items you absolutely do not want' }).fill('User1 Unwanted Item');
// b. Click "Submit Desires".
await page.getByRole('button', { name: 'Submit Desires' }).click();
await expect(page.getByText('Your desires have been submitted.')).toBeVisible();
await expect(page.getByText('Waiting for 1 more responses...')).toBeVisible();
// 4. User 2 (in a new browser context, e.g., using `browser.newContext()` in Playwright):
// a. Navigate to the copied session link.
const user2Context = await browser.newContext();
const user2Page = await user2Context.newPage();
await user2Page.goto('https://unisono.aglink.duckdns.org/login');
await user2Page.getByRole('textbox', { name: 'Passphrase' }).fill('HonorableHumansPrivilegeIsToBeAllowedHere');
await user2Page.getByRole('button', { name: 'Enter' }).click();
await user2Page.waitForURL(/.*\/session\/.*/);
await user2Page.goto(sessionLink);
// c. Enter desires into all categories.
await user2Page.getByRole('textbox', { name: 'Enter items you want' }).fill('User2 Want C
User2 Want D');
await user2Page.getByRole('textbox', { name: 'Enter sensitive ideas privately' }).fill('User2 Secret Item');
await user2Page.getByRole('textbox', { name: 'Enter items you accept' }).fill('User2 Accept Item');
await user2Page.getByRole('textbox', { name: 'Enter items you absolutely do not want' }).fill('User2 Unwanted Item');
// d. Click "Submit Desires".
await user2Page.getByRole('button', { name: 'Submit Desires' }).click();
// Expected Results:
// - After User 1 submits, their page shows a "Waiting for other participants" message.
// (Verified above)
// - After User 2 submits, both User 1 and User 2's pages transition to the "Results Display" page.
await expect(page.getByRole('heading', { name: 'Results' })).toBeVisible();
await expect(user2Page.getByRole('heading', { name: 'Results' })).toBeVisible();
// - The "Results Display" page shows a summary of all submitted desires, categorized and potentially aggregated.
await expect(page.getByText('User1 Want A')).toBeVisible();
await expect(page.getByText('User1 Want B')).toBeVisible();
await expect(page.getByText('User2 Want C')).toBeVisible();
await expect(page.getByText('User2 Want D')).toBeVisible();
await expect(page.getByText('User1 Accept Item')).toBeVisible();
await expect(page.getByText('User2 Accept Item')).toBeVisible();
await expect(page.getByText('User1 Unwanted Item')).toBeVisible();
await expect(page.getByText('User2 Unwanted Item')).toBeVisible();
// - Private desires are not visible to other users.
await expect(page.getByText('User2 Secret Item')).not.toBeVisible();
await expect(user2Page.getByText('User1 Secret Item')).not.toBeVisible();
});
});