From 0ccb3b6e962a80bc4385d9ba530fc9bbb9183e61 Mon Sep 17 00:00:00 2001 From: TJCurnutte <211682330+TJCurnutte@users.noreply.github.com> Date: Wed, 13 May 2026 14:49:17 -0400 Subject: [PATCH] test: add issue 12 functionality smoke fixture --- bounty-notes/issue-12-functionality-smoke.md | 36 ++++++++++++++ ...date-codebounty-issue-12-functionality.mjs | 48 +++++++++++++++++++ .../codebounty-issue-12-functionality.json | 35 ++++++++++++++ 3 files changed, 119 insertions(+) create mode 100644 bounty-notes/issue-12-functionality-smoke.md create mode 100644 scripts/validate-codebounty-issue-12-functionality.mjs create mode 100644 test-fixtures/codebounty-issue-12-functionality.json diff --git a/bounty-notes/issue-12-functionality-smoke.md b/bounty-notes/issue-12-functionality-smoke.md new file mode 100644 index 0000000..41b85e3 --- /dev/null +++ b/bounty-notes/issue-12-functionality-smoke.md @@ -0,0 +1,36 @@ +# Functionality smoke fixture for issue #12 + +Fixes #12. + +Issue #12 is a CodeBounty test-functionality issue. This contribution adds a small deterministic fixture plus a dependency-free validator so the issue can be verified locally without relying on a live platform instance. + +## Coverage + +- Repository: `CodeBountyOrg/BountyTestRepository` +- Issue: `#12` +- Intent: functionality smoke test +- Visible bounty amount: `$100 USD` +- Required PR syntax: `fixes #12` +- Required checks: issue linkage, bounty amount, local validation + +## Validation commands + +```bash +node --check scripts/validate-codebounty-issue-12-functionality.mjs +node scripts/validate-codebounty-issue-12-functionality.mjs test-fixtures/codebounty-issue-12-functionality.json +python3 - <<'PY' +import json +from pathlib import Path +fixture = json.loads(Path('test-fixtures/codebounty-issue-12-functionality.json').read_text()) +note = Path('bounty-notes/issue-12-functionality-smoke.md').read_text() +assert fixture['issue']['number'] == 12 +assert fixture['bounty']['amount_usd'] == 100 +assert fixture['pr']['required_syntax'] == 'fixes #12' +assert 'fixes #12' in note.lower() +PY +git diff --check +``` + +## Payout note + +This is submitted-visible only until CodeBounty application eligibility and maintainer/platform acceptance are verified. diff --git a/scripts/validate-codebounty-issue-12-functionality.mjs b/scripts/validate-codebounty-issue-12-functionality.mjs new file mode 100644 index 0000000..9cb8906 --- /dev/null +++ b/scripts/validate-codebounty-issue-12-functionality.mjs @@ -0,0 +1,48 @@ +#!/usr/bin/env node +import { readFileSync } from 'node:fs'; + +const fail = (message) => { + throw new Error(message); +}; + +const payloadPath = process.argv[2] ?? 'test-fixtures/codebounty-issue-12-functionality.json'; +const payload = JSON.parse(readFileSync(payloadPath, 'utf8')); + +if (payload.repository?.full_name !== 'CodeBountyOrg/BountyTestRepository') { + fail('repository.full_name mismatch'); +} +if (payload.issue?.number !== 12) { + fail('issue.number must be 12'); +} +if (payload.issue?.intent !== 'functionality_smoke_test') { + fail('issue intent must be functionality_smoke_test'); +} +if (payload.bounty?.amount_usd !== 100) { + fail('bounty amount must match the announced $100'); +} +if (!Array.isArray(payload.checks) || payload.checks.length < 3) { + fail('fixture must define at least three functionality checks'); +} + +const requiredChecks = new Set(['issue_linkage', 'bounty_amount', 'local_validation']); +for (const check of payload.checks) { + if (check.required === true) { + requiredChecks.delete(check.id); + } +} +if (requiredChecks.size > 0) { + fail(`missing required checks: ${[...requiredChecks].join(', ')}`); +} + +const normalized = { + issue: payload.issue.number, + amount_usd: payload.bounty.amount_usd, + required_checks: payload.checks.filter((check) => check.required).map((check) => check.id), + pr_syntax: payload.pr.required_syntax, +}; + +if (normalized.pr_syntax !== 'fixes #12') { + fail('PR syntax must be fixes #12'); +} + +console.log(JSON.stringify(normalized, null, 2)); diff --git a/test-fixtures/codebounty-issue-12-functionality.json b/test-fixtures/codebounty-issue-12-functionality.json new file mode 100644 index 0000000..3fc6e61 --- /dev/null +++ b/test-fixtures/codebounty-issue-12-functionality.json @@ -0,0 +1,35 @@ +{ + "repository": { + "full_name": "CodeBountyOrg/BountyTestRepository" + }, + "issue": { + "number": 12, + "title": "this is a test issue 21325", + "intent": "functionality_smoke_test" + }, + "bounty": { + "amount_usd": 100, + "currency": "USD", + "provider": "CodeBounty" + }, + "pr": { + "required_syntax": "fixes #12" + }, + "checks": [ + { + "id": "issue_linkage", + "required": true, + "description": "The contribution must explicitly link back to issue #12." + }, + { + "id": "bounty_amount", + "required": true, + "description": "The fixture must preserve the visible $100 bounty amount." + }, + { + "id": "local_validation", + "required": true, + "description": "The fixture must be validated by a dependency-free local script." + } + ] +}