import { test, expect, type BrowserContext } from "@playwright/test"; import { createServer, type Server } from "node:http"; import { makeContext } from "./helpers/vault"; test.describe("Real form icon injection", () => { let ctx: BrowserContext; let server: Server; let origin: string; test.beforeEach(async () => { server = createServer((_request, response) => { response.writeHead(200, { "content-type": "text/html; charset=utf-8" }); response.end(`
`); }); await new Promise((resolve, reject) => { server.once("error", reject); server.listen(0, "127.0.0.1", resolve); }); const address = server.address(); if (!address || typeof address === "string") throw new Error("form fixture did not bind"); origin = `http://127.0.0.1:${address.port}`; ctx = await makeContext("peach-form-icon"); }); test.afterEach(async () => { await ctx?.close(); await new Promise((resolve, reject) => server.close(error => error ? reject(error) : resolve())); }); test("injects Peach icons into a real login form", async () => { const page = await ctx.newPage(); await page.goto(origin); await expect(page.locator('button[aria-label="Peach autofill"]')).toHaveCount(2, { timeout: 10_000 }); }); });