mirror of
https://github.com/snapotter-hq/SnapOtter.git
synced 2026-08-03 07:46:42 +02:00
Zero client JS, 165 static pages, self-hosted fonts, Otter Orange design system. Includes tool SEO data for all 157 tools, enterprise page, and updated e2e landing tests.
62 lines
2.7 KiB
TypeScript
62 lines
2.7 KiB
TypeScript
import { expect, test } from "@playwright/test";
|
|
|
|
test.describe("Docker Command Copy Button", () => {
|
|
test("copy button shows Copied! feedback", async ({ page }) => {
|
|
await page.goto("/");
|
|
const copyButton = page.locator("button[data-copy]");
|
|
await copyButton.click();
|
|
await expect(page.getByText("Copied!")).toBeVisible();
|
|
});
|
|
});
|
|
|
|
test.describe("FAQ Page Accordion", () => {
|
|
test.beforeEach(async ({ page }) => {
|
|
await page.goto("/faq");
|
|
});
|
|
|
|
test("renders all FAQ questions", async ({ page }) => {
|
|
await expect(page.getByText("Frequently Asked Questions")).toBeVisible();
|
|
await expect(page.getByText("Are my files safe and private?")).toBeVisible();
|
|
await expect(page.getByText("Is SnapOtter really free?")).toBeVisible();
|
|
await expect(page.getByText("Do I need an internet connection?")).toBeVisible();
|
|
});
|
|
|
|
test("answers are hidden by default", async ({ page }) => {
|
|
await expect(page.getByText(/All processing happens on your own server/)).not.toBeVisible();
|
|
});
|
|
|
|
test("clicking a question expands the answer", async ({ page }) => {
|
|
await page.getByText("Are my files safe and private?").click();
|
|
await expect(page.getByText(/All processing happens on your own server/)).toBeVisible();
|
|
});
|
|
|
|
test("clicking again collapses the answer", async ({ page }) => {
|
|
const question = page.getByText("Are my files safe and private?");
|
|
await question.click();
|
|
await expect(page.getByText(/All processing happens on your own server/)).toBeVisible();
|
|
await question.click();
|
|
await expect(page.getByText(/All processing happens on your own server/)).not.toBeVisible();
|
|
});
|
|
|
|
test("multiple FAQs can be open simultaneously", async ({ page }) => {
|
|
await page.getByText("Are my files safe and private?").click();
|
|
await page.getByText("Is SnapOtter really free?").click();
|
|
await expect(page.getByText(/All processing happens on your own server/)).toBeVisible();
|
|
await expect(page.getByText(/open source under AGPL-3.0/)).toBeVisible();
|
|
});
|
|
});
|
|
|
|
test.describe("Mobile Navigation", () => {
|
|
test("hamburger menu opens and shows links", async ({ page }) => {
|
|
await page.setViewportSize({ width: 375, height: 812 });
|
|
await page.goto("/");
|
|
const toggle = page.getByLabel("Toggle menu");
|
|
await toggle.click();
|
|
await expect(page.getByRole("link", { name: "Features" }).last()).toBeVisible();
|
|
await expect(page.getByRole("link", { name: "Enterprise" }).last()).toBeVisible();
|
|
await expect(page.getByRole("link", { name: "Pricing" }).last()).toBeVisible();
|
|
await expect(page.getByRole("link", { name: "Docs" }).last()).toBeVisible();
|
|
await expect(page.getByRole("link", { name: "Contact" }).last()).toBeVisible();
|
|
});
|
|
});
|