Read the review card fill from localStorage before picking a new one.

The review screen’s effect ran before draft hydration, so reload always generated a fresh color and overwrote the stored one.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
adilalloandCursor committed 2026-09-29 14:05:30 -06:00
1 parent 6d536880fe
commit b12de611f7
5 files changed
+199 -27

No files matched your search

@@ -1,10 +1,11 @@
import { useEffect, useLayoutEffect } from "react";
import { describe, expect, it, vi } from "vitest";
import { beforeEach, describe, expect, it, vi } from "vitest";
import { waitFor } from "@testing-library/react";
import { renderWithProviders as render, screen } from "../utils/test-utils";
import "@testing-library/jest-dom/vitest";
import { FinalReviewScreen } from "../../app/(app)/create/screens/review/FinalReviewScreen";
import { useCreateFlow } from "../../app/(app)/create/context/CreateFlowContext";
import { CREATE_FLOW_ANONYMOUS_KEY } from "../../app/(app)/create/utils/anonymousDraftStorage";
import {
dominantColorFromImageUrl,
randomPreviewSurfaceColor,
@@ -60,6 +61,10 @@ function FinalReviewWithStateProbe({
}
describe("Final review preview surface", () => {
beforeEach(() => {
window.localStorage.removeItem(CREATE_FLOW_ANONYMOUS_KEY);
vi.mocked(randomPreviewSurfaceColor).mockClear();
});
it("fills the card from the uploaded logo’s most common color", async () => {
render(<FinalReviewWithAvatar />);
@@ -95,6 +100,34 @@ describe("Final review preview surface", () => {
expect(vi.mocked(randomPreviewSurfaceColor)).toHaveBeenCalled();
});
it("reuses a fallback saved only in localStorage across a fresh mount", async () => {
window.localStorage.setItem(
CREATE_FLOW_ANONYMOUS_KEY,
JSON.stringify({
title: "Oak Park Commons",
communityContext: "Local mutual aid.",
previewSurfaceColor: "hsl(200, 60%, 80%)",
}),
);
let latest: CreateFlowState = {};
render(
<FinalReviewWithStateProbe
initial={{
title: "Oak Park Commons",
communityContext: "Local mutual aid.",
}}
onState={(state) => {
latest = state;
}}
/>,
);
await waitFor(() => {
expect(latest.previewSurfaceColor).toBe("hsl(200, 60%, 80%)");
});
expect(vi.mocked(randomPreviewSurfaceColor)).not.toHaveBeenCalled();
});
it("reuses the stored fallback instead of picking a new color", async () => {
vi.mocked(randomPreviewSurfaceColor).mockClear();
render(