Skip to content

test(api-keys): cover success, error, and idempotent-repeat paths - #413

Open
thlpkee20-wq wants to merge 4 commits into
Agentpay-Org:mainfrom
thlpkee20-wq:feature/api-keys-01-endpoint
Open

test(api-keys): cover success, error, and idempotent-repeat paths#413
thlpkee20-wq wants to merge 4 commits into
Agentpay-Org:mainfrom
thlpkee20-wq:feature/api-keys-01-endpoint

Conversation

@thlpkee20-wq

Copy link
Copy Markdown
Contributor

Closes #384

Adds src/api-keys-endpoint.test.ts covering:

  • create/list/revoke success path, including cursor pagination across
    two pages
  • blank-label rejection (400)
  • unexpected-body-field rejection (400)
  • malformed delete-prefix rejection (400, not a 404)
  • malformed list-cursor rejection (400)
  • unknown-query-parameter rejection (400)
  • idempotent repeat of the same list query

Test plan

  • npm run build
  • npm run lint
  • npm test — targeted run of api-keys-endpoint.test.js,
    list-pagination.test.js, routes/operational.test.js: 15/15
    passing.

Note

Stacked on #410/#411/#412 (same fork-only caveat noted there). The
test-specific change is the single new file,
src/api-keys-endpoint.test.ts.

The GET /api/v1/api-keys handler inlined the same limit/offset parsing
and slicing preamble duplicated in the webhooks list handler. Extracted
it into applyOffsetPage() in src/listPagination.ts as a single reusable
entry point; behavior is unchanged (same defaults, same response shape).
Adds a generic paginateByCursor() helper (src/cursorPagination.ts) and
an applyListPage() wrapper that layers opt-in ?cursor= paging on top of
the existing offset/limit contract: passing cursor takes priority over
offset, and both modes now report a stable nextCursor so existing
offset-based clients can migrate without a contract change. Malformed
or expired cursors return 400 invalid_request. Item shape and existing
offset behavior are unchanged.
…k labels

- GET /api/v1/api-keys now rejects any query parameter outside
  limit/offset/cursor with a structured 400 invalid_request.
- DELETE /api/v1/api-keys/:prefix rejects a malformed prefix (must be
  1-64 alphanumeric/underscore chars) with 400 before searching the
  store, instead of always falling through to a 404.
- POST /api/v1/api-keys rejects a whitespace-only label via a new
  rejectBlank option on stringField, scoped to the label field only.
Adds src/api-keys-endpoint.test.ts covering create/list/revoke, cursor
pagination across pages, blank-label rejection, unexpected-body-field
rejection, malformed delete-prefix rejection, malformed cursor rejection,
unknown-query-param rejection, and an idempotent-repeat check on the
list endpoint.
@mikewheeleer

Copy link
Copy Markdown
Contributor

@thlpkee20-wq this closes #384 nicely. LGTM, merging 🎉

1 similar comment
@mikewheeleer

Copy link
Copy Markdown
Contributor

@thlpkee20-wq this closes #384 nicely. LGTM, merging 🎉

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add tests for the api-keys endpoint success and error paths

2 participants