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 });