From e575190d83239259765035a3a7be9422d396ed6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=94=E4=BB=A4=E5=BC=98?= Date: Wed, 16 Sep 2026 21:56:28 +0800 Subject: [PATCH] revert 90d06c2b5f55596ae985703dd7ba12d00fd1f31d revert Merge branch 'master' into feat/bgfilter-api --- .../pages/AdminEditorAssetQueryPage.test.tsx | 28 ++----------- .../agent-runtime/directActiveTurns.ts | 17 +++----- .../appSurface/project-development.suite.ts | 2 +- .../tests/directActiveTurns.test.tsx | 39 +------------------ .../workspaceLauncherManifestMerge.test.tsx | 2 - .../CreationLandingView.test.tsx | 2 +- 6 files changed, 13 insertions(+), 77 deletions(-) diff --git a/apps/admin-web/src/pages/AdminEditorAssetQueryPage.test.tsx b/apps/admin-web/src/pages/AdminEditorAssetQueryPage.test.tsx index 0feeb767d..f262b8254 100644 --- a/apps/admin-web/src/pages/AdminEditorAssetQueryPage.test.tsx +++ b/apps/admin-web/src/pages/AdminEditorAssetQueryPage.test.tsx @@ -38,7 +38,6 @@ vi.mock('../api/adminApiClient', () => ({ interface MockIntersectionObserverController { enter: (target: Element) => void; - enterAll: (targets: Element[]) => void; isObserved: (target: Element) => boolean; } @@ -107,25 +106,6 @@ function installIntersectionObserverMock(): MockIntersectionObserverController { ); }); }, - enterAll(targets) { - act(() => { - for (const target of targets) { - const record = observed.get(target); - if (!record) { - throw new Error('目标缩略图尚未进入 IntersectionObserver'); - } - record.callback( - [ - { - isIntersecting: true, - target, - } as IntersectionObserverEntry, - ], - record.observer, - ); - } - }); - }, isObserved(target) { return observed.has(target); }, @@ -773,10 +753,10 @@ test('后台素材查询为大量同时可见的缩略图持续错峰换签', as const thumbnails = entries.map((entry) => thumbnailElementForLabel(entry.label), ); - for (const thumbnail of thumbnails) { + thumbnails.forEach((thumbnail) => { expect(observer.isObserved(thumbnail)).toBe(true); - } - observer.enterAll(thumbnails); + observer.enter(thumbnail); + }); await act(async () => { await Promise.resolve(); }); @@ -796,7 +776,7 @@ test('后台素材查询为大量同时可见的缩略图持续错峰换签', as await vi.advanceTimersByTimeAsync(200); }); expect(getAdminAssetReadUrl).toHaveBeenCalledTimes(105); -}, 10_000); +}); test('后台素材查询读取更多后为新进入可视区域的素材换签', async () => { const observer = installIntersectionObserverMock(); diff --git a/apps/ai-game-creator-shell/src/features/agent-runtime/directActiveTurns.ts b/apps/ai-game-creator-shell/src/features/agent-runtime/directActiveTurns.ts index f859284e1..0eadbeacd 100644 --- a/apps/ai-game-creator-shell/src/features/agent-runtime/directActiveTurns.ts +++ b/apps/ai-game-creator-shell/src/features/agent-runtime/directActiveTurns.ts @@ -38,16 +38,11 @@ export function useDirectActiveTurns({ const [snapshotReadFailed, setSnapshotReadFailed] = useState(false); const mountedRef = useRef(true); const inFlightRef = useRef | null>(null); - const retryTimerRef = useRef(null); useEffect(() => { mountedRef.current = true; return () => { mountedRef.current = false; - if (retryTimerRef.current !== null) { - window.clearTimeout(retryTimerRef.current); - retryTimerRef.current = null; - } }; }, []); @@ -78,12 +73,12 @@ export function useDirectActiveTurns({ return; } catch { if (attempt < DIRECT_ACTIVE_TURNS_READ_ATTEMPTS) { - await new Promise((resolve) => { - retryTimerRef.current = window.setTimeout(() => { - retryTimerRef.current = null; - resolve(); - }, DIRECT_ACTIVE_TURNS_READ_RETRY_DELAY_MS * attempt); - }); + await new Promise((resolve) => + window.setTimeout( + resolve, + DIRECT_ACTIVE_TURNS_READ_RETRY_DELAY_MS * attempt, + ), + ); } } } diff --git a/apps/ai-game-creator-shell/tests/appSurface/project-development.suite.ts b/apps/ai-game-creator-shell/tests/appSurface/project-development.suite.ts index 51e004f20..8ca03bfe5 100644 --- a/apps/ai-game-creator-shell/tests/appSurface/project-development.suite.ts +++ b/apps/ai-game-creator-shell/tests/appSurface/project-development.suite.ts @@ -3350,7 +3350,7 @@ export function registerProjectWorkbenchFoundationTests() { expect(URL.createObjectURL).toHaveBeenCalledTimes( objectUrlCountBeforeLateResult, ); - }, 20_000); + }); it('renders immutable manifest versions, their parent graph, and bound asset highlights', async () => { const manifest = createGameCreationAppManifest( diff --git a/apps/ai-game-creator-shell/tests/directActiveTurns.test.tsx b/apps/ai-game-creator-shell/tests/directActiveTurns.test.tsx index 71fc665ef..5a000bf39 100644 --- a/apps/ai-game-creator-shell/tests/directActiveTurns.test.tsx +++ b/apps/ai-game-creator-shell/tests/directActiveTurns.test.tsx @@ -1,49 +1,12 @@ // @vitest-environment jsdom -import { - act, - cleanup, - fireEvent, - render, - renderHook, - screen, -} from '@testing-library/react'; +import { cleanup, fireEvent, render, screen } from '@testing-library/react'; import { afterEach, expect, it, vi } from 'vitest'; -import { useDirectActiveTurns } from '../src/features/agent-runtime/directActiveTurns'; import { ActiveProjectRunsPanel } from '../src/features/app-shell/ActiveProjectRunsPanel'; afterEach(() => cleanup()); -it('读取失败后的重试定时器会在卸载后清理', async () => { - vi.useFakeTimers(); - const invoke = vi.fn(async () => { - throw new Error('temporarily unavailable'); - }); - const clearTimeoutSpy = vi.spyOn(window, 'clearTimeout'); - - try { - const { unmount } = renderHook(() => - useDirectActiveTurns({ invoke, enabled: true }), - ); - await act(async () => { - await vi.advanceTimersByTimeAsync(0); - }); - expect(invoke).toHaveBeenCalledTimes(1); - - unmount(); - expect(clearTimeoutSpy).toHaveBeenCalled(); - - await act(async () => { - await vi.advanceTimersByTimeAsync(1_000); - }); - expect(invoke).toHaveBeenCalledTimes(1); - } finally { - vi.useRealTimers(); - clearTimeoutSpy.mockRestore(); - } -}); - it('按开始时间展示正在运行的项目并支持进入项目', () => { const onOpenProject = vi.fn(); render( diff --git a/apps/ai-game-creator-shell/tests/workspaceLauncherManifestMerge.test.tsx b/apps/ai-game-creator-shell/tests/workspaceLauncherManifestMerge.test.tsx index 5ea530842..28dde6e59 100644 --- a/apps/ai-game-creator-shell/tests/workspaceLauncherManifestMerge.test.tsx +++ b/apps/ai-game-creator-shell/tests/workspaceLauncherManifestMerge.test.tsx @@ -106,8 +106,6 @@ function installInvokeMock() { return { revision: HELD_REVISION }; case 'get_design_agent_runtime_mode': return null; - case 'list_game_creator_direct_active_turns': - return []; case 'read_project_permission_policy': return { projectPath: PROJECT_PATH, diff --git a/src/components/creation-home/CreationLandingView.test.tsx b/src/components/creation-home/CreationLandingView.test.tsx index d1f0f2b4e..1785dad1d 100644 --- a/src/components/creation-home/CreationLandingView.test.tsx +++ b/src/components/creation-home/CreationLandingView.test.tsx @@ -1351,7 +1351,7 @@ describe('CreationLandingView', () => { `/api/assets/read-url?objectKey=${encodeURIComponent(campaignObjectKey)}`, expect.objectContaining({ method: 'GET' }), ); - }, 10_000); + }); it('loads more featured resources when the list reaches the end', async () => { const observers = installIntersectionObserverMock();