@vibe/testkit
Version:
Vibe e2e testing toolkit
62 lines (52 loc) • 2.42 kB
text/typescript
/* eslint-disable playwright/no-wait-for-selector */
import { test, expect, FrameLocator } from "@playwright/test";
import { EditableHeading } from "../components";
import { editableHeadingStory } from "./utils/url-helper";
let frame: FrameLocator;
let editableHeading: EditableHeading;
const editableHeadingLocator = '[data-testid="editable-heading"]';
const frameLocator = "[id='storybook-preview-iframe']";
test.describe("Testkit - Unit Tests - EditableHeading", () => {
test.beforeEach(async ({ page }) => {
await page.goto(editableHeadingStory);
frame = page.frameLocator(frameLocator);
editableHeading = new EditableHeading(page, frame.locator(editableHeadingLocator), "EditableHeading");
await editableHeading.waitForElementToBeVisible();
});
test("should be visible by default", async () => {
await expect(editableHeading.getLocator()).toBeVisible();
});
test("should be enabled by default", async () => {
await expect(editableHeading.getLocator()).toBeEnabled();
});
test("should enter edit mode when clicked", async () => {
await editableHeading.enterEditMode();
expect(await editableHeading.isInEditMode()).toBe(true);
});
test("should exit edit mode with Enter key", async () => {
await editableHeading.enterEditMode();
expect.soft(await editableHeading.isInEditMode()).toBe(true);
await editableHeading.exitEditModeWithEnter();
expect(await editableHeading.isInEditMode()).toBe(false);
});
test("should exit edit mode with Escape key", async () => {
await editableHeading.enterEditMode();
expect.soft(await editableHeading.isInEditMode()).toBe(true);
await editableHeading.exitEditModeWithEscape();
expect(await editableHeading.isInEditMode()).toBe(false);
});
test("should exit edit mode with blur", async () => {
await editableHeading.enterEditMode();
expect.soft(await editableHeading.isInEditMode()).toBe(true);
await editableHeading.exitEditModeWithBlur();
expect(await editableHeading.isInEditMode()).toBe(false);
});
test("should count elements correctly", async () => {
const count = await editableHeading.count();
expect(count).toBeGreaterThanOrEqual(1);
});
test("should handle attribute retrieval", async () => {
const attributeValue = await editableHeading.getAttributeValue("data-testid");
expect(attributeValue).toContain("editable-heading");
});
});