/** @jsxImportSource react */ import { expect, test } from "bun:test"; import { act } from "react"; import { Box } from "../../../ui"; import { createDomTestHarness } from "../../../renderers/electrobun/view/test-utils"; import { renderBuildoutCell } from "./cells"; import type { BuildoutRow } from "./model/types"; import { favoriteKey } from "./table-model"; const { render } = createDomTestHarness(); test("favorite table actions own their click and become disabled during a pending update", async () => { const row: BuildoutRow = { kind: "company", item: { id: "company", name: "Company" } }; const toggles: BuildoutRow[] = []; let rowSelections = 0; const cell = (busy: boolean) => renderBuildoutCell(row, { id: "favorite", label: "Favorite", width: 2, align: "left" }, { selected: false }, { favoriteBusyKey: busy ? favoriteKey(row) : null, toggleFavorite: (target) => { toggles.push(target); } }, ).content; const container = await render( { rowSelections += 1; }}>{cell(false)}{cell(true)}); const buttons = [...container.querySelectorAll("button")]; expect(buttons[0]!.disabled).toBe(false); expect(buttons[1]!.disabled).toBe(true); await act(async () => { buttons[0]!.dispatchEvent(new MouseEvent("mousedown", { bubbles: true })); buttons[0]!.click(); buttons[1]!.click(); }); expect(toggles).toEqual([row]); expect(rowSelections).toBe(0); });