diff --git a/__test__/main.test.ts b/__test__/main.test.ts index cdb0672..99a59c1 100644 --- a/__test__/main.test.ts +++ b/__test__/main.test.ts @@ -235,6 +235,24 @@ describe("with Octokit setup", () => { expect(mock.done()).toBe(true); }); + test("fetchContentMetadata returns empty object if node is null", async () => { + const data = { + data: { + node: null, + }, + }; + mockGraphQL(data, "nullContentMetadata", "projectItems"); + + const result = await updateProject.fetchContentMetadata( + "PR_closed_node_id", + "test", + 1, + "github" + ); + expect(result).toEqual({}); + expect(mock.done()).toBe(true); + }); + test("fetchProjectMetadata fetches project metadata", async () => { const expected = { projectId: 1, diff --git a/dist/index.js b/dist/index.js index bf3b290..0058404 100644 --- a/dist/index.js +++ b/dist/index.js @@ -9770,6 +9770,11 @@ function fetchContentMetadata(contentId, fieldName, projectNumber, owner) { } } `, { contentId, fieldName }); + // Handle case where node is null (e.g., when PR is closed without merging) + if (!result.node) { + (0, core_1.setFailed)(`Content not found with ID ${contentId} - it may have been deleted or is not accessible`); + return {}; + } const item = result.node.projectItems.nodes.find((node) => { return (node.project.number === projectNumber && node.project.owner.login === owner); diff --git a/src/update-project.ts b/src/update-project.ts index e10a7b1..3600899 100644 --- a/src/update-project.ts +++ b/src/update-project.ts @@ -76,6 +76,14 @@ export async function fetchContentMetadata( { contentId, fieldName } ); + // Handle case where node is null (e.g., when PR is closed without merging) + if (!result.node) { + setFailed( + `Content not found with ID ${contentId} - it may have been deleted or is not accessible` + ); + return {}; + } + const item = result.node.projectItems.nodes.find( (node: GraphQlQueryResponseData) => { return ( @@ -222,7 +230,7 @@ export function convertValueToFieldType( value: string, fieldType: string ): string | number { - if (fieldType === "NUMBER") { + if (fieldType === "number") { const numValue = parseFloat(value); if (isNaN(numValue)) { throw new Error(`Invalid number value: ${value}`);