Files
kandev/apps/web/components/azure-devops/azure-devops-status.test.ts
T
João Salavisa ce82e2a4ab fix(i18n): externalize remaining frontend copy (#2616)
Co-authored-by: Kandev Agent <agent@kandev.dev>
2026-08-13 11:11:46 +01:00

66 lines
2.4 KiB
TypeScript

import { describe, expect, it } from "vitest";
import { getAzureDevOpsPullRequestPresentation } from "./azure-devops-status";
import type { AzureDevOpsTaskPullRequest } from "@/lib/types/azure-devops";
function taskPullRequest(
overrides: Partial<AzureDevOpsTaskPullRequest> = {},
): AzureDevOpsTaskPullRequest {
return {
id: "link-1",
taskId: "task-1",
repositoryId: "repo-1",
organizationUrl: "https://dev.azure.com/acme",
projectId: "project-1",
azureRepositoryId: "azure-repo-1",
pullRequestId: 42,
pullRequestUrl: "https://dev.azure.com/acme/project/_git/repo/pullrequest/42",
title: "Ship integration",
sourceBranch: "refs/heads/feature",
targetBranch: "refs/heads/main",
authorId: "user-1",
authorName: "Alice",
status: "active",
isDraft: false,
createdAt: "2026-01-01T00:00:00Z",
updatedAt: "2026-01-01T00:00:00Z",
...overrides,
};
}
describe("getAzureDevOpsPullRequestPresentation", () => {
it("prioritizes terminal Azure states", () => {
expect(getAzureDevOpsPullRequestPresentation(taskPullRequest({ status: "completed" }))).toEqual(
{ provider: "azure_devops", labelKey: "azuredevops:prStatusCompleted", tone: "success" },
);
expect(getAzureDevOpsPullRequestPresentation(taskPullRequest({ status: "abandoned" }))).toEqual(
{ provider: "azure_devops", labelKey: "azuredevops:prStatusAbandoned", tone: "muted" },
);
});
it("surfaces policy failures ahead of review state", () => {
expect(
getAzureDevOpsPullRequestPresentation(
taskPullRequest({ policyState: "failure", reviewState: "approved" }),
),
).toEqual({
provider: "azure_devops",
labelKey: "azuredevops:prStatusPolicyFailed",
tone: "danger",
});
});
it("distinguishes drafts, review waits, and ready pull requests", () => {
expect(getAzureDevOpsPullRequestPresentation(taskPullRequest({ isDraft: true })).labelKey).toBe(
"azuredevops:prStatusDraft",
);
expect(
getAzureDevOpsPullRequestPresentation(taskPullRequest({ reviewState: "waiting" })).labelKey,
).toBe("azuredevops:prStatusWaitingForReview");
expect(
getAzureDevOpsPullRequestPresentation(
taskPullRequest({ reviewState: "approved", policyState: "success" }),
),
).toEqual({ provider: "azure_devops", labelKey: "azuredevops:prStatusReady", tone: "success" });
});
});