UNPKG

@shopware-ag/meteor-component-library

Version:

The meteor component library is a Vue component library developed by Shopware. It is based on the [Meteor Design System](https://shopware.design/).

252 lines (204 loc) 6.74 kB
import { within, userEvent } from "@storybook/test"; import { expect } from "@storybook/test"; import meta, { type MtTextFieldMeta, type MtTextFieldStory } from "./mt-text-field.stories"; export default { ...meta, title: "Interaction Tests/Form/mt-text-field", } as MtTextFieldMeta; export const TestInputValue: MtTextFieldStory = { name: "Should keep input value", play: async ({ canvasElement, args }) => { const canvas = within(canvasElement); await userEvent.type(canvas.getByRole("textbox"), "Shopware"); await userEvent.click(canvas.getByText("hidden")); expect((canvas.getByRole("textbox") as HTMLInputElement).value).toBe("Shopware"); expect(args.change).toHaveBeenCalledWith("Shopware"); }, }; export const VisualTestPrefix: MtTextFieldStory = { name: "Should display prefix", args: { prefix: "prefix", }, play: ({ canvasElement, args }) => { const canvas = within(canvasElement); expect(canvas.getByText(args.prefix)).toBeDefined(); }, }; export const VisualTestSuffix: MtTextFieldStory = { name: "Should display suffix", args: { suffix: "suffix", }, play: ({ canvasElement, args }) => { const canvas = within(canvasElement); expect(canvas.getByText(args.suffix)).toBeDefined(); }, }; export const VisualTestHint: MtTextFieldStory = { name: "Should display hint", args: { hint: "hint", }, play: ({ canvasElement, args }) => { const canvas = within(canvasElement); expect(canvas.getByText(args.hint)).toBeDefined(); }, }; export const VisualTestEmptyCharacterCount: MtTextFieldStory = { name: "Should display empty character count", args: { maxLength: 60, }, play: ({ canvasElement }) => { const canvas = within(canvasElement); expect(canvas.getByText("0/60")).toBeDefined(); }, }; export const VisualTestCharacterCount: MtTextFieldStory = { name: "Should display character count with text", args: { maxLength: 60, }, play: async ({ canvasElement }) => { const canvas = within(canvasElement); await userEvent.type(canvas.getByRole("textbox"), "Shopware"); await userEvent.click(canvas.getByText("hidden")); expect(canvas.getByText("8/60")).toBeDefined(); }, }; export const VisualTestFieldIsRequired: MtTextFieldStory = { name: "Should display an indicator that the field id required", args: { required: true, }, }; export const VisualTestCharacterCountExceeding: MtTextFieldStory = { name: "Should display error when character count exceeds max value", args: { maxLength: 60, }, play: async ({ canvasElement, args }) => { const canvas = within(canvasElement); await userEvent.type( canvas.getByRole("textbox"), "Shopware is a trendsetting ecommerce platform to power your online business.", ); await userEvent.click(canvas.getByText("hidden")); expect(canvas.getByText("60/60")).toBeDefined(); expect(args.updateModelValue).toHaveBeenCalledWith( "Shopware is a trendsetting ecommerce platform to power your ", ); expect((canvas.getByRole("textbox") as HTMLInputElement).value).toBe( "Shopware is a trendsetting ecommerce platform to power your ", ); }, }; export const VisualTestCharacterCountWithHint: MtTextFieldStory = { name: "Should display character count with text and hint", args: { maxLength: 60, hint: "hint", }, play: async ({ canvasElement, args }) => { const canvas = within(canvasElement); await userEvent.type(canvas.getByRole("textbox"), "Shopware"); await userEvent.click(canvas.getByText("hidden")); expect(canvas.getByText("8/60")).toBeDefined(); expect(canvas.getByText(args.hint)).toBeDefined(); }, }; export const TestLabel: MtTextFieldStory = { name: "Should display label", args: { label: "label", }, play: ({ canvasElement, args }) => { const canvas = within(canvasElement); expect(canvas.getByText(args.label)).toBeDefined(); }, }; export const VisualTestDisabled: MtTextFieldStory = { name: "Should disable", args: { disabled: true, modelValue: "Shopware", }, play: async ({ canvasElement }) => { const canvas = within(canvasElement); await userEvent.type(canvas.getByRole("textbox"), "1337"); expect((canvas.getByRole("textbox") as HTMLInputElement).value).toBe("Shopware"); }, }; export const TestPlaceholder: MtTextFieldStory = { name: "Should display placeholder", args: { placeholder: "Placeholder", }, play: ({ canvasElement, args }) => { const canvas = within(canvasElement); expect(canvas.getByPlaceholderText(args.placeholder)).toBeDefined(); }, }; export const VisualTestError: MtTextFieldStory = { name: "Should display error", args: { error: { code: 500, detail: "Error while saving!", }, }, play: ({ canvasElement, args }) => { const canvas = within(canvasElement); expect(canvas.getByText(args.error.detail)).toBeDefined(); }, }; export const TestCopyable: MtTextFieldStory = { name: "Should be able to copy", args: { copyable: true, }, play: async () => { // TODO: Currently it is not possible to test Clipboard copying // @see https://github.com/microsoft/playwright/issues/8114 }, }; export const VisualTestInheritance: MtTextFieldStory = { name: "Should remove and restore inheritance", args: { isInheritanceField: true, isInherited: false, }, play: async ({ canvasElement, args }) => { const canvas = within(canvasElement); await userEvent.click(canvas.getByTestId("mt-icon__regular-link-horizontal-slash")); expect(args.inheritanceRestore).toBeCalled(); expect(canvas.getByTestId("mt-inheritance-switch-icon")).toBeDefined(); await userEvent.click(canvas.getByTestId("mt-inheritance-switch-icon")); expect(args.inheritanceRemove).toBeCalled(); expect(canvas.getByTestId("mt-icon__regular-link-horizontal-slash")).toBeDefined(); }, }; export const VisualTestInheritanceActive: MtTextFieldStory = { name: "Should show inheritance", args: { isInheritanceField: true, isInherited: true, }, }; export const VisualTestHandleFocus: MtTextFieldStory = { name: "Should emit focus event", args: { placeholder: "Focus here", }, play: async ({ canvasElement, args }) => { const canvas = within(canvasElement); const input = canvas.getByPlaceholderText(args.placeholder); // Simulate user click to focus the input await userEvent.click(input); // Wait for the focus event to be emitted await new Promise((resolve) => setTimeout(resolve, 1000)); // Check if the focus event was emitted expect(args.focus).toHaveBeenCalledOnce(); }, };