Files
Luma/Tests/ArchiveSyncCheckpointTests.swift
2026-07-30 20:07:51 +07:00

109 lines
3.5 KiB
Swift

import XCTest
@testable import Luma
final class ArchiveSyncCheckpointTests: XCTestCase {
func testStoredCursorIsPreferredOverTimestampOverlap() {
let checkpoint = ArchiveSyncCheckpoint(
timestamp: Date(timeIntervalSince1970: 1_700_000_000),
cursor: " mam-42 "
)
let position = ArchiveSyncCursorPolicy.requestPosition(
checkpoint: checkpoint,
resumeAfter: nil,
overlap: 60
)
XCTAssertEqual(position.after, "mam-42")
XCTAssertNil(position.start)
}
func testLegacyTimestampUsesBoundedOverlap() {
let timestamp = Date(timeIntervalSince1970: 1_700_000_000)
let position = ArchiveSyncCursorPolicy.requestPosition(
checkpoint: ArchiveSyncCheckpoint(timestamp: timestamp),
resumeAfter: nil,
overlap: 60
)
XCTAssertNil(position.after)
XCTAssertEqual(position.start, timestamp.addingTimeInterval(-60))
}
func testResumeCursorWinsOverDurableCursor() {
let position = ArchiveSyncCursorPolicy.requestPosition(
checkpoint: ArchiveSyncCheckpoint(
timestamp: Date(timeIntervalSince1970: 1_700_000_000),
cursor: "saved"
),
resumeAfter: "page-in-flight",
overlap: 60
)
XCTAssertEqual(position.after, "page-in-flight")
XCTAssertNil(position.start)
}
func testCaughtUpCheckpointKeepsCursorAndAdvancesTimestamp() {
let previous = ArchiveSyncCheckpoint(
timestamp: Date(timeIntervalSince1970: 100),
cursor: "known"
)
let queryStart = Date(timeIntervalSince1970: 200)
let resolved = ArchiveSyncCursorPolicy.resolvedCheckpoint(
previous: previous,
cursor: nil,
highWatermark: nil,
queryStartedAt: queryStart,
caughtUp: true
)
XCTAssertEqual(resolved.cursor, "known")
XCTAssertEqual(resolved.timestamp, queryStart)
}
func testSameTimestampStillAdvancesWhenCursorChanges() {
let previous = ArchiveSyncCheckpoint(
timestamp: Date(timeIntervalSince1970: 100),
cursor: "old"
)
let resolved = ArchiveSyncCursorPolicy.resolvedCheckpoint(
previous: previous,
cursor: "new",
highWatermark: previous.timestamp,
queryStartedAt: Date(timeIntervalSince1970: 200),
caughtUp: false
)
XCTAssertTrue(resolved.advances(over: previous))
XCTAssertEqual(resolved.cursor, "new")
}
func testStoredCursorFallbackCanRunOnlyOnFirstPageAndOnlyOnce() {
let checkpoint = ArchiveSyncCheckpoint(
timestamp: Date(timeIntervalSince1970: 100),
cursor: "stored"
)
XCTAssertTrue(ArchiveSyncCursorPolicy.shouldFallbackFromStoredCursor(
requestedAfter: "stored",
checkpoint: checkpoint,
hasCompletedPage: false,
fallbackAlreadyUsed: false
))
XCTAssertFalse(ArchiveSyncCursorPolicy.shouldFallbackFromStoredCursor(
requestedAfter: "stored",
checkpoint: checkpoint,
hasCompletedPage: true,
fallbackAlreadyUsed: false
))
XCTAssertFalse(ArchiveSyncCursorPolicy.shouldFallbackFromStoredCursor(
requestedAfter: "stored",
checkpoint: checkpoint,
hasCompletedPage: false,
fallbackAlreadyUsed: true
))
}
}