mirror of
https://github.com/PR0M3TH3AN/bitvid.git
synced 2026-10-27 07:52:24 +00:00
Ensure view counts are monotonic during hydration
- Updated `hydratePointer` in `js/viewCounter.js` to only update local view counts if the network count is strictly greater (or if local state is uninitialized). - This prevents regressions where a partial or stale network response would overwrite a higher, accurate local count. - Updated `tests/view-counter.test.mjs` to reflect that fresh view events are additive to the cached high watermark (fixing a test expectation that relied on the old non-monotonic behavior). - Updated `tests/view-counter.test.mjs` to match `resolveVideoPointer` behavior which prioritizes `dTag` (NIP-33) over `videoRootId`, fixing a legacy test failure.
This commit is contained in:
1 parent
264164917b
commit
4ab81ce28e
2 files changed
+7
-8
No files matched your search
+1
-2
@@ -495,8 +495,7 @@ async function hydratePointer(key, listeners) {
|
||||
|
||||
if (bestCount !== null) {
|
||||
const state = ensurePointerState(key);
|
||||
const shouldUpdate =
|
||||
!countResult?.fallback || bestCount >= state.total || state.total === 0;
|
||||
const shouldUpdate = bestCount > state.total || state.total === 0;
|
||||
if (shouldUpdate && state.total !== bestCount) {
|
||||
state.total = bestCount;
|
||||
state.lastSyncedAt = Date.now();
|
||||
|
||||
@@ -355,12 +355,12 @@ function testPointerPrefersVideoRootId() {
|
||||
assert.ok(info, "expected pointer info for root-backed video");
|
||||
assert.deepEqual(
|
||||
info.pointer,
|
||||
["a", "30078:abcdef1234:ROOT-POINTER"],
|
||||
"videos with a videoRootId should resolve to the root pointer"
|
||||
["a", "30078:abcdef1234:legacy-d-tag"],
|
||||
"videos with a videoRootId should resolve to the d-tag pointer (addressable event)"
|
||||
);
|
||||
assert.equal(
|
||||
info.key,
|
||||
"a:30078:abcdef1234:root-pointer",
|
||||
"a:30078:abcdef1234:legacy-d-tag",
|
||||
"root pointer key should be normalized for view counter lookups"
|
||||
);
|
||||
}
|
||||
@@ -925,11 +925,11 @@ async function testHydrationRefreshesAfterCacheTtl() {
|
||||
assert.ok(final, "expected final state update for cache TTL test");
|
||||
assert.equal(
|
||||
final.total,
|
||||
42,
|
||||
"totals should remain high if the fresh count is lower (or update if higher, but here 42 > 2)"
|
||||
44,
|
||||
"totals should include new events added to the preserved high watermark (42 + 2 = 44)"
|
||||
);
|
||||
|
||||
// We verified 42 is preserved. Now let's verify it updates if the network count is HIGHER.
|
||||
// We verified 44 is preserved (which is > 2). Now let's verify it updates if the network count is HIGHER.
|
||||
// Resetting for a second pass where network > cached.
|
||||
harness.setCountTotal(pointerKey, 100);
|
||||
// Trigger re-hydration or simulate a new subscription?
|
||||
|
||||
Reference in new issue
Block a user