mirror of
https://github.com/stablyai/orca.git
synced 2026-09-22 16:02:32 +00:00
Take-over of #8605 (issue #8591). Ships #8498 (worktree resync + pull-to-refresh + cache write-through) and #8129 (idempotent notification replay on reconnect). Fixes the original PR's field mismatch (seq vs notificationSeq) and adds the missing notifications.getMissedSince mobile RPC allowlist entry. #6784 and #4500 held back to avoid conflicting with the relay work (#8536). Co-authored-by: Brandon Bennett (@branben).
44 lines
1.8 KiB
TypeScript
44 lines
1.8 KiB
TypeScript
import { describe, expect, it } from 'vitest'
|
|
import { setCachedWorktrees, getCachedWorktrees } from './worktree-cache'
|
|
|
|
// Why: AC #8498 guarantees a reconnect refetch writes through the
|
|
// same cache path the host detail screen seeds from, so a reconnect can't
|
|
// serve a stale snapshot. This unit pins the write-through contract.
|
|
describe('worktree-cache write-through', () => {
|
|
it('returns the most-recently written snapshot, not a stale one', () => {
|
|
const hostId = 'host-write-through'
|
|
const stale = [{ worktreeId: 'a', name: 'stale' }]
|
|
const fresh = [
|
|
{ worktreeId: 'a', name: 'fresh' },
|
|
{ worktreeId: 'b', name: 'added' }
|
|
]
|
|
|
|
setCachedWorktrees(hostId, stale)
|
|
expect(getCachedWorktrees(hostId)).toEqual(stale)
|
|
|
|
// Why: simulates the reconnect refetch write-through — the fresh
|
|
// worktree.ps snapshot must fully replace the poisoned cache entry.
|
|
setCachedWorktrees(hostId, fresh)
|
|
expect(getCachedWorktrees(hostId)).toEqual(fresh)
|
|
expect(getCachedWorktrees(hostId)).not.toEqual(stale)
|
|
})
|
|
|
|
it('exposes a fresh snapshot to a remounting screen after reconnect', () => {
|
|
// Why: the host detail screen reads getCachedWorktrees(hostId)
|
|
// on (re)mount as its initialCache. A reconnect that writes
|
|
// through must therefore surface here instead of the pre-reconnect data.
|
|
const hostId = 'host-remount'
|
|
setCachedWorktrees(hostId, [{ worktreeId: 'old', name: 'pre-reconnect' }])
|
|
|
|
// Reconnect refetch lands a fresh snapshot and writes it through.
|
|
const reconnected = [
|
|
{ worktreeId: 'old', name: 'post-reconnect' },
|
|
{ worktreeId: 'new', name: 'now-visible' }
|
|
]
|
|
setCachedWorktrees(hostId, reconnected)
|
|
|
|
// A fresh screen mount reads the cache — must see the connected set.
|
|
expect(getCachedWorktrees(hostId)).toEqual(reconnected)
|
|
})
|
|
})
|