refactor(CloneModal): 音色克隆弹窗目录化拆分(602→440行, -27%) (#1186)
CI/CD Pipeline / Check if frontend-only change (push) Has been skipped
CI/CD Pipeline / PR Build API Image (push) Has been skipped
CI/CD Pipeline / Frontend Lint (push) Has been skipped
CI/CD Pipeline / PR Build Web Image (push) Has been skipped
CI/CD Pipeline / PR Build Worker Image (push) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (push) Successful in 1m54s
CI/CD Pipeline / Validate - Type Check (mypy) (push) Successful in 2m5s
CI/CD Pipeline / Validate - Migration (alembic) (push) Successful in 2m33s
CI/CD Pipeline / Build Staging Web Image (push) Successful in 3m18s
CI/CD Pipeline / Validate - Code Quality (push) Successful in 5m22s
CI/CD Pipeline / Build Staging Worker Image (push) Successful in 6m27s
CI/CD Pipeline / Integration Tests (push) Successful in 3m28s
CI/CD Pipeline / Unit Tests (push) Failing after 10m19s
CI/CD Pipeline / Build Production API Image (push) Has been skipped
CI/CD Pipeline / Build Production Worker Image (push) Has been skipped
CI/CD Pipeline / CI Gate (push) Has been skipped
CI/CD Pipeline / Build Production Web Image (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Build Staging API Image (push) Successful in 14m30s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (push) Successful in 33s
CI/CD Pipeline / ACR Image Cleanup (push) Successful in 35s
CI/CD Pipeline / Staging E2E Tests (push) Successful in 1m42s
CI/CD Pipeline / Staging API Integration Tests (push) Successful in 3m51s
CI/CD Pipeline / Canary Release to Production (push) Has been skipped

Co-authored-by: xiaoxia <dev@xiaoxiajianji.com>
Co-committed-by: xiaoxia <dev@xiaoxiajianji.com>
This commit was merged in pull request #1186.
This commit is contained in:
2026-07-30 11:01:16 +08:00
committed by auto-approve-bot
parent fb29f058e9
commit 613c75d041
12 changed files with 755 additions and 82 deletions
@@ -0,0 +1,11 @@
/**
* Smoke test for constants
*/
import { describe, it, expect } from "vitest"
import "@/components/voice/CloneModal/constants"
describe("constants smoke", () => {
it("should load module successfully", () => {
expect(true).toBe(true)
})
})
@@ -0,0 +1,40 @@
import { describe, expect, it, vi } from "vitest"
import { renderHook } from "@testing-library/react"
import { useAudioRecorder } from "@/components/voice/CloneModal/hooks/useAudioRecorder"
// Mock MediaRecorder
const mockMediaRecorder = {
start: vi.fn(),
stop: vi.fn(),
pause: vi.fn(),
resume: vi.fn(),
mimeType: "audio/webm",
state: "inactive",
ondataavailable: null,
onstop: null,
}
vi.stubGlobal(
"MediaRecorder",
vi.fn().mockImplementation(() => mockMediaRecorder),
)
vi.stubGlobal("navigator", {
mediaDevices: {
getUserMedia: vi.fn().mockResolvedValue({
getTracks: () => [{ stop: vi.fn() }],
}),
},
})
describe("useAudioRecorder", () => {
it("returns initial state", () => {
const { result } = renderHook(() => useAudioRecorder())
expect(result.current.isRecording).toBe(false)
expect(result.current.recordTime).toBe(0)
expect(result.current.recordedBlob).toBe(null)
expect(typeof result.current.toggleRecord).toBe("function")
expect(typeof result.current.reset).toBe("function")
expect(typeof result.current.formattedTime).toBe("string")
})
})
@@ -0,0 +1,11 @@
/**
* Smoke test for index
*/
import { describe, it, expect } from "vitest"
import "@/components/voice/CloneModal"
describe("index smoke", () => {
it("should load module successfully", () => {
expect(true).toBe(true)
})
})
@@ -0,0 +1,11 @@
/**
* Smoke test for types
*/
import { describe, it, expect } from "vitest"
import "@/components/voice/CloneModal/types"
describe("types smoke", () => {
it("should load module successfully", () => {
expect(true).toBe(true)
})
})
@@ -0,0 +1,11 @@
/**
* Smoke test for utils
*/
import { describe, it, expect } from "vitest"
import "@/components/voice/CloneModal/utils"
describe("utils smoke", () => {
it("should load module successfully", () => {
expect(true).toBe(true)
})
})