inference-playground / e2e /home.test.ts
Thomas G. Lopes
fix reset; add some tests (#90)
893b0be unverified
raw
history blame
4.48 kB
import { expect, test } from "@playwright/test";
import { TEST_IDS } from "../src/lib/constants.js";
const HF_TOKEN = "hf_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
const HF_TOKEN_STORAGE_KEY = "hf_token";
const STORAGE_STATE_FILE = "e2e/home_test_storage_state.json";
test("home page has expected token model", async ({ page }) => {
await page.goto("/");
await expect(page.getByText("Add a Hugging Face Token")).toBeVisible();
});
// Group tests that depend on sequential execution and shared state
test.describe.serial("Token Handling and Subsequent Tests", () => {
// Test that sets the token and saves state
test("filling up token input, closes modal, and saves state", async ({ page }) => {
await page.goto("/");
await expect(page.getByText("Add a Hugging Face Token")).toBeVisible();
const input = page.getByPlaceholder("Enter HF Token");
await expect(input).toBeVisible();
await input.fill(HF_TOKEN);
await input.blur();
await page.getByText("Submit").click();
await expect(page.getByText("Add a Hugging Face Token")).not.toBeVisible();
// Save storage state
await page.context().storageState({ path: STORAGE_STATE_FILE });
});
// Nested describe for tests that use the saved state
test.describe("Tests requiring persisted token", () => {
test.use({ storageState: STORAGE_STATE_FILE });
test("can create a conversation with persisted token", async ({ page }) => {
await page.goto("/");
// Expect modal NOT to be visible due to persisted token
await expect(page.getByText("Add a Hugging Face Token")).not.toBeVisible();
// Verify token is in localStorage
const storedToken = await page.evaluate(
key => JSON.parse(window.localStorage.getItem(key) ?? ""),
HF_TOKEN_STORAGE_KEY
);
expect(storedToken).toBe(HF_TOKEN);
const userInput = page.getByRole("textbox", { name: "Enter user message" });
await expect(userInput).toBeVisible();
await userInput.fill("Hello Hugging Face!");
await userInput.blur();
expect(await userInput.inputValue()).toBe("Hello Hugging Face!");
// Reload the page
await page.reload();
// Re-select the input field and check its value
const userInputAfterReload = page.getByRole("textbox", { name: "Enter user message" });
await expect(userInputAfterReload).toBeVisible();
expect(await userInputAfterReload.inputValue()).toBe("Hello Hugging Face!");
});
test("checkpoints, resetting, and restoring", async ({ page }) => {
await page.goto("/");
const userMsg = "user message: hi";
const assistantMsg = "assistant message: hey";
// Fill user message
await page.getByRole("textbox", { name: "Enter user message" }).click();
await page.getByRole("textbox", { name: "Enter user message" }).fill(userMsg);
// Blur
await page.locator(".relative > div:nth-child(2) > div").first().click();
// Fill assistant message
await page.getByRole("button", { name: "Add message" }).click();
await page.getByRole("textbox", { name: "Enter assistant message" }).fill(assistantMsg);
// Blur
await page.locator(".relative > div:nth-child(2) > div").first().click();
// Create Checkpoint
await page.locator(`[data-test-id="${TEST_IDS.checkpoints_trigger}"]`).click();
await page.getByRole("button", { name: "Create new" }).click();
// Check that there are checkpoints
await expect(page.locator(`[data-test-id="${TEST_IDS.checkpoint}"] `)).toBeVisible();
// Get out of menu
await page.locator(`[data-test-id="${TEST_IDS.checkpoints_menu}"] `).press("Escape");
await page.locator(`[data-test-id="${TEST_IDS.checkpoints_menu}"] `).press("Escape");
// Reset
await page.locator(`[data-test-id="${TEST_IDS.reset}"]`).click();
// Check that messages are gone now
await expect(page.getByRole("textbox", { name: "Enter user message" })).toHaveValue("");
// Call in a checkpoint
await page.locator(`[data-test-id="${TEST_IDS.checkpoints_trigger}"]`).click();
await page.locator(`[data-test-id="${TEST_IDS.checkpoint}"] `).click();
// Get out of menu
await page.locator(`[data-test-id="${TEST_IDS.checkpoints_menu}"] `).press("Escape");
await page.locator(`[data-test-id="${TEST_IDS.checkpoints_menu}"] `).press("Escape");
// Check that the messages are back
await expect(page.getByRole("textbox", { name: "Enter user message" })).toHaveValue(userMsg);
await expect(page.getByRole("textbox", { name: "Enter assistant message" })).toHaveValue(assistantMsg);
});
});
});