76 lines
2.3 KiB
TypeScript

import { describe, expect, it } from "vitest";
import {
deriveTaskStatusFromConfirmedPlatforms,
mapPlatformStatusToExecutionStatus,
type PlatformRunRecord
} from "../src/index";
function createRun(
status: PlatformRunRecord["status"],
selected = true
): PlatformRunRecord {
return {
platform: "tmall",
searchRequirement: "recommended",
status,
candidateCount: 1,
selectedCandidateIds: selected ? ["candidate-1"] : [],
lastUpdatedAt: new Date().toISOString()
};
}
describe("deriveTaskStatusFromConfirmedPlatforms", () => {
it("returns NoSelection when no platform has confirmed links", () => {
expect(
deriveTaskStatusFromConfirmedPlatforms([createRun("Skipped", false)])
).toBe("NoSelection");
});
it("returns Completed when all confirmed platforms are completed", () => {
expect(
deriveTaskStatusFromConfirmedPlatforms([
createRun("Completed"),
createRun("Completed")
])
).toBe("Completed");
});
it("returns PartialCompleted when at least one confirmed platform is completed and another is blocked", () => {
expect(
deriveTaskStatusFromConfirmedPlatforms([
createRun("Completed"),
createRun("Blocked")
])
).toBe("PartialCompleted");
});
it("returns Blocked when all confirmed platforms are blocked", () => {
expect(
deriveTaskStatusFromConfirmedPlatforms([createRun("SearchBlocked")])
).toBe("Blocked");
});
it("returns Failed when all confirmed platforms fail", () => {
expect(
deriveTaskStatusFromConfirmedPlatforms([createRun("Failed")])
).toBe("Failed");
});
});
describe("mapPlatformStatusToExecutionStatus", () => {
it("maps publishable platform statuses", () => {
expect(mapPlatformStatusToExecutionStatus("Completed")).toBe("completed");
expect(mapPlatformStatusToExecutionStatus("SearchBlocked")).toBe("blocked");
expect(mapPlatformStatusToExecutionStatus("Failed")).toBe("failed");
expect(mapPlatformStatusToExecutionStatus("Skipped")).toBe("skipped");
expect(mapPlatformStatusToExecutionStatus("NoResult")).toBe("no_result");
});
it("rejects running states", () => {
expect(() => mapPlatformStatusToExecutionStatus("Running")).toThrow(
/cannot be published/i
);
});
});