diff --git a/src/lib/db.ts b/src/lib/db.ts index a9c4ef0..0f8edc5 100644 --- a/src/lib/db.ts +++ b/src/lib/db.ts @@ -173,7 +173,6 @@ export const queries: Record = { AND repo = @repo AND pr_number = @prNumber AND finding_fingerprint = @findingFingerprint - AND head_sha = @headSha LIMIT 1 `), diff --git a/src/services/__tests__/prFindingDismissals.test.ts b/src/services/__tests__/prFindingDismissals.test.ts new file mode 100644 index 0000000..6f17d0c --- /dev/null +++ b/src/services/__tests__/prFindingDismissals.test.ts @@ -0,0 +1,37 @@ +import { beforeEach, describe, expect, it } from "vitest"; +import { + clearPrFindingDismissals, + dismissPrFinding, + isPrFindingFingerprintDismissed, +} from "../prFindingDismissals.js"; + +describe("PR finding dismissals", () => { + const owner = "dismissal-owner"; + const repo = "dismissal-repo"; + const prNumber = 6191; + + beforeEach(() => { + clearPrFindingDismissals(owner, repo, prNumber); + }); + + it("keeps a finding fingerprint dismissed across later PR heads", () => { + dismissPrFinding({ + owner, + repo, + prNumber, + reviewCommentId: 3298017416, + findingFingerprint: "same-finding-fingerprint", + dismissedBy: "maintainer", + headSha: "old-head-sha", + }); + + expect( + isPrFindingFingerprintDismissed( + owner, + repo, + prNumber, + "same-finding-fingerprint", + ), + ).toBe(true); + }); +}); diff --git a/src/services/__tests__/prScan.test.ts b/src/services/__tests__/prScan.test.ts index 9683f0b..6263652 100644 --- a/src/services/__tests__/prScan.test.ts +++ b/src/services/__tests__/prScan.test.ts @@ -160,7 +160,6 @@ Remove the lifecycle hook or replace it with reviewed local setup code.`), "repo", 12, expect.any(String), - "abc123", ); }); diff --git a/src/services/prFindingDismissals.ts b/src/services/prFindingDismissals.ts index 92d68c3..5f8437d 100644 --- a/src/services/prFindingDismissals.ts +++ b/src/services/prFindingDismissals.ts @@ -34,14 +34,12 @@ export function isPrFindingFingerprintDismissed( repo: string, prNumber: number, findingFingerprint: string, - headSha: string, ): boolean { return !!queries.isPrFindingFingerprintDismissed.get({ owner, repo, prNumber, findingFingerprint, - headSha, }); } diff --git a/src/services/prScan.ts b/src/services/prScan.ts index 4e48a04..7182a4e 100644 --- a/src/services/prScan.ts +++ b/src/services/prScan.ts @@ -68,7 +68,7 @@ export async function runPrScan( await persistReviewedFindingDismissals(octokit, { owner, repo, prNumber, headSha }); const findings = result.findings ?? []; const openFindings = findings.filter( - (finding) => !isFindingDismissed(owner, repo, prNumber, headSha, finding), + (finding) => !isFindingDismissed(owner, repo, prNumber, finding), ); if (!openFindings.length) { @@ -129,11 +129,10 @@ function isFindingDismissed( owner: string, repo: string, prNumber: number, - headSha: string, finding: PrFinding, ): boolean { const fingerprint = fingerprintPrFinding(finding); - return isPrFindingFingerprintDismissed(owner, repo, prNumber, fingerprint, headSha); + return isPrFindingFingerprintDismissed(owner, repo, prNumber, fingerprint); } function fingerprintPrFinding(finding: PrFinding): string {