chore: remove obsolete test file (#1899 #1900)
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Has been cancelled
CI/CD Pipeline / Check if frontend-only change (pull_request) Has been cancelled
CI/CD Pipeline / Validate - Style (pull_request) Has been cancelled
CI/CD Pipeline / Validate - Security (pull_request) Has been cancelled
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Has been cancelled
CI/CD Pipeline / Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / Frontend Lint (pull_request) Has been cancelled
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / PR Build API Image (pull_request) Has been cancelled
CI/CD Pipeline / PR Build Web Image (pull_request) Has been cancelled
CI/CD Pipeline / PR Build Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Staging API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Has been cancelled
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been cancelled
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been cancelled
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / Build Production API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been cancelled
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been cancelled
CI/CD Pipeline / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / CI Gate (pull_request) Has been cancelled
AI Code Review / AI Code Review (pull_request) Has been cancelled
PR Automation / Auto Approve on CI Green (pull_request) Has been cancelled
PR Automation / Auto Merge on CI Green + Approved (pull_request) Has been cancelled
Preview Deploy / Deploy Preview Environment (pull_request) Has been cancelled

This commit is contained in:
2026-09-14 21:21:20 +08:00
parent 968176f036
commit dbe9adf04e
@@ -1,157 +0,0 @@
/**
* useUndoRedo hook 测试
*/
import { describe, it, expect, beforeEach } from "vitest"
import { renderHook, act } from "@testing-library/react"
import { useUndoRedo } from "@/pages/editing-planner/hooks/useUndoRedo"
describe("useUndoRedo", () => {
it("应该使用初始状态初始化", () => {
const { result } = renderHook(() => useUndoRedo(0))
expect(result.current.state).toBe(0)
expect(result.current.canUndo).toBe(false)
expect(result.current.canRedo).toBe(false)
})
it("set 应该更新状态并启用撤销", () => {
const { result } = renderHook(() => useUndoRedo(0))
act(() => {
result.current.set(1)
})
expect(result.current.state).toBe(1)
expect(result.current.canUndo).toBe(true)
expect(result.current.canRedo).toBe(false)
})
it("set 支持函数式更新", () => {
const { result } = renderHook(() => useUndoRedo(0))
act(() => {
result.current.set((prev) => prev + 1)
})
expect(result.current.state).toBe(1)
})
it("undo 应该回退到上一个状态", () => {
const { result } = renderHook(() => useUndoRedo(0))
act(() => {
result.current.set(1)
})
act(() => {
result.current.set(2)
})
expect(result.current.state).toBe(2)
act(() => {
result.current.undo()
})
expect(result.current.state).toBe(1)
expect(result.current.canUndo).toBe(true)
expect(result.current.canRedo).toBe(true)
})
it("redo 应该重做已撤销的操作", () => {
const { result } = renderHook(() => useUndoRedo(0))
act(() => result.current.set(1))
act(() => result.current.set(2))
act(() => result.current.undo())
expect(result.current.state).toBe(1)
act(() => {
result.current.redo()
})
expect(result.current.state).toBe(2)
expect(result.current.canUndo).toBe(true)
})
it("没有历史时 undo 不改变状态", () => {
const { result } = renderHook(() => useUndoRedo(0))
act(() => {
result.current.undo()
})
expect(result.current.state).toBe(0)
expect(result.current.canUndo).toBe(false)
})
it("没有未来时 redo 不改变状态", () => {
const { result } = renderHook(() => useUndoRedo(0))
act(() => result.current.set(1))
act(() => {
result.current.redo()
})
expect(result.current.state).toBe(1)
expect(result.current.canRedo).toBe(false)
})
it("新操作应该清空 redo 历史", () => {
const { result } = renderHook(() => useUndoRedo(0))
act(() => result.current.set(1))
act(() => result.current.set(2))
act(() => result.current.undo()) // state = 1, canRedo = true
expect(result.current.canRedo).toBe(true)
act(() => result.current.set(3)) // 新操作清空 redo
expect(result.current.state).toBe(3)
expect(result.current.canRedo).toBe(false)
})
it("reset 应该重置状态和历史", () => {
const { result } = renderHook(() => useUndoRedo(0))
act(() => result.current.set(1))
act(() => result.current.set(2))
act(() => {
result.current.reset(100)
})
expect(result.current.state).toBe(100)
expect(result.current.canUndo).toBe(false)
expect(result.current.canRedo).toBe(false)
})
it("多次 undo 后可以一直 undo 到初始状态", () => {
const { result } = renderHook(() => useUndoRedo(0))
act(() => result.current.set(1))
act(() => result.current.set(2))
act(() => result.current.set(3))
act(() => result.current.undo())
expect(result.current.state).toBe(2)
act(() => result.current.undo())
expect(result.current.state).toBe(1)
act(() => result.current.undo())
expect(result.current.state).toBe(0)
expect(result.current.canUndo).toBe(false)
})
it("支持对象类型状态", () => {
const { result } = renderHook(() => useUndoRedo({ count: 0, name: "test" }))
act(() => result.current.set({ count: 1, name: "test" }))
expect(result.current.state.count).toBe(1)
act(() => result.current.undo())
expect(result.current.state.count).toBe(0)
expect(result.current.state.name).toBe("test")
})
})