diff --git a/src/components/text/TextManager.svelte b/src/components/text/TextManager.svelte index 03ea135..17ded61 100644 --- a/src/components/text/TextManager.svelte +++ b/src/components/text/TextManager.svelte @@ -10,10 +10,7 @@ let text: string = $state(""); function addText() { - let trimmed = text.trim(); - if (trimmed.length !== 0) { - textsState.addText(trimmed); - } + textsState.addText(text); text = ""; } diff --git a/src/states/texts.svelte.ts b/src/states/texts.svelte.ts index 528efe1..d5d5dfb 100644 --- a/src/states/texts.svelte.ts +++ b/src/states/texts.svelte.ts @@ -14,6 +14,7 @@ function createState() { return texts; }, addText(text: string) { + if (text.trim().length === 0) return; texts.push({ text, id: nextId }); nextId++; }, diff --git a/tests/unit/components/text/TextManager.test.ts b/tests/unit/components/text/TextManager.test.ts index f81ebda..3904985 100644 --- a/tests/unit/components/text/TextManager.test.ts +++ b/tests/unit/components/text/TextManager.test.ts @@ -1,14 +1,18 @@ import TextManager from "$components/text/TextManager.svelte"; import { textsState } from "$states/texts.svelte"; -import { render } from "@testing-library/svelte"; -import { beforeEach, describe, it } from "vitest"; +import { render, screen } from "@testing-library/svelte"; +import { beforeEach, describe, expect, it } from "vitest"; describe("TextManager.svelte", () => { beforeEach(() => { - textsState.texts.length = 0; + while (textsState.texts.length > 0) { + textsState.texts.pop(); + } }); it("should render without crashing", () => { render(TextManager); + const cardTitle = screen.getByText("Тексты панелей"); + expect(cardTitle).toBeInTheDocument(); }); }); diff --git a/tests/unit/states/texts.test.ts b/tests/unit/states/texts.test.ts index 19f4dbe..5a95bd5 100644 --- a/tests/unit/states/texts.test.ts +++ b/tests/unit/states/texts.test.ts @@ -3,23 +3,16 @@ import { describe, expect, it } from "vitest"; describe("texts.svelte", () => { describe("initial state", () => { - it("should have default texts", () => { - expect(textsState.texts).toBeDefined(); - expect(Array.isArray(textsState.texts)).toBe(true); - expect(textsState.texts.length).toBeGreaterThan(0); - }); - - it("should have correct default texts", () => { + it("should have default texts with unique IDs", () => { const defaultTexts = ["About me", "Links", "Projects"]; expect(textsState.texts).toHaveLength(defaultTexts.length); + expect(Array.isArray(textsState.texts)).toBe(true); textsState.texts.forEach((textItem, index) => { expect(textItem.text).toBe(defaultTexts[index]); expect(textItem.id).toBe(index); }); - }); - it("should have unique IDs for all texts", () => { const ids = textsState.texts.map((item) => item.id); const uniqueIds = new Set(ids); expect(ids.length).toBe(uniqueIds.size); @@ -27,39 +20,18 @@ describe("texts.svelte", () => { }); describe("addText", () => { - it("should add new text", () => { + it("should add new text with unique ID and increment counter", () => { const initialLength = textsState.texts.length; + const initialIds = textsState.texts.map((item) => item.id); + const maxId = Math.max(...initialIds); const newText = "Test text"; textsState.addText(newText); expect(textsState.texts).toHaveLength(initialLength + 1); expect(textsState.texts[initialLength].text).toBe(newText); - }); - - it("should assign unique ID to new text", () => { - const initialIds = textsState.texts.map((item) => item.id); - const maxId = Math.max(...initialIds); - - textsState.addText("New text"); - const newText = textsState.texts[textsState.texts.length - 1]; - - expect(newText.id).toBe(maxId + 1); - expect(initialIds).not.toContain(newText.id); - }); - - it("should increment ID counter", () => { - const initialLength = textsState.texts.length; - const firstNewId = textsState.texts[initialLength - 1].id; - - textsState.addText("First"); - textsState.addText("Second"); - - const firstNew = textsState.texts[initialLength]; - const secondNew = textsState.texts[initialLength + 1]; - - expect(firstNew.id).toBe(firstNewId + 1); - expect(secondNew.id).toBe(firstNewId + 2); + expect(textsState.texts[initialLength].id).toBe(maxId + 1); + expect(initialIds).not.toContain(textsState.texts[initialLength].id); }); it("should preserve existing texts when adding new", () => { @@ -73,34 +45,26 @@ describe("texts.svelte", () => { }); }); - it("should add text with empty string", () => { + it("should not add text with empty string", () => { const initialLength = textsState.texts.length; textsState.addText(""); - expect(textsState.texts).toHaveLength(initialLength + 1); - expect(textsState.texts[initialLength].text).toBe(""); - }); - - it("should add text with special characters", () => { - const specialText = "Test @#$%^&*()_+-={}[]|\\:\";'<>?,./`~"; - - textsState.addText(specialText); - const addedText = textsState.texts[textsState.texts.length - 1]; - - expect(addedText.text).toBe(specialText); + expect(textsState.texts).toHaveLength(initialLength); }); }); describe("removeText", () => { - it("should remove text by ID", () => { + it("should remove text by ID and preserve other texts", () => { const initialLength = textsState.texts.length; - const idToRemove = textsState.texts[0].id; + const idToRemove = textsState.texts[1].id; + const otherTexts = textsState.texts.filter((item) => item.id !== idToRemove); textsState.removeText(idToRemove); expect(textsState.texts).toHaveLength(initialLength - 1); expect(textsState.texts.find((item) => item.id === idToRemove)).toBeUndefined(); + expect(textsState.texts).toStrictEqual(otherTexts); }); it("should not remove text with non-existent ID", () => { @@ -113,39 +77,10 @@ describe("texts.svelte", () => { expect(textsState.texts).toHaveLength(initialLength); expect(textsState.texts).toStrictEqual(initialTexts); }); - - it("should preserve other texts when removing one", () => { - const idToRemove = textsState.texts[1].id; - const otherTexts = textsState.texts.filter((item) => item.id !== idToRemove); - - textsState.removeText(idToRemove); - - expect(textsState.texts).toStrictEqual(otherTexts); - }); - - it("should handle removing last text", () => { - const lastId = textsState.texts[textsState.texts.length - 1].id; - const initialLength = textsState.texts.length; - - textsState.removeText(lastId); - - expect(textsState.texts).toHaveLength(initialLength - 1); - expect(textsState.texts.find((item) => item.id === lastId)).toBeUndefined(); - }); - - it("should handle removing first text", () => { - const firstId = textsState.texts[0].id; - const initialLength = textsState.texts.length; - - textsState.removeText(firstId); - - expect(textsState.texts).toHaveLength(initialLength - 1); - expect(textsState.texts.find((item) => item.id === firstId)).toBeUndefined(); - }); }); describe("texts getter", () => { - it("should return array of TextItem", () => { + it("should return array of TextItem with correct structure", () => { expect(Array.isArray(textsState.texts)).toBe(true); textsState.texts.forEach((item) => { expect(item).toHaveProperty("text"); @@ -183,7 +118,6 @@ describe("texts.svelte", () => { const initialLength = textsState.texts.length; const addedIds: number[] = []; - // Add multiple texts for (let i = 0; i < 5; i++) { textsState.addText(`Text ${i}`); addedIds.push(textsState.texts[textsState.texts.length - 1].id); @@ -191,7 +125,6 @@ describe("texts.svelte", () => { expect(textsState.texts).toHaveLength(initialLength + 5); - // Remove some of them textsState.removeText(addedIds[0]); textsState.removeText(addedIds[2]); textsState.removeText(addedIds[4]);