Custom add and create flow polish

This commit is contained in:
adilallo
2026-05-08 20:32:24 -06:00
parent 26bcd61ea3
commit 026a1e6d71
68 changed files with 6208 additions and 527 deletions
@@ -0,0 +1,84 @@
import { useState } from "react";
import { describe, it, expect, afterEach, vi } from "vitest";
import {
renderWithProviders as render,
screen,
cleanup,
fireEvent,
} from "../utils/test-utils";
import "@testing-library/jest-dom/vitest";
import CustomMethodCardFieldBlocksSummary from "../../app/(app)/create/components/CustomMethodCardFieldBlocksSummary";
import messages from "../../messages/en/index";
import type { CustomMethodCardFieldBlock } from "../../lib/create/customMethodCardFieldBlocks";
afterEach(() => {
cleanup();
});
const uploadCopy =
messages.create.customRule.customMethodCardWizard.fieldModals.upload;
describe("CustomMethodCardFieldBlocksSummary", () => {
it("hides Upload when an upload block already has assetUrl; shows preview and remove control", () => {
const onBlocksChange = vi.fn();
render(
<CustomMethodCardFieldBlocksSummary
blocks={[
{
kind: "upload",
id: "u1",
blockTitle: "Attachment",
fileName: "photo.png",
assetUrl: "/api/uploads/test-id",
},
]}
onBlocksChange={onBlocksChange}
/>,
);
expect(
screen.getByRole("img", { name: uploadCopy.uploadPreviewImageAlt }),
).toHaveAttribute("src", "/api/uploads/test-id");
expect(
screen.getByRole("button", {
name: uploadCopy.clearPendingUploadAriaLabel,
}),
).toBeInTheDocument();
expect(screen.queryByRole("button", { name: "Upload" })).not.toBeInTheDocument();
});
it("after remove, parent can pass cleared blocks and Upload shows again", () => {
function Harness() {
const [blocks, setBlocks] = useState<CustomMethodCardFieldBlock[]>([
{
kind: "upload",
id: "u1",
blockTitle: "Attachment",
fileName: "photo.png",
assetUrl: "/api/uploads/test-id",
},
]);
return (
<CustomMethodCardFieldBlocksSummary
blocks={blocks}
onBlocksChange={setBlocks}
/>
);
}
render(<Harness />);
fireEvent.click(
screen.getByRole("button", {
name: uploadCopy.clearPendingUploadAriaLabel,
}),
);
expect(screen.getByRole("button", { name: "Upload" })).toBeInTheDocument();
expect(
screen.queryByRole("button", {
name: uploadCopy.clearPendingUploadAriaLabel,
}),
).not.toBeInTheDocument();
});
});