Skip to content

test: add property tests for API command and human formatters#181

Merged
BYK merged 3 commits intomainfrom
test/api-property-tests
Feb 5, 2026
Merged

test: add property tests for API command and human formatters#181
BYK merged 3 commits intomainfrom
test/api-property-tests

Conversation

@BYK
Copy link
Member

@BYK BYK commented Feb 5, 2026

Summary

Adds property-based tests using fast-check to replace repetitive example tests while providing better coverage through randomized inputs.

New Property Test Files

test/commands/api.property.test.ts (25 tests)

Function Properties Tested
normalizeEndpoint No leading slash, trailing slash before query, query preservation, idempotency
parseMethod Valid methods succeed, invalid throw, uppercase result
parseFieldKey Base key extraction, segment count, empty key rejection
setNestedValue Prototype pollution prevention (__proto__, constructor, prototype), nested structure, array push
parseFieldValue JSON parsing, non-JSON fallback

test/lib/formatters/human.property.test.ts (19 tests)

Function Properties Tested
formatShortId Output uppercase, length preservation, determinism, case normalization
formatUserIdentity Name/email formatting, precedence rules, ID fallback
formatIssueListHeader ALIAS column inclusion by mode

Simplified Example Tests

Kept only edge cases and error message verification:

File Before After Reduction
api.test.ts 1350 lines 1117 lines -233 lines
human.test.ts 509 lines 172 lines -337 lines

Coverage Improvement

  • Before: ~90 explicit example test cases
  • After: 44 property tests × 50 runs = 2,200 test cases

The property tests generate random inputs across the valid input space, catching edge cases that handwritten examples miss.

Test Results

All 998 tests pass with 17,163 expect() calls.

Part of the test consolidation effort to simplify tests using model-based and property-based testing.

Add property-based tests using fast-check to replace repetitive example
tests while providing better coverage through randomized inputs.

New property test files:
- test/commands/api.property.test.ts (25 tests)
  - normalizeEndpoint: trailing slash, query string preservation, idempotency
  - parseMethod: valid/invalid methods, uppercase normalization
  - parseFieldKey: segment parsing, empty key rejection
  - setNestedValue: security (prototype pollution), array push, type conflicts
  - parseFieldValue: JSON parsing, string fallback

- test/lib/formatters/human.property.test.ts (19 tests)
  - formatShortId: uppercase output, length preservation, determinism
  - formatUserIdentity: name/email formatting, precedence rules
  - formatIssueListHeader: column inclusion by mode

Simplified example test files (kept only edge cases and error messages):
- test/commands/api.test.ts: -233 lines (1350→1117)
- test/lib/formatters/human.test.ts: -337 lines (509→172)

The property tests run 50 iterations each, providing 2,200 test cases
vs the original ~90 explicit example cases.

All 998 tests pass.
@github-actions
Copy link
Contributor

github-actions bot commented Feb 5, 2026

Semver Impact of This PR

None (no version bump detected)

📋 Changelog Preview

This is how your changes will appear in the changelog.
Entries from this PR are highlighted with a left border (blockquote style).


New Features ✨

  • (dsn) Add project root detection for automatic DSN discovery by BYK in #159
  • (issue) Replace --org/--project flags with /ID syntax by BYK in #161
  • (lib) Add anyTrue helper for parallel-with-early-exit pattern by BYK in #174
  • (telemetry) Add withTracing helper to reduce Sentry span boilerplate by BYK in #172

Bug Fixes 🐛

  • (types) Align schema types with Sentry API by betegon in #169
  • ParseIssueArg now checks slashes before dashes by BYK in #177
  • Address bugbot review comments on dsn-cache model-based tests by BYK in #176
  • Added nullable in substatus's zod validation by MathurAditya724 in #157

Internal Changes 🔧

  • (upgrade) Use centralized user-agent for GitHub API requests by BYK in #173

Other

  • test: add property tests for API command and human formatters by BYK in #181
  • test: remove redundant DB tests covered by model-based tests by BYK in #180
  • test: add property tests for async utilities (Phase 4) by BYK in #179
  • test: add model-based tests for DSN and project cache by BYK in #171
  • test: add model-based and property-based testing with fast-check by BYK in #166

🤖 This preview updates automatically when you update the PR.

@github-actions
Copy link
Contributor

github-actions bot commented Feb 5, 2026

Codecov Results 📊

✅ Patch coverage is 100.00%. Project has 2175 uncovered lines.
✅ Project coverage is 70.81%. Comparing base (base) to head (head).

Files with missing lines (33)
File Patch % Lines
human.ts 31.80% ⚠️ 684 Missing
resolve-target.ts 10.74% ⚠️ 291 Missing
oauth.ts 25.10% ⚠️ 194 Missing
upgrade.ts 40.23% ⚠️ 153 Missing
api-client.ts 74.21% ⚠️ 138 Missing
resolver.ts 3.23% ⚠️ 120 Missing
errors.ts 5.94% ⚠️ 95 Missing
migration.ts 47.44% ⚠️ 82 Missing
version-check.ts 34.04% ⚠️ 62 Missing
telemetry.ts 77.43% ⚠️ 51 Missing
api.ts 89.80% ⚠️ 47 Missing
seer.ts 75.54% ⚠️ 45 Missing
preload.ts 38.71% ⚠️ 38 Missing
seer.ts 79.87% ⚠️ 30 Missing
schema.ts 52.73% ⚠️ 26 Missing
utils.ts 87.43% ⚠️ 24 Missing
detector.ts 90.10% ⚠️ 20 Missing
code-scanner.ts 95.00% ⚠️ 16 Missing
fs-utils.ts 57.14% ⚠️ 9 Missing
auth.ts 94.78% ⚠️ 7 Missing
dsn-cache.ts 96.71% ⚠️ 7 Missing
project-root.ts 97.73% ⚠️ 7 Missing
feedback.ts 84.21% ⚠️ 6 Missing
upgrade.ts 93.83% ⚠️ 5 Missing
colors.ts 91.84% ⚠️ 4 Missing
env-file.ts 97.58% ⚠️ 3 Missing
sentry-urls.ts 88.00% ⚠️ 3 Missing
project-aliases.ts 97.40% ⚠️ 2 Missing
project-root-cache.ts 96.92% ⚠️ 2 Missing
alias.ts 99.28% ⚠️ 1 Missing
parser.ts 98.63% ⚠️ 1 Missing
helpers.ts 94.74% ⚠️ 1 Missing
helpers.ts 94.74% ⚠️ 1 Missing
Coverage diff
@@            Coverage Diff             @@
##          main       #PR       +/-##
==========================================
+ Coverage    70.81%    70.81%        —%
==========================================
  Files           55        55         —
  Lines         7451      7451         —
  Branches         0         0         —
==========================================
+ Hits          5276      5276         —
- Misses        2175      2175         —
- Partials         0         0         —

Generated by Codecov Action

- Filter out JSON literals (true/false/null) from plainStringArb to prevent
  flaky tests when fast-check generates valid JSON strings
- Fix formatUserIdentity test assertion to avoid false positives when
  the generated name contains the username as a substring
Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.

The assertion was:
1. Redundant - if `expect(result).toBe(`${name} <${email}>`)` passes,
   the behavior is already verified
2. Flaky - could fail when name and username arbitraries generate
   identical values (e.g., both generate 'abc')
@BYK BYK enabled auto-merge (squash) February 5, 2026 01:45
@BYK BYK merged commit 442d1d7 into main Feb 5, 2026
24 checks passed
@BYK BYK deleted the test/api-property-tests branch February 5, 2026 01:47
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.

1 participant