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
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:
@@ -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")
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user