fix: harden favorites controller lifecycle
This commit is contained in:
@@ -2,7 +2,10 @@
|
||||
|
||||
import { beforeEach, describe, expect, test, vi } from "vitest";
|
||||
|
||||
import { syncFavoriteRowPickers } from "../src/content/market/favorite-row-picker";
|
||||
import {
|
||||
disposeFavoriteRowPickers,
|
||||
syncFavoriteRowPickers
|
||||
} from "../src/content/market/favorite-row-picker";
|
||||
import type { FavoriteCreatorInput, FavoriteFolder } from "../src/content/market/favorites-store";
|
||||
|
||||
const firstFolder = createFolder("folder-1", "合作");
|
||||
@@ -129,6 +132,7 @@ async function flushAsyncEvents(): Promise<void> {
|
||||
|
||||
describe("favorite-row-picker", () => {
|
||||
beforeEach(() => {
|
||||
disposeFavoriteRowPickers(document);
|
||||
document.body.innerHTML = "";
|
||||
});
|
||||
|
||||
@@ -355,6 +359,26 @@ describe("favorite-row-picker", () => {
|
||||
expect(readPopover()).toBeNull();
|
||||
});
|
||||
|
||||
test("disposes an open picker and clears its detached action handler", () => {
|
||||
const actionCell = createActionCell();
|
||||
const onSetCreatorFolderIds = vi.fn(async () => {});
|
||||
|
||||
sync({ actionCell, onSetCreatorFolderIds });
|
||||
const button = readFavoriteButton(actionCell);
|
||||
button.click();
|
||||
expect(readPopover()).not.toBeNull();
|
||||
|
||||
disposeFavoriteRowPickers(document);
|
||||
disposeFavoriteRowPickers(document);
|
||||
|
||||
expect(readPopover()).toBeNull();
|
||||
expect(button.onclick).toBeNull();
|
||||
document.dispatchEvent(new KeyboardEvent("keydown", { key: "Escape" }));
|
||||
document.body.dispatchEvent(new Event("pointerdown", { bubbles: true }));
|
||||
button.click();
|
||||
expect(onSetCreatorFolderIds).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
test("clamps a bottom-right picker within the viewport", () => {
|
||||
const actionCell = createActionCell();
|
||||
const originalWidth = Object.getOwnPropertyDescriptor(
|
||||
|
||||
Reference in New Issue
Block a user