diff --git a/src/signals/settings-preview.ts b/src/signals/settings-preview.ts index 32347b5ce0..7c434d5aa0 100644 --- a/src/signals/settings-preview.ts +++ b/src/signals/settings-preview.ts @@ -195,6 +195,7 @@ export type RepoSettingsPreview = { slopGateMinScore?: number | null | undefined; autoLabelEnabled: boolean; gittensorLabel: string; + blacklistLabel: string; createMissingLabel: boolean; includeMaintainerAuthors: boolean; requireLinkedIssue: boolean; @@ -318,6 +319,7 @@ export function buildRepoSettingsPreview(args: { slopGateMinScore: settings.slopGateMinScore ?? null, autoLabelEnabled: settings.autoLabelEnabled, gittensorLabel: settings.gittensorLabel, + blacklistLabel: settings.blacklistLabel ?? "slop", createMissingLabel: settings.createMissingLabel, includeMaintainerAuthors: settings.includeMaintainerAuthors, requireLinkedIssue: settings.requireLinkedIssue, diff --git a/test/unit/settings-preview.test.ts b/test/unit/settings-preview.test.ts index 23d23bfb6c..c022586c54 100644 --- a/test/unit/settings-preview.test.ts +++ b/test/unit/settings-preview.test.ts @@ -1,6 +1,7 @@ import { describe, expect, it } from "vitest"; import { buildRepoSettingsPreview, decidePublicSurface, type InstallationHealthSummary } from "../../src/signals/settings-preview"; import { REQUIRED_INSTALLATION_PERMISSIONS } from "../../src/github/backfill"; +import { RepoSettingsPreviewSchema } from "../../src/openapi/schemas"; import type { IssueRecord, PullRequestRecord, RepositoryRecord, RepositorySettings } from "../../src/types"; const FORBIDDEN_INSTALL_PREVIEW_PUBLIC_LANGUAGE = @@ -120,6 +121,8 @@ describe("buildRepoSettingsPreview", () => { const preview = buildRepoSettingsPreview({ ...base, settings: settings(), installation: healthyInstall, sample: { authorLogin: "miner", minerStatus: "confirmed" } }); expect(preview.decision.willComment).toBe(true); expect(preview.appliedLabel).toBe("gittensor"); + expect(preview.settings.blacklistLabel).toBe("slop"); + expect(() => RepoSettingsPreviewSchema.parse(preview)).not.toThrow(); expect(preview.previewComment).toContain(""); expect(preview.previewComment).toContain("Gittensory"); expect(preview.previewComment).toContain("Confirmed Gittensor contributor"); @@ -154,6 +157,18 @@ describe("buildRepoSettingsPreview", () => { ).not.toMatch(FORBIDDEN_INSTALL_PREVIEW_PUBLIC_LANGUAGE); }); + it("includes the configured blacklist label required by the OpenAPI contract", () => { + const preview = buildRepoSettingsPreview({ + ...base, + settings: settings({ blacklistLabel: "abuse" }), + installation: healthyInstall, + sample: { authorLogin: "miner", minerStatus: "confirmed" }, + }); + + expect(preview.settings.blacklistLabel).toBe("abuse"); + expect(() => RepoSettingsPreviewSchema.parse(preview)).not.toThrow(); + }); + it("uses safe defaults for an empty sample preview", () => { const preview = buildRepoSettingsPreview({ ...base, settings: settings(), installation: healthyInstall, sample: {} }); expect(preview.sample).toMatchObject({ authorLogin: "sample-contributor", authorType: "User", authorAssociation: "NONE", minerStatus: "confirmed", title: "Sample pull request" });