TM-SGNL-iOS/SignalServiceKit/tests/Contacts/AuthorMergeHelperTest.swift
TeleMessage developers dde0620daf initial commit
2025-05-03 12:28:28 -07:00

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))
}
}
}