/ tests / e2e / node.spec.ts
node.spec.ts
  1  import {
  2    defaultConfig,
  3    expect,
  4    shortNodeRemote,
  5    test,
  6  } from "@tests/support/fixtures.js";
  7  
  8  test("node metadata", async ({ page, peerManager }) => {
  9    const peer = await peerManager.createPeer({
 10      name: "node-metadata-peer",
 11    });
 12    await peer.startNode({
 13      node: {
 14        ...defaultConfig.node,
 15        seedingPolicy: { default: "allow", scope: "all" },
 16        alias: "palm",
 17        externalAddresses: ["seed.radicle.test:8123"],
 18      },
 19    });
 20    await peer.startHttpd();
 21  
 22    await page.goto(peer.uiUrl());
 23  
 24    await expect(page.getByText(shortNodeRemote).first()).toBeVisible();
 25    await expect(page.getByText(/\/radicle:\d.\d.\d\//)).toBeVisible();
 26  });
 27  
 28  test("node repos", async ({ page }) => {
 29    await page.goto("/nodes/radicle.local");
 30    const repo = page
 31      .locator(".repo-card", { hasText: "source-browsing" })
 32      .nth(0);
 33  
 34    // Repo metadata.
 35    {
 36      await expect(repo.getByText("source-browsing")).toBeVisible();
 37      await expect(
 38        repo.getByText("Git repository for source browsing tests"),
 39      ).toBeVisible();
 40    }
 41  });
 42  
 43  test("show pinned repositories", async ({ page }) => {
 44    await page.goto("/");
 45    // Shows pinned repo name.
 46    await expect(page.getByText("source-browsing")).toBeVisible();
 47    //
 48    // Shows pinned repo description.
 49    await expect(
 50      page.getByText("Git repository for source browsing tests"),
 51    ).toBeVisible();
 52  });
 53  
 54  test("edit seed bookmarks", async ({ page }) => {
 55    // Proxy requests to seed.example.tld to the local test api.
 56    await page.route(
 57      url => url.hostname === "seed.example.tld",
 58      route =>
 59        route.fulfill({
 60          status: 301,
 61          headers: {
 62            Location: route
 63              .request()
 64              .url()
 65              .replace("seed.example.tld", "127.0.0.1"),
 66          },
 67        }),
 68    );
 69  
 70    await page.goto("/");
 71  
 72    await page
 73      .getByRole("button", { name: "Toggle seed selector dropdown" })
 74      .click();
 75    await expect(page.getByPlaceholder("seed.radicle.example")).toHaveValue(
 76      "127.0.0.1",
 77    );
 78    await expect(
 79      page.getByRole("button", { name: "Default seeds can't be removed" }),
 80    ).toBeVisible();
 81    await expect(page.locator(".dropdown > .dropdown-item")).toHaveCount(1);
 82  
 83    // The input box is focussed, has the text selected and ready to be overwritten.
 84    await page.getByPlaceholder("seed.radicle.example").fill("seed.example.tld");
 85    await page.getByPlaceholder("seed.radicle.example").press("Enter");
 86  
 87    await expect(page).toHaveURL("/nodes/seed.example.tld");
 88    await expect(
 89      page.getByRole("button", { name: "Add bookmark" }),
 90    ).toBeVisible();
 91  
 92    await page
 93      .getByRole("button", { name: "Toggle seed selector dropdown" })
 94      .click();
 95  
 96    // After navigating to the seed it should not yet be added to the bookmarks.
 97    await expect(page.locator(".dropdown > .dropdown-item")).toHaveCount(1);
 98  
 99    await page.getByRole("button", { name: "Add bookmark" }).click();
100    await expect(page.locator(".dropdown > .dropdown-item")).toHaveCount(2);
101  
102    // Test that new seed is persisted and opened when we go to the landing page.
103    await page.getByRole("link", { name: "Radicle logo" }).click();
104    await expect(page.getByText("seed.example.tld").first()).toBeVisible();
105  
106    // Test removing a bookmark.
107    await page
108      .getByRole("button", { name: "Toggle seed selector dropdown" })
109      .click();
110    await page.getByRole("button", { name: "Remove bookmark" }).nth(1).click();
111    await expect(page.locator(".dropdown > .dropdown-item")).toHaveCount(1);
112  
113    // Remove the bookmark from within the dropdown.
114    await page.getByRole("button", { name: "Add bookmark" }).click();
115    await expect(page.locator(".dropdown > .dropdown-item")).toHaveCount(2);
116    await page
117      .getByRole("button", { name: "seed.example.tld" })
118      .getByRole("button", { name: "Remove bookmark" })
119      .click();
120    await expect(page.locator(".dropdown > .dropdown-item")).toHaveCount(1);
121  });