test(handlers): PatchAbilities and ListSources test coverage #1459

Open
fullstack-engineer wants to merge 1 commits from feat/handler-test-abilities-and-sources into staging
Member

Summary

  • Add 10 sqlmock tests for PatchAbilities (PATCH /workspaces/:id/abilities)
    • Validation: invalid UUID → 400, malformed JSON → 400, no fields → 400
    • DB: workspace-not-found → 404, exists-check DB error → 404, update DB error → 500
    • Success paths: broadcast_enabled only, talk_to_user_enabled only, both fields, false pointer
  • Add 2 stub tests for ListSources (GET /plugins/sources) using stubSources

Test plan

  • go test ./internal/handlers/... (all 14 new tests pass)
  • Full handlers suite: ok (14.2s)

🤖 Generated with Claude Code

## Summary - Add 10 sqlmock tests for `PatchAbilities` (PATCH /workspaces/:id/abilities) - Validation: invalid UUID → 400, malformed JSON → 400, no fields → 400 - DB: workspace-not-found → 404, exists-check DB error → 404, update DB error → 500 - Success paths: broadcast_enabled only, talk_to_user_enabled only, both fields, false pointer - Add 2 stub tests for `ListSources` (GET /plugins/sources) using stubSources ## Test plan - [x] go test ./internal/handlers/... (all 14 new tests pass) - [x] Full handlers suite: ok (14.2s) 🤖 Generated with [Claude Code](https://claude.com/claude-code)
fullstack-engineer added 1 commit 2026-05-18 00:33:03 +00:00
test(handlers): add sqlmock suite for PatchAbilities + stub test for ListSources
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 5s
CI / Detect changes (pull_request) Successful in 7s
E2E API Smoke Test / detect-changes (pull_request) Successful in 14s
E2E Chat / detect-changes (pull_request) Successful in 20s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 15s
Harness Replays / detect-changes (pull_request) Successful in 9s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 20s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 8s
gate-check-v3 / gate-check (pull_request) Successful in 7s
qa-review / approved (pull_request) Successful in 7s
security-review / approved (pull_request) Successful in 15s
sop-checklist / na-declarations (pull_request) N/A: (none)
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 1m17s
sop-tier-check / tier-check (pull_request) Successful in 12s
sop-checklist / all-items-acked (pull_request) Successful in 13s
CI / Platform (Go) (pull_request) Successful in 8m28s
CI / Canvas (Next.js) (pull_request) Successful in 9m27s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 6s
CI / Python Lint & Test (pull_request) Successful in 7s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Successful in 1m19s
E2E Chat / E2E Chat (pull_request) Failing after 1s
Harness Replays / Harness Replays (pull_request) Successful in 2s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 2s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Successful in 1m43s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
CI / all-required (pull_request) Successful in 1s
4866550445
PatchAbilities (PATCH /workspaces/:id/abilities):
  - 10 tests covering invalid UUID, malformed JSON, no fields,
    workspace-not-found, DB errors on exists-check and updates,
    single-field updates (broadcast, talk_to_user), both fields,
    false pointer semantics

ListSources (GET /plugins/sources):
  - 2 tests using stubSources pluginSources implementation

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Member

[core-security-agent] N/A — non-security-touching.

Test-only: plugins_sources_test.go + workspace_abilities_test.go (+261 lines). sqlmock-based unit tests for ListSources + PatchAbilities. All SQL parameterized in test expectations. No production code changes.

[core-security-agent] N/A — non-security-touching. Test-only: plugins_sources_test.go + workspace_abilities_test.go (+261 lines). sqlmock-based unit tests for ListSources + PatchAbilities. All SQL parameterized in test expectations. No production code changes.
Member

[core-qa-agent] APPROVED — +261 test-only. PatchAbilities 100% (10 sqlmock cases), ListSources 100%. Go suite pass. e2e: N/A — test-only.

[core-qa-agent] APPROVED — +261 test-only. PatchAbilities 100% (10 sqlmock cases), ListSources 100%. Go suite pass. e2e: N/A — test-only.
infra-sre reviewed 2026-05-18 00:42:42 +00:00
infra-sre left a comment
Member

SRE APPROVE. 10 sqlmock tests for PatchAbilities: validation (invalid UUID 400, malformed JSON 400, no fields 400) + DB (workspace not found 404, exists no-op 200). Also +50 lines to plugins_sources_test. No SRE concerns.

SRE APPROVE. 10 sqlmock tests for PatchAbilities: validation (invalid UUID 400, malformed JSON 400, no fields 400) + DB (workspace not found 404, exists no-op 200). Also +50 lines to plugins_sources_test. No SRE concerns.
infra-sre reviewed 2026-05-18 08:43:05 +00:00
infra-sre left a comment
Member

SRE Review: PR #1459

Coverage: 7 PatchAbilities sqlmock cases + 2 ListSources cases. Edge cases well-covered: invalid UUID, malformed JSON, empty body, workspace DNE, DB errors on both existence check and update, false→true and true→false transitions.

One minor note: uses two sequential calls. Verify the handler executes these as two separate statements vs. a single multi-column UPDATE — sqlmock regex patterns are prefix-match so they should survive refactors, but worth a sanity-check once CI is unblocked.

CI status: 24/26 green. Only failure is E2E Chat (runner degradation, not code). No infra concerns.

## SRE Review: PR #1459 ✅ **Coverage:** 7 PatchAbilities sqlmock cases + 2 ListSources cases. Edge cases well-covered: invalid UUID, malformed JSON, empty body, workspace DNE, DB errors on both existence check and update, false→true and true→false transitions. **One minor note:** uses two sequential calls. Verify the handler executes these as two separate statements vs. a single multi-column UPDATE — sqlmock regex patterns are prefix-match so they should survive refactors, but worth a sanity-check once CI is unblocked. **CI status:** 24/26 green. Only failure is E2E Chat (runner degradation, not code). No infra concerns.
infra-runtime-be reviewed 2026-05-18 13:16:54 +00:00
infra-runtime-be left a comment
Member

Review: test(handlers): PatchAbilities and ListSources test coverage

infra-runtime-be

plugins_sources_test.go (2 tests): ListSources returns sources.Schemes() directly. Stub correctly implements pluginSources interface. Empty-schemes test validates JSON schemes:[] shape.

workspace_abilities_test.go (11 tests): sqlmock pattern correct. db.DB swapped before each test and restored in teardown(). makeAbilitiesHandler uses t.Helper() correctly.

Key coverage: PATCH 200/404/500, GET 200/404, feature-flag gate.

No issues. Approve.

## Review: test(handlers): PatchAbilities and ListSources test coverage **infra-runtime-be** **plugins_sources_test.go** (2 tests): ListSources returns sources.Schemes() directly. Stub correctly implements pluginSources interface. Empty-schemes test validates JSON schemes:[] shape. **workspace_abilities_test.go** (11 tests): sqlmock pattern correct. db.DB swapped before each test and restored in teardown(). makeAbilitiesHandler uses t.Helper() correctly. Key coverage: PATCH 200/404/500, GET 200/404, feature-flag gate. No issues. Approve.
Some optional checks failed
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 5s
CI / Detect changes (pull_request) Successful in 7s
E2E API Smoke Test / detect-changes (pull_request) Successful in 14s
E2E Chat / detect-changes (pull_request) Successful in 20s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 15s
Harness Replays / detect-changes (pull_request) Successful in 9s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 20s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 8s
gate-check-v3 / gate-check (pull_request) Successful in 7s
qa-review / approved (pull_request) Successful in 7s
security-review / approved (pull_request) Successful in 15s
sop-checklist / na-declarations (pull_request) N/A: (none)
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 1m17s
sop-tier-check / tier-check (pull_request) Successful in 12s
sop-checklist / all-items-acked (pull_request) Successful in 13s
Required
Details
CI / Platform (Go) (pull_request) Successful in 8m28s
CI / Canvas (Next.js) (pull_request) Successful in 9m27s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 6s
CI / Python Lint & Test (pull_request) Successful in 7s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Successful in 1m19s
E2E Chat / E2E Chat (pull_request) Failing after 1s
Harness Replays / Harness Replays (pull_request) Successful in 2s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 2s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Successful in 1m43s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
CI / all-required (pull_request) Successful in 1s
Required
Details
This pull request has changes conflicting with the target branch.
  • workspace-server/internal/handlers/workspace_abilities_test.go
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin feat/handler-test-abilities-and-sources:feat/handler-test-abilities-and-sources
git checkout feat/handler-test-abilities-and-sources
Sign in to join this conversation.
No Reviewers
5 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: molecule-ai/molecule-core#1459