mirror of
https://github.com/snapotter-hq/SnapOtter.git
synced 2026-08-03 07:46:42 +02:00
feat(qr-generate): register preview panel, update descriptions, update e2e test
This commit is contained in:
@@ -130,6 +130,11 @@ const QrGenerateSettings = lazy(() =>
|
||||
default: m.QrGenerateSettings,
|
||||
})),
|
||||
);
|
||||
const QrGeneratePreview = lazy(() =>
|
||||
import("@/components/tools/qr-generate-preview").then((m) => ({
|
||||
default: m.QrGeneratePreview,
|
||||
})),
|
||||
);
|
||||
const BarcodeReadSettings = lazy(() =>
|
||||
import("@/components/tools/barcode-read-settings").then((m) => ({
|
||||
default: m.BarcodeReadSettings,
|
||||
@@ -276,7 +281,10 @@ export const toolRegistry = new Map<string, ToolRegistryEntry>([
|
||||
["compare", { displayMode: "before-after", Settings: CompareSettings }],
|
||||
["find-duplicates", { displayMode: "before-after", Settings: FindDuplicatesSettings }],
|
||||
["color-palette", { displayMode: "before-after", Settings: ColorPaletteSettings }],
|
||||
["qr-generate", { displayMode: "no-dropzone", Settings: QrGenerateSettings }],
|
||||
[
|
||||
"qr-generate",
|
||||
{ displayMode: "no-dropzone", Settings: QrGenerateSettings, ResultsPanel: QrGeneratePreview },
|
||||
],
|
||||
["barcode-read", { displayMode: "before-after", Settings: BarcodeReadSettings }],
|
||||
|
||||
// Layout & Composition
|
||||
|
||||
@@ -230,7 +230,7 @@ export const TOOLS: Tool[] = [
|
||||
{
|
||||
id: "qr-generate",
|
||||
name: "QR Code Generator",
|
||||
description: "Generate QR codes from text or URLs",
|
||||
description: "Generate styled QR codes with custom colors, patterns, and logos",
|
||||
category: "utilities",
|
||||
icon: "QrCode",
|
||||
route: "/qr-generate",
|
||||
|
||||
@@ -88,7 +88,7 @@ export const en = {
|
||||
"color-palette": { name: "Color Palette", description: "Extract dominant colors from image" },
|
||||
"qr-generate": {
|
||||
name: "QR Code Generator",
|
||||
description: "Generate QR codes from text or URLs",
|
||||
description: "Generate styled QR codes with custom colors, patterns, and logos",
|
||||
},
|
||||
"barcode-read": {
|
||||
name: "Barcode Reader",
|
||||
|
||||
@@ -148,12 +148,13 @@ test.describe("Tool processing (core tools)", () => {
|
||||
|
||||
test("qr-generate creates QR code without file upload", async ({ loggedInPage: page }) => {
|
||||
await page.goto("/qr-generate");
|
||||
// Fill in QR text
|
||||
await page.locator("textarea").first().fill("https://example.com");
|
||||
await page.getByRole("button", { name: /generate qr/i }).click();
|
||||
await waitForProcessing(page);
|
||||
// QR has a "Download QR Code" button in the left panel
|
||||
await expect(page.getByText(/download qr/i).first()).toBeVisible({ timeout: 15_000 });
|
||||
// Fill in URL input (client-side generation, live preview)
|
||||
await page.getByTestId("qr-input-url").fill("https://example.com");
|
||||
// Verify the live preview rendered (canvas or svg inside the preview area)
|
||||
await expect(page.locator("canvas, svg").first()).toBeVisible({ timeout: 5000 });
|
||||
// Download button should be enabled
|
||||
const downloadBtn = page.getByTestId("qr-generate-download");
|
||||
await expect(downloadBtn).toBeEnabled();
|
||||
});
|
||||
|
||||
test("vectorize processes image", async ({ loggedInPage: page }) => {
|
||||
|
||||
Reference in New Issue
Block a user