Skip to content

test: add property tests for async utilities (Phase 4)#179

Merged
BYK merged 1 commit intomainfrom
test/async-utilities-property-tests
Feb 5, 2026
Merged

test: add property tests for async utilities (Phase 4)#179
BYK merged 1 commit intomainfrom
test/async-utilities-property-tests

Conversation

@BYK
Copy link
Member

@BYK BYK commented Feb 5, 2026

Summary

Phase 4 of our model-based/property-based testing initiative. Adds property tests for async utilities that handle polling and concurrent operations.

Changes

New Files

  • test/lib/polling.property.test.ts - 8 property tests for poll() function
  • test/lib/promises.property.test.ts - 8 property tests for anyTrue() function

Test Coverage

poll() properties:

Property Description
Immediate return Returns immediately when shouldStop is true on first fetch
Stop predicate Returns state that satisfies shouldStop predicate
Timeout behavior Throws timeout error when shouldStop never returns true
Bounded fetch count Number of fetchState calls ≤ timeout/interval + tolerance
Null handling Null fetchState results are skipped until valid state
Progress updates Progress message is updated from state
Immediate timeout Handles timeoutMs = 0 edge case
Error propagation fetchState errors propagate correctly

anyTrue() properties:

Property Description
Correctness Returns true iff any predicate returns true
Empty array Empty array always returns false
Single element Single-element result equals predicate result
Error handling Errors in predicates are treated as false
All errors All predicates throwing returns false
Order independence Result doesn't depend on predicate completion order
All false All false predicates return false regardless of timing
Completeness Predicate called for each item when no early true

Verification

bun test test/lib/polling.property.test.ts test/lib/promises.property.test.ts
# 16 pass, 0 fail, 752 expect() calls

bun test  # Full suite
# 1034 pass, 0 fail, 14905 expect() calls
Cursor Bugbot is reviewing your changes for commit 1b782b1

- Add property tests for poll() function in polling.ts:
  - Returns immediately when shouldStop is true
  - Returns state that satisfies predicate
  - Throws timeout error when shouldStop never returns true
  - Fetch count bounded by timeout/interval
  - Null results are skipped
  - Progress message updates from state

- Add property tests for anyTrue() function in promises.ts:
  - Returns true iff any predicate returns true
  - Empty array always returns false
  - Single element result equals predicate result
  - Errors treated as false
  - All errors returns false
  - Result independent of completion order
  - All false predicates return false
  - All items checked when no early true
@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 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

@BYK BYK merged commit 72fabd5 into main Feb 5, 2026
25 checks passed
@BYK BYK deleted the test/async-utilities-property-tests branch February 5, 2026 00:53
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