aboutsummaryrefslogtreecommitdiffstats
path: root/test/e2e/vault-send-bitcoin.spec.ts
blob: 960e97a65560721b22da80df9f4b15b8679c1fde (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import { expect, test } from "@playwright/test";
import {
  aliceUsername,
  alicePassword,
  bobUsername,
  bobPassword,
  loginNewContext,
  apiLogin,
  ensureVaultAccount,
  setActiveAccount,
  pasteAndSend,
} from "./helpers";

test("pasting vault bitcoin address redirects to /send/bitcoin, not /pay", async ({ browser }) => {
  test.setTimeout(60_000);

  // --- Alice: generate a vault invoice and grab the address ---
  const { context: aliceContext, page: alicePage } = await loginNewContext(
    browser,
    aliceUsername,
    alicePassword,
  );

  // Ensure vault account exists
  const aliceToken = await apiLogin(alicePage, aliceUsername, alicePassword);
  const vaultAccount = await ensureVaultAccount(alicePage, aliceToken, aliceUsername, alicePassword);
  await setActiveAccount(alicePage, vaultAccount.id);
  await alicePage.goto(`/${aliceUsername}`);

  // Find the bitcoin vault account card and click Receive
  const vaultCard = alicePage.locator('[data-testid="account-card"][data-account-type="bitcoin"]');
  await expect(vaultCard.first()).toBeVisible({ timeout: 10_000 });

  const receiveBtn = vaultCard.first().getByTestId("account-receive");
  await receiveBtn.click({ force: true });

  // Wait for the invoice page
  await alicePage.waitForURL(/\/invoice\/[^/?#]+/, { timeout: 15_000 });

  // Grab the bitcoin address from the invoice text
  const invoiceText = await alicePage.getByTestId("invoice-text").first().innerText();
  const vaultAddress = invoiceText.trim().replace(/\s+/g, "");
  expect(
    vaultAddress.startsWith("bcrt1") || vaultAddress.startsWith("bc1"),
    `Expected bitcoin address, got: ${vaultAddress}`,
  ).toBeTruthy();

  console.log(`[e2e] Alice vault address: ${vaultAddress}`);
  await aliceContext.close();

  // --- Bob: paste the vault address and verify redirect ---
  const { context: bobContext, page: bobPage } = await loginNewContext(
    browser,
    bobUsername,
    bobPassword,
  );

  // Paste Alice's vault address
  await pasteAndSend(bobPage, vaultAddress);

  const finalUrl = bobPage.url();
  console.log(`[e2e] After paste, Bob navigated to: ${finalUrl}`);

  // Should go to /send/bitcoin, NOT /pay/alice
  expect(finalUrl, `Expected /send/bitcoin/ URL but got: ${finalUrl}`).toContain("/send/bitcoin/");
  expect(finalUrl, `Should NOT redirect to /pay/ but got: ${finalUrl}`).not.toContain("/pay/");

  await bobContext.close();
});