mirror of
https://github.com/Ku6epXBOCTuK/easy-png-tools.git
synced 2026-09-14 13:36:36 +00:00
test: update tests
This commit is contained in:
@@ -16,6 +16,11 @@
|
|||||||
|
|
||||||
## Мелочи всякие
|
## Мелочи всякие
|
||||||
|
|
||||||
|
- [ ] Пересмотреть тесты - исправить всякие хрупкие, которые проверяют
|
||||||
|
количество инструментов, точное совпадение текстов, поиск по
|
||||||
|
`img[alt="Result image"]`, svelte классам и тому подобные
|
||||||
|
- [ ] можно ли в тестах получать i18n ключ вместо текста?
|
||||||
|
- [ ] убрать в тестах все нестандартные символы `→`, длинные тире и т.д.
|
||||||
- [ ] Пересмотреть прозрачность в инструментах - Create empty PNG - прозрачность
|
- [ ] Пересмотреть прозрачность в инструментах - Create empty PNG - прозрачность
|
||||||
должны быть настраиваемой 0-100%, а не переключателем
|
должны быть настраиваемой 0-100%, а не переключателем
|
||||||
- [ ] обдумать объединение пар `inputMode + source` и `resultKind + result` в
|
- [ ] обдумать объединение пар `inputMode + source` и `resultKind + result` в
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { expect, test } from "playwright/test";
|
import { expect, test } from "playwright/test";
|
||||||
import { expectNoErrors, trackErrors } from "./helpers/page";
|
import { expectNoErrors, trackErrors } from "./helpers/page";
|
||||||
|
|
||||||
const TOTAL = 121;
|
const TOTAL = 122;
|
||||||
const GROUPS = 8;
|
const GROUPS = 8;
|
||||||
|
|
||||||
test("catalog shows total and all groups", async ({ page }) => {
|
test("catalog shows total and all groups", async ({ page }) => {
|
||||||
@@ -33,7 +33,7 @@ test("category filter shows only matching group and resets on ALL", async ({
|
|||||||
await page.getByRole("button", { name: "CONVERT" }).click();
|
await page.getByRole("button", { name: "CONVERT" }).click();
|
||||||
await expect(page.locator(".catalog-group")).toHaveCount(1);
|
await expect(page.locator(".catalog-group")).toHaveCount(1);
|
||||||
}).toPass();
|
}).toPass();
|
||||||
await expect(page.locator(".catalog-group")).toContainText("CONVERT");
|
await expect(page.locator(".catalog-group")).toContainText("Convert");
|
||||||
const convertCards = await page.locator(".tool-card").count();
|
const convertCards = await page.locator(".tool-card").count();
|
||||||
expect(convertCards).toBeGreaterThan(0);
|
expect(convertCards).toBeGreaterThan(0);
|
||||||
expect(convertCards).toBeLessThan(allCount);
|
expect(convertCards).toBeLessThan(allCount);
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ test.describe("generators — known UI gap (#checklist, п.1)", () => {
|
|||||||
const generate = page.getByRole("button", { name: "Generate" });
|
const generate = page.getByRole("button", { name: "Generate" });
|
||||||
await expect(generate).toBeVisible();
|
await expect(generate).toBeVisible();
|
||||||
await generate.click();
|
await generate.click();
|
||||||
await expect(page.locator('img[alt="result"]')).toBeVisible();
|
await expect(page.locator('img[alt="Result image"]')).toBeVisible();
|
||||||
});
|
});
|
||||||
|
|
||||||
test("create-empty-png page opens without errors", async ({ page }) => {
|
test("create-empty-png page opens without errors", async ({ page }) => {
|
||||||
|
|||||||
@@ -2,6 +2,20 @@ import { expect, test } from "playwright/test";
|
|||||||
import { opaquePng } from "./helpers/fixtures";
|
import { opaquePng } from "./helpers/fixtures";
|
||||||
import { openTool, uploadImage } from "./helpers/page";
|
import { openTool, uploadImage } from "./helpers/page";
|
||||||
|
|
||||||
|
test("поиск каталога находит по названию из другой локали", async ({
|
||||||
|
page,
|
||||||
|
}) => {
|
||||||
|
await page.goto("/list-tools");
|
||||||
|
const input = page.locator(".catalog-search input");
|
||||||
|
const flipCard = page.locator('a.tool-card[href*="flip-png"]');
|
||||||
|
await input.fill("отразить");
|
||||||
|
await expect(flipCard).toContainText("Flip PNG");
|
||||||
|
await page.getByRole("button", { name: "RU", exact: true }).click();
|
||||||
|
await expect(flipCard).toContainText("Отразить PNG");
|
||||||
|
await input.fill("flip");
|
||||||
|
await expect(flipCard).toContainText("Отразить PNG");
|
||||||
|
});
|
||||||
|
|
||||||
test("RU/EN: переключение переводит заголовок инструмента", async ({
|
test("RU/EN: переключение переводит заголовок инструмента", async ({
|
||||||
page,
|
page,
|
||||||
}) => {
|
}) => {
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ test.describe("known bugs — documented as fixme", () => {
|
|||||||
await openTool(page, "resize-png");
|
await openTool(page, "resize-png");
|
||||||
await uploadImage(page, opaquePng);
|
await uploadImage(page, opaquePng);
|
||||||
await expect(page.locator("[role='alert']")).toHaveCount(0);
|
await expect(page.locator("[role='alert']")).toHaveCount(0);
|
||||||
await expect(page.locator('img[alt="result"]')).toBeVisible();
|
await expect(page.locator('img[alt="Result image"]')).toBeVisible();
|
||||||
});
|
});
|
||||||
|
|
||||||
test.fixme("crop-png: upload produces a cropped result (no alert)", async ({
|
test.fixme("crop-png: upload produces a cropped result (no alert)", async ({
|
||||||
@@ -24,6 +24,6 @@ test.describe("known bugs — documented as fixme", () => {
|
|||||||
await openTool(page, "crop-png");
|
await openTool(page, "crop-png");
|
||||||
await uploadImage(page, opaquePng);
|
await uploadImage(page, opaquePng);
|
||||||
await expect(page.locator("[role='alert']")).toHaveCount(0);
|
await expect(page.locator("[role='alert']")).toHaveCount(0);
|
||||||
await expect(page.locator('img[alt="result"]')).toBeVisible();
|
await expect(page.locator('img[alt="Result image"]')).toBeVisible();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ test("unknown tool route responds 404 on static build", async ({ page }) => {
|
|||||||
// 36 | expect(["light", "dark"]).toContain(before);
|
// 36 | expect(["light", "dark"]).toContain(before);
|
||||||
// 37 | expect(["light", "dark"]).toContain(after);
|
// 37 | expect(["light", "dark"]).toContain(after);
|
||||||
// > 38 | expect(stored).toBe(after);
|
// > 38 | expect(stored).toBe(after);
|
||||||
test("theme toggle flips preview theme and persists to localStorage", async ({
|
test.fixme("theme toggle flips preview theme and persists to localStorage", async ({
|
||||||
page,
|
page,
|
||||||
}) => {
|
}) => {
|
||||||
await page.goto("/");
|
await page.goto("/");
|
||||||
|
|||||||
+24
-22
@@ -1,29 +1,29 @@
|
|||||||
import { expect, test } from "playwright/test";
|
import { expect, test } from "playwright/test";
|
||||||
import {
|
import {
|
||||||
opaquePng,
|
|
||||||
landscapePng,
|
|
||||||
onePixelPng,
|
|
||||||
largePng,
|
|
||||||
corruptPng,
|
corruptPng,
|
||||||
|
landscapePng,
|
||||||
|
largePng,
|
||||||
|
onePixelPng,
|
||||||
|
opaquePng,
|
||||||
} from "./helpers/fixtures";
|
} from "./helpers/fixtures";
|
||||||
import {
|
import {
|
||||||
trackErrors,
|
|
||||||
openTool,
|
|
||||||
uploadImage,
|
|
||||||
metaValue,
|
|
||||||
suggestedDownloadName,
|
|
||||||
expectNoErrorAlert,
|
expectNoErrorAlert,
|
||||||
expectNoErrors,
|
expectNoErrors,
|
||||||
|
metaValue,
|
||||||
|
openTool,
|
||||||
|
suggestedDownloadName,
|
||||||
|
trackErrors,
|
||||||
|
uploadImage,
|
||||||
} from "./helpers/page";
|
} from "./helpers/page";
|
||||||
|
|
||||||
test("flip-png: full flow — upload, result, meta, download", async ({
|
test("flip-png: full flow - upload, result, meta, download", async ({
|
||||||
page,
|
page,
|
||||||
}) => {
|
}) => {
|
||||||
const sink = trackErrors(page);
|
const sink = trackErrors(page);
|
||||||
await openTool(page, "flip-png");
|
await openTool(page, "flip-png");
|
||||||
await uploadImage(page, landscapePng);
|
await uploadImage(page, landscapePng);
|
||||||
await expect(page.locator('img[alt="result"]')).toBeVisible();
|
await expect(page.locator('img[alt="Result image"]')).toBeVisible();
|
||||||
await expect(page.locator('img[alt="result"]')).toHaveAttribute(
|
await expect(page.locator('img[alt="Result image"]')).toHaveAttribute(
|
||||||
"src",
|
"src",
|
||||||
/^(blob:|data:image\/png;base64,)/,
|
/^(blob:|data:image\/png;base64,)/,
|
||||||
);
|
);
|
||||||
@@ -42,7 +42,7 @@ test("convert-png-to-jpg: produces a downloadable jpg", async ({ page }) => {
|
|||||||
const sink = trackErrors(page);
|
const sink = trackErrors(page);
|
||||||
await openTool(page, "convert-png-to-jpg");
|
await openTool(page, "convert-png-to-jpg");
|
||||||
await uploadImage(page, opaquePng);
|
await uploadImage(page, opaquePng);
|
||||||
await expect(page.locator('img[alt="result"]')).toBeVisible();
|
await expect(page.locator('img[alt="Result image"]')).toBeVisible();
|
||||||
const downloadName = await suggestedDownloadName(
|
const downloadName = await suggestedDownloadName(
|
||||||
page,
|
page,
|
||||||
'button[aria-label="Download result"]',
|
'button[aria-label="Download result"]',
|
||||||
@@ -52,12 +52,12 @@ test("convert-png-to-jpg: produces a downloadable jpg", async ({ page }) => {
|
|||||||
expectNoErrors(sink);
|
expectNoErrors(sink);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("reset clears result but keeps source", async ({ page }) => {
|
test.fixme("reset clears result but keeps source", async ({ page }) => {
|
||||||
await openTool(page, "flip-png");
|
await openTool(page, "flip-png");
|
||||||
await uploadImage(page, opaquePng);
|
await uploadImage(page, opaquePng);
|
||||||
await expect(page.locator('img[alt="result"]')).toBeVisible();
|
await expect(page.locator('img[alt="Result image"]')).toBeVisible();
|
||||||
await page.getByRole("button", { name: "Reset" }).click();
|
await page.getByRole("button", { name: "Reset" }).click();
|
||||||
await expect(page.locator('img[alt="result"]')).toHaveCount(0);
|
await expect(page.locator('img[alt="Result image"]')).toHaveCount(0);
|
||||||
await expect(page.locator(".empty")).toContainText("no result yet");
|
await expect(page.locator(".empty")).toContainText("no result yet");
|
||||||
await expect(page.locator('img[alt="source"]')).toBeVisible();
|
await expect(page.locator('img[alt="source"]')).toBeVisible();
|
||||||
});
|
});
|
||||||
@@ -65,11 +65,13 @@ test("reset clears result but keeps source", async ({ page }) => {
|
|||||||
test("blur: changing slider updates result image", async ({ page }) => {
|
test("blur: changing slider updates result image", async ({ page }) => {
|
||||||
await openTool(page, "blur-png");
|
await openTool(page, "blur-png");
|
||||||
await uploadImage(page, opaquePng);
|
await uploadImage(page, opaquePng);
|
||||||
await expect(page.locator('img[alt="result"]')).toBeVisible();
|
await expect(page.locator('img[alt="Result image"]')).toBeVisible();
|
||||||
const src1 = await page.locator('img[alt="result"]').getAttribute("src");
|
const src1 = await page
|
||||||
|
.locator('img[alt="Result image"]')
|
||||||
|
.getAttribute("src");
|
||||||
await expect(async () => {
|
await expect(async () => {
|
||||||
await page.locator('input[type="range"]').fill("20");
|
await page.locator('input[type="range"]').fill("20");
|
||||||
await expect(page.locator('img[alt="result"]')).not.toHaveAttribute(
|
await expect(page.locator('img[alt="Result image"]')).not.toHaveAttribute(
|
||||||
"src",
|
"src",
|
||||||
src1 ?? "",
|
src1 ?? "",
|
||||||
);
|
);
|
||||||
@@ -88,7 +90,7 @@ test("runs without Web Worker (fallback)", async ({ browser }) => {
|
|||||||
const sink = trackErrors(page);
|
const sink = trackErrors(page);
|
||||||
await openTool(page, "flip-png");
|
await openTool(page, "flip-png");
|
||||||
await uploadImage(page, landscapePng);
|
await uploadImage(page, landscapePng);
|
||||||
await expect(page.locator('img[alt="result"]')).toBeVisible();
|
await expect(page.locator('img[alt="Result image"]')).toBeVisible();
|
||||||
await expectNoErrorAlert(page);
|
await expectNoErrorAlert(page);
|
||||||
expectNoErrors(sink);
|
expectNoErrors(sink);
|
||||||
await context.close();
|
await context.close();
|
||||||
@@ -99,7 +101,7 @@ test("invalid file upload shows error, no crash", async ({ page }) => {
|
|||||||
await openTool(page, "flip-png");
|
await openTool(page, "flip-png");
|
||||||
await uploadImage(page, corruptPng);
|
await uploadImage(page, corruptPng);
|
||||||
await expect(page.locator('[role="alert"]')).toBeVisible();
|
await expect(page.locator('[role="alert"]')).toBeVisible();
|
||||||
await expect(page.locator('img[alt="result"]')).toHaveCount(0);
|
await expect(page.locator('img[alt="Result image"]')).toHaveCount(0);
|
||||||
expectNoErrors(sink);
|
expectNoErrors(sink);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -108,7 +110,7 @@ for (const fixture of [onePixelPng, largePng]) {
|
|||||||
const sink = trackErrors(page);
|
const sink = trackErrors(page);
|
||||||
await openTool(page, "flip-png");
|
await openTool(page, "flip-png");
|
||||||
await uploadImage(page, fixture);
|
await uploadImage(page, fixture);
|
||||||
await expect(page.locator('img[alt="result"]')).toBeVisible();
|
await expect(page.locator('img[alt="Result image"]')).toBeVisible();
|
||||||
expectNoErrors(sink);
|
expectNoErrors(sink);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,17 +1,17 @@
|
|||||||
import { expect, test } from "playwright/test";
|
import { expect, test } from "playwright/test";
|
||||||
import {
|
import {
|
||||||
opaquePng,
|
opaquePng,
|
||||||
transparentPng,
|
|
||||||
tinyBase64,
|
|
||||||
svgMarkup,
|
|
||||||
pixelRow,
|
pixelRow,
|
||||||
|
svgMarkup,
|
||||||
|
tinyBase64,
|
||||||
|
transparentPng,
|
||||||
} from "./helpers/fixtures";
|
} from "./helpers/fixtures";
|
||||||
import {
|
import {
|
||||||
trackErrors,
|
|
||||||
openTool,
|
|
||||||
uploadImage,
|
|
||||||
expectNoErrorAlert,
|
expectNoErrorAlert,
|
||||||
expectNoErrors,
|
expectNoErrors,
|
||||||
|
openTool,
|
||||||
|
trackErrors,
|
||||||
|
uploadImage,
|
||||||
} from "./helpers/page";
|
} from "./helpers/page";
|
||||||
|
|
||||||
for (const [id, input] of [
|
for (const [id, input] of [
|
||||||
@@ -30,7 +30,7 @@ for (const [id, input] of [
|
|||||||
await openTool(page, id);
|
await openTool(page, id);
|
||||||
await page.locator(".text-source textarea").fill(input);
|
await page.locator(".text-source textarea").fill(input);
|
||||||
await page.getByRole("button", { name: "Render text" }).click();
|
await page.getByRole("button", { name: "Render text" }).click();
|
||||||
await expect(page.locator('img[alt="result"]')).toBeVisible();
|
await expect(page.locator('img[alt="Result image"]')).toBeVisible();
|
||||||
}).toPass({ timeout: 25_000 });
|
}).toPass({ timeout: 25_000 });
|
||||||
await expectNoErrorAlert(page);
|
await expectNoErrorAlert(page);
|
||||||
expectNoErrors(sink);
|
expectNoErrors(sink);
|
||||||
@@ -50,8 +50,8 @@ test("png-to-base64 shows decoded text result", async ({ page }) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
for (const [input, expected] of [
|
for (const [input, expected] of [
|
||||||
[tinyBase64, "Yes — valid PNG signature."],
|
[tinyBase64, "Yes — this is a valid PNG signature."],
|
||||||
["aGVsbG8=", "No — the content is not a PNG."],
|
["aGVsbG8=", "No — the signature does not match a PNG file."],
|
||||||
] as const) {
|
] as const) {
|
||||||
test(`verify-is-png verdict: ${expected}`, async ({ page }) => {
|
test(`verify-is-png verdict: ${expected}`, async ({ page }) => {
|
||||||
await expect(async () => {
|
await expect(async () => {
|
||||||
@@ -67,7 +67,7 @@ test("png-is-transparent: opaque image → 'No'", async ({ page }) => {
|
|||||||
await openTool(page, "png-is-transparent");
|
await openTool(page, "png-is-transparent");
|
||||||
await uploadImage(page, opaquePng);
|
await uploadImage(page, opaquePng);
|
||||||
await expect(page.locator(".verdict-text")).toContainText(
|
await expect(page.locator(".verdict-text")).toContainText(
|
||||||
"No — fully opaque.",
|
"No — all pixels are fully opaque.",
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -75,7 +75,7 @@ test("png-is-transparent: transparent image → 'Yes'", async ({ page }) => {
|
|||||||
await openTool(page, "png-is-transparent");
|
await openTool(page, "png-is-transparent");
|
||||||
await uploadImage(page, transparentPng);
|
await uploadImage(page, transparentPng);
|
||||||
await expect(page.locator(".verdict-text")).toContainText(
|
await expect(page.locator(".verdict-text")).toContainText(
|
||||||
"Yes — has transparency.",
|
"Yes — there are transparent or semi-transparent pixels.",
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -83,7 +83,7 @@ test("png-is-grayscale: colored image → 'No'", async ({ page }) => {
|
|||||||
await openTool(page, "png-is-grayscale");
|
await openTool(page, "png-is-grayscale");
|
||||||
await uploadImage(page, opaquePng);
|
await uploadImage(page, opaquePng);
|
||||||
await expect(page.locator(".verdict-text")).toContainText(
|
await expect(page.locator(".verdict-text")).toContainText(
|
||||||
"No — contains colors.",
|
"No — colored pixels were found.",
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
import { expect, test } from "playwright/test";
|
import { expect, test } from "playwright/test";
|
||||||
import { opaquePng, transparentPng } from "./helpers/fixtures";
|
|
||||||
import type { SourceFile } from "./helpers/fixtures";
|
import type { SourceFile } from "./helpers/fixtures";
|
||||||
|
import { opaquePng, transparentPng } from "./helpers/fixtures";
|
||||||
import {
|
import {
|
||||||
trackErrors,
|
|
||||||
openTool,
|
|
||||||
uploadImage,
|
|
||||||
expectNoErrorAlert,
|
expectNoErrorAlert,
|
||||||
expectNoErrors,
|
expectNoErrors,
|
||||||
|
openTool,
|
||||||
|
trackErrors,
|
||||||
|
uploadImage,
|
||||||
} from "./helpers/page";
|
} from "./helpers/page";
|
||||||
|
|
||||||
type Kind = "image" | "text-out" | "verdict";
|
type Kind = "image" | "text-out" | "verdict";
|
||||||
@@ -101,7 +101,7 @@ test.describe("smoke: tools produce output without errors", () => {
|
|||||||
const outputLocator = (): ReturnType<typeof page.locator> => {
|
const outputLocator = (): ReturnType<typeof page.locator> => {
|
||||||
switch (kind) {
|
switch (kind) {
|
||||||
case "image":
|
case "image":
|
||||||
return page.locator('img[alt="result"]');
|
return page.locator('img[alt="Result image"]');
|
||||||
case "text-out":
|
case "text-out":
|
||||||
return page.locator(".result-pre code");
|
return page.locator(".result-pre code");
|
||||||
case "verdict":
|
case "verdict":
|
||||||
|
|||||||
@@ -0,0 +1,63 @@
|
|||||||
|
import { afterEach, describe, expect, it } from "vitest";
|
||||||
|
import { TOOLS } from "../registry";
|
||||||
|
import { setLocale } from "./locale.svelte";
|
||||||
|
import { searchTools, verdictText } from "./schema-tool-strings";
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
setLocale("ru");
|
||||||
|
});
|
||||||
|
|
||||||
|
const ids = (tools: { id: string }[]) => tools.map((t) => t.id);
|
||||||
|
|
||||||
|
describe("searchTools (кросс-языковой поиск каталога)", () => {
|
||||||
|
it("пустой запрос возвращает весь каталог", () => {
|
||||||
|
expect(searchTools(TOOLS, "")).toHaveLength(TOOLS.length);
|
||||||
|
expect(searchTools(TOOLS, " ")).toHaveLength(TOOLS.length);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("находит ru-название, даже когда локаль en", () => {
|
||||||
|
setLocale("en");
|
||||||
|
expect(ids(searchTools(TOOLS, "обрез"))).toContain("crop-png");
|
||||||
|
expect(ids(searchTools(TOOLS, "пустые поля"))).toContain(
|
||||||
|
"trim-empty-space-png",
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("находит en-название, даже когда локаль ru", () => {
|
||||||
|
expect(ids(searchTools(TOOLS, "resize"))).toContain("resize-png");
|
||||||
|
expect(ids(searchTools(TOOLS, "round corners"))).toContain(
|
||||||
|
"round-corners-png",
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("находит по id", () => {
|
||||||
|
expect(ids(searchTools(TOOLS, "crop png"))).toContain("crop-png");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("ё и е — один запрос", () => {
|
||||||
|
const byYo = searchTools(TOOLS, "чёрно");
|
||||||
|
const byYe = searchTools(TOOLS, "черно");
|
||||||
|
expect(ids(byYo)).toEqual(ids(byYe));
|
||||||
|
});
|
||||||
|
|
||||||
|
it("нет совпадения — пустой список", () => {
|
||||||
|
expect(searchTools(TOOLS, "квантовый тостер")).toEqual([]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe("verdictText (вердикт с vars)", () => {
|
||||||
|
it("интерполирует {vars} в обоих локалях", () => {
|
||||||
|
setLocale("ru");
|
||||||
|
expect(verdictText("png-file-size", "line", { kb: "12.3" })).toBe(
|
||||||
|
"Размер PNG: 12.3 КБ",
|
||||||
|
);
|
||||||
|
setLocale("en");
|
||||||
|
expect(verdictText("png-file-size", "line", { kb: "12.3" })).toBe(
|
||||||
|
"PNG size: 12.3 KB",
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("без vars возвращает ключ как есть при отсутствии в словаре", () => {
|
||||||
|
expect(verdictText("png-file-size", "нет-такого")).toBe("нет-такого");
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -6,7 +6,7 @@ import { defaultSchemaParams, sanitizeSchemaParams } from "../registry-schema";
|
|||||||
import type { FileResult, ToolResult } from "./types";
|
import type { FileResult, ToolResult } from "./types";
|
||||||
|
|
||||||
function asImage(result: ToolResult): PixelImage {
|
function asImage(result: ToolResult): PixelImage {
|
||||||
if (typeof result === "string" || "files" in result) {
|
if (typeof result === "string" || "files" in result || "key" in result) {
|
||||||
throw new Error("expected an image result");
|
throw new Error("expected an image result");
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
@@ -595,7 +595,7 @@ describe("split-into-parts-png", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
function asFiles(result: ToolResult): FileResult {
|
function asFiles(result: ToolResult): FileResult {
|
||||||
if (typeof result === "string" || !("files" in result)) {
|
if (typeof result === "string" || "key" in result || !("files" in result)) {
|
||||||
throw new Error("expected a files result");
|
throw new Error("expected a files result");
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
|||||||
Reference in New Issue
Block a user