Files
auto-virtual-tryon-frontend/tests/app/api/order-revisions.route.test.ts

155 lines
3.7 KiB
TypeScript

import { afterEach, expect, test, vi } from "vitest";
import {
GET,
POST,
} from "../../../app/api/orders/[orderId]/revisions/route";
afterEach(() => {
vi.unstubAllEnvs();
vi.unstubAllGlobals();
});
test("proxies manual revision registration and normalizes success data", async () => {
vi.stubEnv("BACKEND_BASE_URL", "http://backend.test/api/v1");
const fetchMock = vi.fn().mockResolvedValue(
new Response(
JSON.stringify({
order_id: 101,
workflow_id: "wf-101",
asset_id: 501,
parent_asset_id: 11,
root_asset_id: 11,
version_no: 1,
review_task_status: "revision_uploaded",
latest_revision_asset_id: 501,
revision_count: 1,
}),
{
status: 201,
headers: {
"content-type": "application/json",
},
},
),
);
vi.stubGlobal("fetch", fetchMock);
const request = new Request("http://localhost/api/orders/101/revisions", {
method: "POST",
headers: {
"content-type": "application/json",
},
body: JSON.stringify({
parent_asset_id: 11,
uploaded_uri: "mock://manual-revision-v1",
reviewer_id: 88,
comment: "人工修订第一版",
}),
});
const response = await POST(request, {
params: Promise.resolve({ orderId: "101" }),
});
const payload = await response.json();
expect(response.status).toBe(201);
expect(payload).toEqual({
mode: "proxy",
data: {
orderId: 101,
workflowId: "wf-101",
assetId: 501,
parentAssetId: 11,
rootAssetId: 11,
versionNo: 1,
reviewTaskStatus: "revision_uploaded",
latestRevisionAssetId: 501,
revisionCount: 1,
},
});
});
test("proxies revision chain lookup and normalizes the item list", async () => {
vi.stubEnv("BACKEND_BASE_URL", "http://backend.test/api/v1");
const fetchMock = vi.fn().mockResolvedValue(
new Response(
JSON.stringify({
order_id: 101,
latest_revision_asset_id: 502,
revision_count: 2,
items: [
{
asset_id: 501,
order_id: 101,
parent_asset_id: 11,
root_asset_id: 11,
version_no: 1,
is_current_version: false,
uri: "mock://manual-revision-v1",
created_at: "2026-03-27T00:10:00Z",
},
{
asset_id: 502,
order_id: 101,
parent_asset_id: 501,
root_asset_id: 11,
version_no: 2,
is_current_version: true,
uri: "mock://manual-revision-v2",
created_at: "2026-03-27T00:20:00Z",
},
],
}),
{
status: 200,
headers: {
"content-type": "application/json",
},
},
),
);
vi.stubGlobal("fetch", fetchMock);
const response = await GET(new Request("http://localhost/api/orders/101/revisions"), {
params: Promise.resolve({ orderId: "101" }),
});
const payload = await response.json();
expect(response.status).toBe(200);
expect(payload).toEqual({
mode: "proxy",
data: {
orderId: 101,
latestRevisionAssetId: 502,
revisionCount: 2,
items: [
{
assetId: 501,
orderId: 101,
parentAssetId: 11,
rootAssetId: 11,
versionNo: 1,
isCurrentVersion: false,
uri: "mock://manual-revision-v1",
createdAt: "2026-03-27T00:10:00Z",
},
{
assetId: 502,
orderId: 101,
parentAssetId: 501,
rootAssetId: 11,
versionNo: 2,
isCurrentVersion: true,
uri: "mock://manual-revision-v2",
createdAt: "2026-03-27T00:20:00Z",
},
],
},
});
});