61 lines
1.8 KiB
TypeScript
61 lines
1.8 KiB
TypeScript
import TextManager from "$components/text/TextManager.svelte";
|
|
import { textsState } from "$states/texts.svelte";
|
|
import { render, screen } from "@testing-library/svelte";
|
|
import userEvent from "@testing-library/user-event";
|
|
import { beforeEach, describe, expect, it } from "vitest";
|
|
|
|
describe("TextManager", () => {
|
|
beforeEach(() => {
|
|
textsState.clear();
|
|
});
|
|
|
|
it("should add text to state and clear input on button click", async () => {
|
|
const user = userEvent.setup();
|
|
render(TextManager);
|
|
|
|
const input = screen.getByRole("textbox", { name: /input new text/i });
|
|
const addButton = screen.getByRole("button", { name: /add text/i });
|
|
|
|
await user.type(input, "New Note");
|
|
await user.click(addButton);
|
|
|
|
expect(textsState.texts).toHaveLength(1);
|
|
expect(textsState.texts[0].text).toBe("New Note");
|
|
expect(input).toHaveValue("");
|
|
});
|
|
|
|
it("should add text on enter key", async () => {
|
|
const user = userEvent.setup();
|
|
render(TextManager);
|
|
|
|
const input = screen.getByRole("textbox", { name: /input new text/i });
|
|
|
|
await user.type(input, "Enter Note{Enter}");
|
|
|
|
expect(textsState.texts).toHaveLength(1);
|
|
expect(textsState.texts[0].text).toBe("Enter Note");
|
|
});
|
|
|
|
it("should display all items from state", async () => {
|
|
textsState.addText("First");
|
|
textsState.addText("Second");
|
|
|
|
render(TextManager);
|
|
|
|
const items = screen.getAllByRole("listitem");
|
|
expect(items).toHaveLength(2);
|
|
});
|
|
|
|
it("should remove text from state when delete button is clicked", async () => {
|
|
const user = userEvent.setup();
|
|
textsState.addText("To be deleted");
|
|
|
|
render(TextManager);
|
|
|
|
const deleteBtn = screen.getByRole("button", { name: /delete/i });
|
|
await user.click(deleteBtn);
|
|
|
|
expect(textsState.texts).toHaveLength(0);
|
|
});
|
|
});
|