071faa482c
纳入 AGC Cargo workspace 的统一 rustfmt 检查与格式化入口 完成项目 TypeScript/Prettier 与 Rust 全量格式化 修复 Pingora expected executable 门禁的空白敏感误报 同步开发运维文档与 AGC skill pack 格式化忽略规则
42 lines
1.4 KiB
TypeScript
42 lines
1.4 KiB
TypeScript
/* @vitest-environment jsdom */
|
|
|
|
import { act, renderHook } from '@testing-library/react';
|
|
import type { ReactNode } from 'react';
|
|
import { describe, expect, it, vi } from 'vitest';
|
|
|
|
import { useImageCanvasActions } from './ImageCanvasActionsContext';
|
|
import { ImageCanvasActionsProvider } from './ImageCanvasActionsProvider';
|
|
|
|
describe('ImageCanvasActionsContext', () => {
|
|
it('exposes the editor-scoped canvas actions', () => {
|
|
const focusResource = vi.fn(() => ({ successed: true }));
|
|
const refreshCanvas = vi.fn();
|
|
const { result } = renderHook(useImageCanvasActions, {
|
|
wrapper: ({ children }: { children: ReactNode }) => (
|
|
<ImageCanvasActionsProvider
|
|
focusResource={focusResource}
|
|
refreshCanvas={refreshCanvas}
|
|
>
|
|
{children}
|
|
</ImageCanvasActionsProvider>
|
|
),
|
|
});
|
|
|
|
let focusResult: { successed: boolean } | undefined;
|
|
act(() => {
|
|
focusResult = result.current.focusResource('resource-a');
|
|
result.current.refreshCanvas();
|
|
});
|
|
|
|
expect(focusResult).toEqual({ successed: true });
|
|
expect(focusResource).toHaveBeenCalledWith('resource-a');
|
|
expect(refreshCanvas).toHaveBeenCalledTimes(1);
|
|
});
|
|
|
|
it('fails clearly when consumed outside the editor provider', () => {
|
|
expect(() => renderHook(useImageCanvasActions)).toThrow(
|
|
'useImageCanvasActions must be used within ImageCanvasActionsProvider',
|
|
);
|
|
});
|
|
});
|