From 19a13e0618a5da1c4c8d9bc2ab3db3774fc5c362 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 13 Mar 2026 12:16:18 +0000 Subject: [PATCH] Add number_force input and tests for PR #1652 Co-authored-by: marocchino <128431+marocchino@users.noreply.github.com> --- __tests__/config.test.ts | 24 ++++++++ __tests__/pullRequestNumber.test.ts | 86 +++++++++++++++++++++++++++++ action.yml | 3 + src/config.ts | 4 +- 4 files changed, 116 insertions(+), 1 deletion(-) create mode 100644 __tests__/pullRequestNumber.test.ts diff --git a/__tests__/config.test.ts b/__tests__/config.test.ts index 9ea14fa..69590ca 100644 --- a/__tests__/config.test.ts +++ b/__tests__/config.test.ts @@ -78,6 +78,7 @@ afterEach(() => { delete process.env["INPUT_IGNORE_EMPTY"] delete process.env["INPUT_SKIP_UNCHANGED"] delete process.env["INPUT_FOLLOW_SYMBOLIC_LINKS"] + delete process.env["INPUT_NUMBER_FORCE"] }) test("repo", async () => { @@ -428,3 +429,26 @@ test("skip_unchanged", async () => { }) expect(await config.getBody()).toEqual("") }) + +test("number_force", async () => { + process.env["INPUT_NUMBER_FORCE"] = "456" + mockConfig.pullRequestNumber = 456 + + const config = await import('../src/config') + expect(config).toMatchObject({ + pullRequestNumber: 456, + repo: {owner: "marocchino", repo: "stick-pull-request-comment"}, + header: "", + append: false, + recreate: false, + deleteOldComment: false, + hideOldComment: false, + hideAndRecreate: false, + hideClassify: "OUTDATED", + hideDetails: false, + githubToken: "some-token", + ignoreEmpty: false, + skipUnchanged: false + }) + expect(await config.getBody()).toEqual("") +}) diff --git a/__tests__/pullRequestNumber.test.ts b/__tests__/pullRequestNumber.test.ts new file mode 100644 index 0000000..5a15383 --- /dev/null +++ b/__tests__/pullRequestNumber.test.ts @@ -0,0 +1,86 @@ +import {afterEach, describe, expect, test, vi} from "vitest" + +const mockGetInput = vi.fn().mockReturnValue("") + +vi.mock("@actions/core", () => ({ + getInput: mockGetInput, + getBooleanInput: vi.fn().mockReturnValue(false), + getMultilineInput: vi.fn().mockReturnValue([]), + setFailed: vi.fn(), + info: vi.fn(), +})) + +const mockContext: {payload: Record; repo: {owner: string; repo: string}} = { + payload: {}, + repo: {owner: "marocchino", repo: "sticky-pull-request-comment"}, +} + +vi.mock("@actions/github", () => ({ + context: mockContext, +})) + +vi.mock("@actions/glob", () => ({ + create: vi.fn(), +})) + +afterEach(() => { + vi.resetModules() + mockContext.payload = {} + mockGetInput.mockReturnValue("") +}) + +describe("pullRequestNumber priority", () => { + test("uses number_force when set, overriding pull_request event number", async () => { + mockContext.payload = {pull_request: {number: 100}} + mockGetInput.mockImplementation((name: string) => { + if (name === "number_force") return "999" + if (name === "number") return "200" + return "" + }) + + const {pullRequestNumber} = await import("../src/config") + expect(pullRequestNumber).toBe(999) + }) + + test("uses number_force when set, overriding number input", async () => { + mockContext.payload = {} + mockGetInput.mockImplementation((name: string) => { + if (name === "number_force") return "999" + if (name === "number") return "200" + return "" + }) + + const {pullRequestNumber} = await import("../src/config") + expect(pullRequestNumber).toBe(999) + }) + + test("uses pull_request event number when number_force is not set", async () => { + mockContext.payload = {pull_request: {number: 100}} + mockGetInput.mockImplementation((name: string) => { + if (name === "number") return "200" + return "" + }) + + const {pullRequestNumber} = await import("../src/config") + expect(pullRequestNumber).toBe(100) + }) + + test("uses number input when number_force and pull_request event number are not set", async () => { + mockContext.payload = {} + mockGetInput.mockImplementation((name: string) => { + if (name === "number") return "200" + return "" + }) + + const {pullRequestNumber} = await import("../src/config") + expect(pullRequestNumber).toBe(200) + }) + + test("returns 0 when none of number_force, pull_request number, or number are set", async () => { + mockContext.payload = {} + mockGetInput.mockReturnValue("") + + const {pullRequestNumber} = await import("../src/config") + expect(pullRequestNumber).toBe(0) + }) +}) diff --git a/action.yml b/action.yml index bb0b430..d14ce06 100644 --- a/action.yml +++ b/action.yml @@ -72,6 +72,9 @@ inputs: number: description: "pull request number for push event" required: false + number_force: + description: "pull request number for any event" + required: false owner: description: "Another repo owner, If not set, the current repo owner is used by default. Note that when you trying changing a repo, be aware that GITHUB_TOKEN should also have permission for that repository." required: false diff --git a/src/config.ts b/src/config.ts index 615a7e6..bc71ddf 100644 --- a/src/config.ts +++ b/src/config.ts @@ -5,7 +5,9 @@ import {create} from "@actions/glob" import type {ReportedContentClassifiers} from "@octokit/graphql-schema" export const pullRequestNumber = - context?.payload?.pull_request?.number || +core.getInput("number", {required: false}) + +core.getInput("number_force", {required: false}) || + context?.payload?.pull_request?.number || + +core.getInput("number", {required: false}) export const repo = buildRepo() export const header = core.getInput("header", {required: false})