86 lines
4.4 KiB
Swift
86 lines
4.4 KiB
Swift
//
|
|
// Copyright 2023 Signal Messenger, LLC
|
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
//
|
|
|
|
import XCTest
|
|
|
|
@testable import SignalServiceKit
|
|
|
|
final class AuthorMergeHelperTest: XCTestCase {
|
|
func testShouldCleanUp() throws {
|
|
let phoneNumber = "+16505550101"
|
|
let authorMergeHelper = AuthorMergeHelper()
|
|
try InMemoryDB().write { tx in
|
|
XCTAssertTrue(authorMergeHelper.shouldCleanUp(phoneNumber: phoneNumber, tx: tx))
|
|
try authorMergeHelper.setCurrentVersion(nextVersion: 1, tx: tx)
|
|
XCTAssertFalse(authorMergeHelper.shouldCleanUp(phoneNumber: phoneNumber, tx: tx))
|
|
}
|
|
}
|
|
|
|
func testShouldCleanUpThenJustLearnedThenRebuilt() throws {
|
|
let phoneNumber = "+16505550101"
|
|
let authorMergeHelper = AuthorMergeHelper()
|
|
try InMemoryDB().write { tx in
|
|
authorMergeHelper.foundMissingAci(for: phoneNumber, tx: tx)
|
|
try authorMergeHelper.setCurrentVersion(nextVersion: 1, tx: tx)
|
|
XCTAssertTrue(authorMergeHelper.shouldCleanUp(phoneNumber: phoneNumber, tx: tx))
|
|
authorMergeHelper.maybeJustLearnedAci(for: phoneNumber, tx: tx)
|
|
XCTAssertTrue(authorMergeHelper.shouldCleanUp(phoneNumber: phoneNumber, tx: tx))
|
|
try authorMergeHelper.setCurrentVersion(nextVersion: 2, tx: tx)
|
|
XCTAssertFalse(authorMergeHelper.shouldCleanUp(phoneNumber: phoneNumber, tx: tx))
|
|
}
|
|
}
|
|
|
|
func testShouldCleanUpThenJustLearnedThenDisassociate() throws {
|
|
let phoneNumber = "+16505550101"
|
|
let authorMergeHelper = AuthorMergeHelper()
|
|
try InMemoryDB().write { tx in
|
|
authorMergeHelper.foundMissingAci(for: phoneNumber, tx: tx)
|
|
try authorMergeHelper.setCurrentVersion(nextVersion: 1, tx: tx)
|
|
XCTAssertTrue(authorMergeHelper.shouldCleanUp(phoneNumber: phoneNumber, tx: tx))
|
|
authorMergeHelper.maybeJustLearnedAci(for: phoneNumber, tx: tx)
|
|
XCTAssertTrue(authorMergeHelper.shouldCleanUp(phoneNumber: phoneNumber, tx: tx))
|
|
authorMergeHelper.didCleanUp(phoneNumber: phoneNumber, tx: tx)
|
|
XCTAssertFalse(authorMergeHelper.shouldCleanUp(phoneNumber: phoneNumber, tx: tx))
|
|
try authorMergeHelper.setCurrentVersion(nextVersion: 2, tx: tx)
|
|
XCTAssertFalse(authorMergeHelper.shouldCleanUp(phoneNumber: phoneNumber, tx: tx))
|
|
}
|
|
}
|
|
|
|
func testJustLearnedWhenNotJustLearned() throws {
|
|
let phoneNumber = "+16505550101"
|
|
let authorMergeHelper = AuthorMergeHelper()
|
|
try InMemoryDB().write { tx in
|
|
authorMergeHelper.maybeJustLearnedAci(for: phoneNumber, tx: tx)
|
|
XCTAssertEqual(authorMergeHelper.nextVersion(tx: tx), 1)
|
|
try authorMergeHelper.setCurrentVersion(nextVersion: 1, tx: tx)
|
|
authorMergeHelper.maybeJustLearnedAci(for: phoneNumber, tx: tx)
|
|
XCTAssertEqual(authorMergeHelper.nextVersion(tx: tx), 1)
|
|
}
|
|
}
|
|
|
|
func testInvalidatedWhileBuilding() throws {
|
|
let phoneNumber1 = "+16505550101"
|
|
let phoneNumber2 = "+16505550102"
|
|
let phoneNumber3 = "+16505550103"
|
|
let authorMergeHelper = AuthorMergeHelper()
|
|
try InMemoryDB().write { tx in
|
|
authorMergeHelper.foundMissingAci(for: phoneNumber1, tx: tx)
|
|
authorMergeHelper.foundMissingAci(for: phoneNumber2, tx: tx)
|
|
authorMergeHelper.foundMissingAci(for: phoneNumber3, tx: tx)
|
|
try authorMergeHelper.setCurrentVersion(nextVersion: 1, tx: tx)
|
|
authorMergeHelper.maybeJustLearnedAci(for: phoneNumber1, tx: tx)
|
|
XCTAssertEqual(authorMergeHelper.nextVersion(tx: tx), 2)
|
|
authorMergeHelper.maybeJustLearnedAci(for: phoneNumber2, tx: tx)
|
|
XCTAssertThrowsError(try authorMergeHelper.setCurrentVersion(nextVersion: 2, tx: tx))
|
|
XCTAssertTrue(authorMergeHelper.shouldCleanUp(phoneNumber: phoneNumber1, tx: tx))
|
|
XCTAssertTrue(authorMergeHelper.shouldCleanUp(phoneNumber: phoneNumber2, tx: tx))
|
|
XCTAssertTrue(authorMergeHelper.shouldCleanUp(phoneNumber: phoneNumber3, tx: tx))
|
|
try authorMergeHelper.setCurrentVersion(nextVersion: 3, tx: tx)
|
|
XCTAssertFalse(authorMergeHelper.shouldCleanUp(phoneNumber: phoneNumber1, tx: tx))
|
|
XCTAssertFalse(authorMergeHelper.shouldCleanUp(phoneNumber: phoneNumber2, tx: tx))
|
|
XCTAssertTrue(authorMergeHelper.shouldCleanUp(phoneNumber: phoneNumber3, tx: tx))
|
|
}
|
|
}
|
|
}
|