|
|
|
import { test, expect } from '@playwright/test';
|
|
|
|
import { importUser, generateNewEthrUser, switchToUser } from './testUtils';
|
|
|
|
|
|
|
|
test('New offers for another user', async ({ page }) => {
|
|
|
|
const user01Did = await generateNewEthrUser(page);
|
|
|
|
await page.goto('./');
|
|
|
|
expect(page.getByTestId('newDirectOffersActivityNumber')).toBeHidden();
|
|
|
|
|
|
|
|
await importUser(page, '00');
|
|
|
|
await page.goto('./contacts');
|
|
|
|
await page.getByPlaceholder('URL or DID, Name, Public Key').fill(user01Did + ', A Friend');
|
|
|
|
await page.locator('button > svg.fa-plus').click();
|
|
|
|
await expect(page.locator('div[role="alert"] span:has-text("Contact Added")')).toBeVisible();
|
|
|
|
await page.locator('div[role="alert"] button:has-text("No")').click(); // don't register
|
|
|
|
await page.locator('div[role="alert"] button > svg.fa-xmark').click(); // dismiss info alert
|
|
|
|
await expect(page.locator('div[role="alert"] button > svg.fa-xmark')).toBeHidden(); // ensure alert is gone
|
|
|
|
|
|
|
|
// show buttons to make offers directly to people
|
|
|
|
await page.getByRole('button').filter({ hasText: /Show Given Hours/i }).click();
|
|
|
|
|
|
|
|
// make an offer directly to user 1
|
|
|
|
// Generate a random string of 3 characters, skipping the "0." at the beginning
|
|
|
|
const randomString1 = Math.random().toString(36).substring(2, 5);
|
|
|
|
await page.getByTestId('offerButton').click();
|
|
|
|
await page.getByTestId('inputDescription').fill(`help of ${randomString1} from #000`);
|
|
|
|
await page.getByTestId('inputOfferAmount').fill('1');
|
|
|
|
await page.getByRole('button', { name: 'Sign & Send' }).click();
|
|
|
|
await expect(page.getByText('That offer was recorded.')).toBeVisible();
|
|
|
|
await page.locator('div[role="alert"] button > svg.fa-xmark').click(); // dismiss info alert
|
|
|
|
await expect(page.locator('div[role="alert"] button > svg.fa-xmark')).toBeHidden(); // ensure alert is gone
|
|
|
|
|
|
|
|
// make another offer to user 1
|
|
|
|
const randomString2 = Math.random().toString(36).substring(2, 5);
|
|
|
|
await page.getByTestId('offerButton').click();
|
|
|
|
await page.getByTestId('inputDescription').fill(`help of ${randomString2} from #000`);
|
|
|
|
await page.getByTestId('inputOfferAmount').fill('3');
|
|
|
|
await page.getByRole('button', { name: 'Sign & Send' }).click();
|
|
|
|
await expect(page.getByText('That offer was recorded.')).toBeVisible();
|
|
|
|
await page.locator('div[role="alert"] button > svg.fa-xmark').click(); // dismiss info alert
|
|
|
|
await expect(page.locator('div[role="alert"] button > svg.fa-xmark')).toBeHidden(); // ensure alert is gone
|
|
|
|
|
|
|
|
// as user 1, go to the home page and check that two offers are shown as new
|
|
|
|
await switchToUser(page, user01Did);
|
|
|
|
await page.goto('./');
|
|
|
|
await page.getByTestId('closeOnboardingAndFinish').click();
|
|
|
|
let offerNumElem = page.getByTestId('newDirectOffersActivityNumber');
|
|
|
|
await expect(offerNumElem).toHaveText('2');
|
|
|
|
await offerNumElem.click();
|
|
|
|
|
|
|
|
await expect(page.getByText('New Offers To You', { exact: true })).toBeVisible();
|
|
|
|
await page.getByTestId('showOffersToUser').click();
|
|
|
|
// note that they show in reverse chronologicalorder
|
|
|
|
await expect(page.getByText(`help of ${randomString2} from #000`)).toBeVisible();
|
|
|
|
await expect(page.getByText(`help of ${randomString1} from #000`)).toBeVisible();
|
|
|
|
|
|
|
|
// click on the latest offer to keep it as "unread"
|
|
|
|
await page.hover(`li:has-text("help of ${randomString2} from #000")`);
|
|
|
|
// await page.locator('li').filter({ hasText: `help of ${randomString2} from #000` }).click();
|
|
|
|
// await page.locator('div').filter({ hasText: /keep all above/ }).click();
|
|
|
|
// now find the "Click to keep all above as new offers" after that list item and click it
|
|
|
|
const liElem = page.locator('li').filter({ hasText: `help of ${randomString2} from #000` });
|
|
|
|
await liElem.hover();
|
|
|
|
const keepAboveAsNew = liElem.locator('div').filter({ hasText: /keep all above/ });
|
|
|
|
await keepAboveAsNew.click();
|
|
|
|
|
|
|
|
// now see that only one offer is shown as new
|
|
|
|
await page.goto('./');
|
|
|
|
offerNumElem = page.getByTestId('newDirectOffersActivityNumber');
|
|
|
|
await expect(offerNumElem).toHaveText('1');
|
|
|
|
await offerNumElem.click();
|
|
|
|
await expect(page.getByText('New Offer To You', { exact: true })).toBeVisible();
|
|
|
|
await page.getByTestId('showOffersToUser').click();
|
|
|
|
|
|
|
|
// now see that no offers are shown as new
|
|
|
|
await page.goto('./');
|
|
|
|
// wait until the list with ID listLatestActivity has at least one visible item
|
|
|
|
await page.locator('#listLatestActivity li').first().waitFor({ state: 'visible' });
|
|
|
|
await expect(page.getByTestId('newDirectOffersActivityNumber')).toBeHidden();
|
|
|
|
});
|