Skip to content

Latest commit

 

History

History
45 lines (36 loc) · 2.2 KB

File metadata and controls

45 lines (36 loc) · 2.2 KB

SpendingLimitsCard: Component Test Coverage

Issue: Add component tests for SpendingLimitsCard Status: Complete

Overview

SpendingLimitsCard already had solid coverage for loading/cache/error states and the save flow, but the in-card CopyLimitButton (clipboard copy for the daily and per-transaction limit values) and a few validation/interaction edge cases were untested. This change fills those gaps.

What changed

src/components/dashboard/__tests__/SpendingLimitsCard.test.tsx gained:

  • CopyLimitButton coverage (new describe block):
    • copying the daily limit value writes it to the clipboard and flips the button to a "Copied!" state
    • copying the per-transaction limit value writes the correct value
    • a rejected clipboard write surfaces the error text as the button's title/aria-label
  • Validation edge cases:
    • daily limit above MAX_LIMIT (1,000,000) shows the "Maximum is $1,000,000." error and blocks save
    • transaction limit below MIN_LIMIT (1) shows the "Minimum is $1." error
  • Keyboard interaction: pressing Escape in a limit input blurs it without triggering a save (no PUT request fired)
  • In-flight save state: the Save button shows "Saving…" and is disabled for the duration of the PUT request, then re-enables once it resolves

Manual verification checklist

  • On desktop, click each copy icon next to Daily Spending Limit / Per-Transaction Limit — clipboard receives the current value, icon briefly shows a checkmark.
  • Deny clipboard permission (or mock a rejection) — icon shows an alert glyph and the button title reflects the error.
  • Enter a value over 1,000,000 or under 1 in either field and click Save — inline validation message appears, no network request is sent.
  • Focus a limit input and press Escape — input blurs, no save triggered.
  • Click Save with valid values — button reads "Saving…" and is disabled until the response resolves, then returns to "Save Settings".
  • Repeat the above at a narrow (< 640px) viewport — layout stacks correctly, buttons remain full-width, no regressions in the surrounding dashboard.

No production code changed — this is test-only coverage.