feat(FN-2625): merge fusion/fn-2625
This commit is contained in:
@@ -1059,6 +1059,19 @@ describe.skip("fn pi extension", () => {
|
||||
"api",
|
||||
"repos/acme/demo/issues?state=open&per_page=5",
|
||||
]);
|
||||
|
||||
const store = new TaskStore(tmpDir, join(tmpDir, ".fusion-global-settings"));
|
||||
await store.init();
|
||||
const tasks = await store.listTasks({ includeArchived: true });
|
||||
expect(tasks).toHaveLength(2);
|
||||
const issueOneTask = tasks.find((task) => task.sourceIssue?.issueNumber === 1);
|
||||
expect(issueOneTask?.sourceIssue).toEqual({
|
||||
provider: "github",
|
||||
repository: "acme/demo",
|
||||
externalIssueId: "1",
|
||||
issueNumber: 1,
|
||||
url: "https://github.com/acme/demo/issues/1",
|
||||
});
|
||||
});
|
||||
|
||||
it("fn_task_browse_github_issues lists issues via gh api", async () => {
|
||||
|
||||
@@ -922,12 +922,26 @@ describe("runTaskImportGitHubInteractive", () => {
|
||||
description: "Description 1\n\nSource: https://github.com/owner/repo/issues/1",
|
||||
column: "triage",
|
||||
dependencies: [],
|
||||
sourceIssue: {
|
||||
provider: "github",
|
||||
repository: "owner/repo",
|
||||
externalIssueId: "1",
|
||||
issueNumber: 1,
|
||||
url: "https://github.com/owner/repo/issues/1",
|
||||
},
|
||||
});
|
||||
expect(mockCreateTask).toHaveBeenCalledWith({
|
||||
title: "Third Issue",
|
||||
description: "Description 3\n\nSource: https://github.com/owner/repo/issues/3",
|
||||
column: "triage",
|
||||
dependencies: [],
|
||||
sourceIssue: {
|
||||
provider: "github",
|
||||
repository: "owner/repo",
|
||||
externalIssueId: "3",
|
||||
issueNumber: 3,
|
||||
url: "https://github.com/owner/repo/issues/3",
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
@@ -978,6 +992,13 @@ describe("runTaskImportGitHubInteractive", () => {
|
||||
description: "Description 2\n\nSource: https://github.com/owner/repo/issues/2",
|
||||
column: "triage",
|
||||
dependencies: [],
|
||||
sourceIssue: {
|
||||
provider: "github",
|
||||
repository: "owner/repo",
|
||||
externalIssueId: "2",
|
||||
issueNumber: 2,
|
||||
url: "https://github.com/owner/repo/issues/2",
|
||||
},
|
||||
});
|
||||
|
||||
const skipLine = logSpy.mock.calls.find(
|
||||
@@ -1224,6 +1245,13 @@ describe("runTaskImportFromGitHub", () => {
|
||||
description: "Description 1\n\nSource: https://github.com/owner/repo/issues/1",
|
||||
column: "triage",
|
||||
dependencies: [],
|
||||
sourceIssue: {
|
||||
provider: "github",
|
||||
repository: "owner/repo",
|
||||
externalIssueId: "1",
|
||||
issueNumber: 1,
|
||||
url: "https://github.com/owner/repo/issues/1",
|
||||
},
|
||||
});
|
||||
|
||||
const successLine = logSpy.mock.calls.find(
|
||||
@@ -1299,6 +1327,13 @@ describe("runTaskImportFromGitHub", () => {
|
||||
description: "(no description)\n\nSource: https://github.com/owner/repo/issues/1",
|
||||
column: "triage",
|
||||
dependencies: [],
|
||||
sourceIssue: {
|
||||
provider: "github",
|
||||
repository: "owner/repo",
|
||||
externalIssueId: "1",
|
||||
issueNumber: 1,
|
||||
url: "https://github.com/owner/repo/issues/1",
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1313,6 +1348,13 @@ describe("runTaskImportFromGitHub", () => {
|
||||
description: expect.stringContaining("Body"),
|
||||
column: "triage",
|
||||
dependencies: [],
|
||||
sourceIssue: {
|
||||
provider: "github",
|
||||
repository: "owner/repo",
|
||||
externalIssueId: "1",
|
||||
issueNumber: 1,
|
||||
url: "https://github.com/owner/repo/issues/1",
|
||||
},
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -820,6 +820,13 @@ export async function runTaskImportGitHubInteractive(
|
||||
description,
|
||||
column: "triage",
|
||||
dependencies: [],
|
||||
sourceIssue: {
|
||||
provider: "github",
|
||||
repository: `${owner}/${repo}`,
|
||||
externalIssueId: String(issue.number),
|
||||
issueNumber: issue.number,
|
||||
url: issue.html_url,
|
||||
},
|
||||
});
|
||||
|
||||
const label = task.title || task.description.slice(0, 60) + (task.description.length > 60 ? "…" : "");
|
||||
@@ -956,6 +963,13 @@ export async function runTaskImportFromGitHub(
|
||||
description,
|
||||
column: "triage",
|
||||
dependencies: [],
|
||||
sourceIssue: {
|
||||
provider: "github",
|
||||
repository: `${owner}/${repo}`,
|
||||
externalIssueId: String(issue.number),
|
||||
issueNumber: issue.number,
|
||||
url: issue.html_url,
|
||||
},
|
||||
});
|
||||
|
||||
const label = task.title || task.description.slice(0, 60) + (task.description.length > 60 ? "…" : "");
|
||||
|
||||
@@ -801,6 +801,13 @@ export default function kbExtension(pi: ExtensionAPI) {
|
||||
description,
|
||||
column: "triage",
|
||||
dependencies: [],
|
||||
sourceIssue: {
|
||||
provider: "github",
|
||||
repository: `${owner}/${repo}`,
|
||||
externalIssueId: String(issue.number),
|
||||
issueNumber: issue.number,
|
||||
url: issue.html_url,
|
||||
},
|
||||
});
|
||||
|
||||
await store.logEntry(task.id, "Imported from GitHub", sourceUrl);
|
||||
@@ -887,6 +894,13 @@ export default function kbExtension(pi: ExtensionAPI) {
|
||||
description,
|
||||
column: "triage",
|
||||
dependencies: [],
|
||||
sourceIssue: {
|
||||
provider: "github",
|
||||
repository: `${owner}/${repo}`,
|
||||
externalIssueId: String(issue.number),
|
||||
issueNumber: issue.number,
|
||||
url: issue.html_url,
|
||||
},
|
||||
});
|
||||
|
||||
await store.logEntry(task.id, "Imported from GitHub", sourceUrl);
|
||||
|
||||
@@ -6,7 +6,8 @@
|
||||
"types": ["node", "vitest/globals"],
|
||||
"jsx": "react-jsx",
|
||||
"paths": {
|
||||
"@fusion/test-utils": ["../core/src/__test-utils__/workspace.ts"]
|
||||
"@fusion/test-utils": ["../core/src/__test-utils__/workspace.ts"],
|
||||
"node-pty": ["../dashboard/src/types/node-pty/index.d.ts"]
|
||||
}
|
||||
},
|
||||
"include": ["src/**/*"],
|
||||
|
||||
@@ -6146,6 +6146,13 @@ describe("POST /github/issues/import", () => {
|
||||
description: "Test body\n\nSource: https://github.com/owner/repo/issues/1",
|
||||
column: "triage",
|
||||
dependencies: [],
|
||||
sourceIssue: {
|
||||
provider: "github",
|
||||
repository: "owner/repo",
|
||||
externalIssueId: "1",
|
||||
issueNumber: 1,
|
||||
url: "https://github.com/owner/repo/issues/1",
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
@@ -6240,6 +6247,13 @@ describe("POST /github/issues/import", () => {
|
||||
description: expect.stringContaining("Source:"),
|
||||
column: "triage",
|
||||
dependencies: [],
|
||||
sourceIssue: {
|
||||
provider: "github",
|
||||
repository: "owner/repo",
|
||||
externalIssueId: "1",
|
||||
issueNumber: 1,
|
||||
url: "https://github.com/owner/repo/issues/1",
|
||||
},
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -6317,6 +6331,33 @@ describe("POST /github/issues/batch-import", () => {
|
||||
expect(res.body.results.every((r: { success: boolean }) => r.success)).toBe(true);
|
||||
expect(throttledSpy).toHaveBeenCalledTimes(3);
|
||||
expect(store.createTask).toHaveBeenCalledTimes(3);
|
||||
expect(store.createTask).toHaveBeenNthCalledWith(1, expect.objectContaining({
|
||||
sourceIssue: {
|
||||
provider: "github",
|
||||
repository: "owner/repo",
|
||||
externalIssueId: "1",
|
||||
issueNumber: 1,
|
||||
url: "https://github.com/owner/repo/issues/1",
|
||||
},
|
||||
}));
|
||||
expect(store.createTask).toHaveBeenNthCalledWith(2, expect.objectContaining({
|
||||
sourceIssue: {
|
||||
provider: "github",
|
||||
repository: "owner/repo",
|
||||
externalIssueId: "2",
|
||||
issueNumber: 2,
|
||||
url: "https://github.com/owner/repo/issues/2",
|
||||
},
|
||||
}));
|
||||
expect(store.createTask).toHaveBeenNthCalledWith(3, expect.objectContaining({
|
||||
sourceIssue: {
|
||||
provider: "github",
|
||||
repository: "owner/repo",
|
||||
externalIssueId: "3",
|
||||
issueNumber: 3,
|
||||
url: "https://github.com/owner/repo/issues/3",
|
||||
},
|
||||
}));
|
||||
});
|
||||
|
||||
it("skips already-imported issues", async () => {
|
||||
|
||||
@@ -2079,6 +2079,13 @@ export function registerGitGitHubRoutes(ctx: ApiRoutesContext): void {
|
||||
description,
|
||||
column: "triage",
|
||||
dependencies: [],
|
||||
sourceIssue: {
|
||||
provider: "github",
|
||||
repository: `${owner}/${repo}`,
|
||||
externalIssueId: String(issue.number),
|
||||
issueNumber: issue.number,
|
||||
url: issue.html_url,
|
||||
},
|
||||
});
|
||||
|
||||
// Log the import action
|
||||
@@ -2208,6 +2215,13 @@ export function registerGitGitHubRoutes(ctx: ApiRoutesContext): void {
|
||||
description,
|
||||
column: "triage",
|
||||
dependencies: [],
|
||||
sourceIssue: {
|
||||
provider: "github",
|
||||
repository: `${owner}/${repo}`,
|
||||
externalIssueId: String(issue.number),
|
||||
issueNumber: issue.number,
|
||||
url: issue.html_url,
|
||||
},
|
||||
});
|
||||
|
||||
// Log the import action
|
||||
|
||||
Reference in New Issue
Block a user