tests: browser walkthrough no longer depends on which seed items are still unsold
This commit is contained in:
parent
16231871cb
commit
7277a88bba
@ -24,32 +24,40 @@ const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
|
||||
await page.keyboard.press("Enter");
|
||||
await page.waitForFunction(() => [...document.querySelectorAll("#stage h2")].some((h) => /bike/i.test(h.textContent)), { timeout: 15000 });
|
||||
const titles = await page.$$eval("#stage .card h3", (ns) => ns.map((n) => n.textContent));
|
||||
check("chat search renders bike cards", titles.length && titles.every((t) => /bike/i.test(t)), titles.join(" | "));
|
||||
if (SHOTS) { await sleep(600); } if (SHOTS) await page.screenshot({ path: SHOTS + "/1-landing-chat-search.png" });
|
||||
check("chat search renders bike cards", titles.length > 0 && titles.every((t) => /bike/i.test(t)), titles.join(" | "));
|
||||
if (SHOTS) { await sleep(600); await page.screenshot({ path: SHOTS + "/1-landing-chat-search.png" }); }
|
||||
|
||||
// online checkout
|
||||
const roadBtn = await page.evaluateHandle(() => [...document.querySelectorAll(".card")].find((c) => /road bike/i.test(c.textContent)).querySelector("button.btn:not(.cash)"));
|
||||
await roadBtn.click();
|
||||
const feeBps = (await (await fetch(BASE + "/api/status")).json()).fee_bps;
|
||||
const money = (c) => "$" + (c / 100).toFixed(2);
|
||||
|
||||
// online checkout: first card that offers online payment
|
||||
const pick = await page.evaluate(() => {
|
||||
const c = [...document.querySelectorAll("#stage .card")].find((c) => c.querySelector("button.btn:not(.cash)"));
|
||||
return c && { id: c.dataset.listing, price: c.querySelector(".price").childNodes[0].textContent };
|
||||
});
|
||||
check("an online-payable listing is visible", !!pick, pick && pick.price);
|
||||
const priceC = Math.round(parseFloat(pick.price.slice(1)) * 100), feeC = Math.round(priceC * feeBps / 10000);
|
||||
await page.click(`.card[data-listing="${pick.id}"] button.btn:not(.cash)`);
|
||||
await page.waitForSelector("[data-component=checkout]", { timeout: 15000 });
|
||||
const fee = await page.$eval("[data-testid=fee]", (n) => n.textContent);
|
||||
const total = await page.$eval("[data-testid=total]", (n) => n.textContent);
|
||||
check("checkout shows 5% fee and total", fee === "$9.00" && total === "$189.00", `fee ${fee} total ${total}`);
|
||||
if (SHOTS) { await sleep(600); } if (SHOTS) await page.screenshot({ path: SHOTS + "/2-checkout-fee.png" });
|
||||
check(`checkout shows ${feeBps / 100}% fee and total`, fee === money(feeC) && total === money(priceC + feeC), `price ${pick.price} fee ${fee} total ${total}`);
|
||||
if (SHOTS) { await sleep(600); await page.screenshot({ path: SHOTS + "/2-checkout-fee.png" }); }
|
||||
await page.click("[data-component=checkout] button[type=submit]");
|
||||
await page.waitForSelector("[data-component=receipt]", { timeout: 15000 });
|
||||
const rfee = await page.$eval("[data-testid=receipt-fee]", (n) => n.textContent);
|
||||
check("test payment confirms, receipt shows fee", rfee === "$9.00", rfee);
|
||||
check("test payment confirms, receipt shows fee", rfee === money(feeC), rfee);
|
||||
|
||||
// cash meetup
|
||||
await page.type("#chatInput", "show lamp");
|
||||
// cash meetup: first card offering cash
|
||||
await page.type("#chatInput", "show me everything");
|
||||
await page.keyboard.press("Enter");
|
||||
await page.waitForFunction(() => [...document.querySelectorAll("#stage .card h3")].some((h) => /lamp/i.test(h.textContent)), { timeout: 15000 });
|
||||
const cashBtn = await page.evaluateHandle(() => [...document.querySelectorAll(".card")].find((c) => /ceramic/i.test(c.textContent)).querySelector("button.cash"));
|
||||
await cashBtn.click();
|
||||
await page.waitForFunction(() => /everything/.test((document.querySelector("#stage h2") || {}).textContent || ""), { timeout: 15000 });
|
||||
const cashId = await page.evaluate(() => { const c = [...document.querySelectorAll("#stage .card")].find((c) => c.querySelector("button.cash")); return c && c.dataset.listing; });
|
||||
await page.click(`.card[data-listing="${cashId}"] button.cash`);
|
||||
await page.waitForSelector("[data-component=cash-meetup]", { timeout: 15000 });
|
||||
const cfee = await page.$eval("[data-testid=cash-fee]", (n) => n.textContent);
|
||||
check("cash meetup shows $0 fee", cfee === "$0.00", cfee);
|
||||
if (SHOTS) { await sleep(600); } if (SHOTS) await page.screenshot({ path: SHOTS + "/3-cash-meetup.png" });
|
||||
if (SHOTS) { await sleep(600); await page.screenshot({ path: SHOTS + "/3-cash-meetup.png" }); }
|
||||
await page.click("[data-component=cash-meetup] button.cash");
|
||||
await page.waitForSelector("[data-component=receipt]", { timeout: 15000 });
|
||||
check("cash deal completed with $0 fee", (await page.$eval("[data-testid=receipt-fee]", (n) => n.textContent)) === "$0.00");
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user