Skip to content

Add UTS tests for LiveObjects path-based API#2219

Draft
paddybyers wants to merge 10 commits into
uts-integration-proxyfrom
uts-liveobjects
Draft

Add UTS tests for LiveObjects path-based API#2219
paddybyers wants to merge 10 commits into
uts-integration-proxyfrom
uts-liveobjects

Conversation

@paddybyers
Copy link
Copy Markdown
Member

Summary

  • Translates portable UTS test specs from specification/uts/objects/ into 290 working ably-js TypeScript tests
  • Covers PathObject, Instance, batch operations, LiveCounter/LiveMap CRDT internals, ObjectsPool sync state machine, RealtimeObject lifecycle, value types, and subscriptions
  • 19 test files: 14 unit (270 tests), 4 integration (15 tests), 1 proxy fault injection (5 tests)
  • 1 test pending (LiveMap#clear() not yet implemented in ably-js)

Test plan

  • All 290 tests pass locally: npx mocha --no-config --require tsx/cjs 'test/uts/objects/**/*.test.ts' --timeout 60000
  • CI passes

🤖 Generated with Claude Code

Translate portable UTS test specs from specification/uts/objects/ into
working ably-js TypeScript tests covering PathObject, Instance, batch
operations, LiveCounter/LiveMap CRDT internals, ObjectsPool sync state
machine, RealtimeObject lifecycle, value types, and subscriptions.

19 test files: 14 unit (270 tests), 4 integration (15 tests),
1 proxy fault injection (5 tests). 1 test pending (LiveMap#clear()
not yet implemented).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 13, 2026

Important

Review skipped

Draft detected.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: d6cd4cc5-bf95-4816-b50d-2be7ec2dc181

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch uts-liveobjects

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Remove client-side port allocation (TOCTOU race) and let the proxy
auto-assign free ports via OS. Read the assigned port from the session
creation response. Update binary to v0.2.0 with new asset naming.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@github-actions github-actions Bot temporarily deployed to staging/pull/2219/features May 14, 2026 07:18 Inactive
Adds parentReferences, PublicAPI::ObjectMessage, RTO24/25/26 tests;
updates objectMessage/subscription assertions; removes batch API tests.
308 passing, 4 pending deviations.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@github-actions github-actions Bot temporarily deployed to staging/pull/2219/features May 29, 2026 12:10 Inactive
paddybyers and others added 7 commits June 6, 2026 09:30
Mirrors specification commit e77bdb80. The GC integration test used
fake timers (ADVANCE_TIME) which don't affect the sandbox server.
Unit tests at RTO10 and RTLM19 already cover the same scenarios.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Mirrors specification commits add9398a and 3ad5a416.

- Remove RTLM24 (clear() sends MAP_CLEAR) placeholder — test removed
  from UTS as spurious.
- Remove RTLCV3c (no validation at creation time) — test removed from
  UTS as unnecessary.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Mirrors specification commit 8f524477. The UTS spec now uses serial "02"
with zero increment for the noop test (RTLO4b4c1). However, ably-js
doesn't implement RTLC9h (number=0 still returns a LiveCounterUpdate,
not a noop), so we use serial "01" with counterInc:{} (no number field)
which triggers the newness check rejection instead. Documented as a
deviation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Mirrors specification commit d7d75e78. Instead of accessing internal
_siteTimeserials, verify through observable side effects: after
apply-on-ACK, send an inbound message from the same siteCode with an
older serial. If LOCAL incorrectly wrote to siteTimeserials, the newness
check rejects the inbound message (score stays 110 instead of reaching
120). Uses serial "t:0:0" to avoid appliedOnAckSerials dedup.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Mirrors specification commit e3614cd9. Instead of just asserting
score == 100 after re-sync (which proves nothing since OBJECT_SYNC
resets the pool regardless), replay the previously-applied ACK serial
("t:1:0") after re-sync. If appliedOnAckSerials was properly cleared,
the replayed message applies normally and score reaches 110.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Mirrors specification commit eaa69837. Each integration test now runs
twice — once with JSON (useBinaryProtocol: false) and once with msgpack
(useBinaryProtocol: true) — per the G1 data-path requirement.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Mirrors specification commit 86e96366. The UTS spec now expects
error.cause.code == 90000, but ably-js throws 90001 (invalid channel
state) without a .cause property. Updated the deviation comment to
note the additional assertion difference.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant