91 lines
2.3 KiB
Swift
91 lines
2.3 KiB
Swift
import XCTest
|
|
@testable import Luma
|
|
|
|
final class ArchiveSyncPaginationTests: XCTestCase {
|
|
func testCompleteResponseFinishesEvenWhenCursorExists() {
|
|
var pagination = ArchiveSyncPagination()
|
|
|
|
XCTAssertEqual(
|
|
pagination.decision(
|
|
complete: true,
|
|
lastCursor: "server-last",
|
|
requestedAfter: nil
|
|
),
|
|
.finished
|
|
)
|
|
}
|
|
|
|
func testIncompleteResponseContinuesWithNewCursor() {
|
|
var pagination = ArchiveSyncPagination()
|
|
|
|
XCTAssertEqual(
|
|
pagination.decision(
|
|
complete: false,
|
|
lastCursor: "page-1-last",
|
|
requestedAfter: nil
|
|
),
|
|
.next("page-1-last")
|
|
)
|
|
}
|
|
|
|
func testRepeatedCursorStopsPaginationLoop() {
|
|
var pagination = ArchiveSyncPagination()
|
|
_ = pagination.decision(
|
|
complete: false,
|
|
lastCursor: "repeated",
|
|
requestedAfter: nil
|
|
)
|
|
|
|
XCTAssertEqual(
|
|
pagination.decision(
|
|
complete: false,
|
|
lastCursor: "repeated",
|
|
requestedAfter: "repeated"
|
|
),
|
|
.invalidCursor
|
|
)
|
|
}
|
|
|
|
func testCursorCycleStopsPaginationLoop() {
|
|
var pagination = ArchiveSyncPagination()
|
|
XCTAssertEqual(
|
|
pagination.decision(
|
|
complete: false,
|
|
lastCursor: "page-a",
|
|
requestedAfter: nil
|
|
),
|
|
.next("page-a")
|
|
)
|
|
XCTAssertEqual(
|
|
pagination.decision(
|
|
complete: false,
|
|
lastCursor: "page-b",
|
|
requestedAfter: "page-a"
|
|
),
|
|
.next("page-b")
|
|
)
|
|
|
|
XCTAssertEqual(
|
|
pagination.decision(
|
|
complete: false,
|
|
lastCursor: "page-a",
|
|
requestedAfter: "page-b"
|
|
),
|
|
.invalidCursor
|
|
)
|
|
}
|
|
|
|
func testIncompleteResponseWithoutCursorDoesNotAdvanceCheckpoint() {
|
|
var pagination = ArchiveSyncPagination()
|
|
|
|
XCTAssertEqual(
|
|
pagination.decision(
|
|
complete: false,
|
|
lastCursor: nil,
|
|
requestedAfter: nil
|
|
),
|
|
.invalidCursor
|
|
)
|
|
}
|
|
}
|