Files
kandev/apps/web/e2e/tests/github/issue-list-task-indicator.spec.ts
T
2026-07-13 19:19:23 +01:00

69 lines
2.5 KiB
TypeScript

import { test, expect } from "../../fixtures/test-base";
const OWNER = "testorg";
const REPO = "testrepo";
function issueMetadata(number: number) {
return {
issue_url: `https://github.com/${OWNER}/${REPO}/issues/${number}`,
issue_number: number,
issue_repo: `${OWNER}/${REPO}`,
};
}
test.describe("GitHub issue list task indicator", () => {
test("shows linked tasks, leaves unlinked issues unchanged, and navigates", async ({
testPage,
apiClient,
seedData,
}) => {
test.setTimeout(60_000);
await apiClient.mockGitHubReset();
await apiClient.mockGitHubSetUser("test-user");
await apiClient.mockGitHubAddIssues(
[100, 101, 102].map((number) => ({
number,
title: `Issue ${number}`,
state: "open",
author_login: "test-user",
repo_owner: OWNER,
repo_name: REPO,
assignees: ["test-user"],
})),
);
const linked = await apiClient.createTask(seedData.workspaceId, "Linked issue task", {
workflow_id: seedData.workflowId,
workflow_step_id: seedData.startStepId,
metadata: issueMetadata(100),
});
for (const title of ["First shared task", "Second shared task"]) {
await apiClient.createTask(seedData.workspaceId, title, {
workflow_id: seedData.workflowId,
workflow_step_id: seedData.startStepId,
metadata: issueMetadata(102),
});
}
await testPage.goto("/github");
const scopeBar = testPage.getByTestId("github-presets-scope-bar");
await expect(scopeBar).toBeVisible({ timeout: 15_000 });
await scopeBar.getByRole("button", { name: "Issues", exact: true }).click();
const linkedRow = testPage.locator('[data-testid="issue-row"][data-issue-number="100"]');
const unlinkedRow = testPage.locator('[data-testid="issue-row"][data-issue-number="101"]');
const sharedRow = testPage.locator('[data-testid="issue-row"][data-issue-number="102"]');
await expect(linkedRow).toBeVisible({ timeout: 15_000 });
await expect(linkedRow.getByTestId("issue-row-task-indicator-single")).toContainText(
"Linked issue task",
);
await expect(unlinkedRow.getByTestId("issue-row-task-indicator-single")).toHaveCount(0);
await expect(sharedRow.getByTestId("issue-row-task-indicator-multi")).toContainText("2");
await linkedRow.getByTestId("issue-row-task-indicator-single").click();
await expect(testPage).toHaveURL(new RegExp(`/t/${linked.id}(?:\\?|$)`), {
timeout: 15_000,
});
});
});