155 lines
3.7 KiB
TypeScript
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",
|
|
},
|
|
],
|
|
},
|
|
});
|
|
});
|