Signal-iOS/SignalServiceKit/tests/MessageBackup/MessageBackupExpirationTimerChatUpdateTest.swift

57 lines
2.3 KiB
Swift

//
// Copyright 2024 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//
import LibSignalClient
import XCTest
@testable import SignalServiceKit
final class MessageBackupExpirationTimerChatUpdateTest: MessageBackupIntegrationTestCase {
func testExpirationTimerChatUpdates() async throws {
let contactAci = Aci.constantForTesting("5F8C568D-0119-47BD-81AA-BB87C9B71995")
try await runTest(backupName: "expiration-timer-chat-update-message") { sdsTx, tx in
let fetchedContactThreads = deps.threadStore.fetchContactThreads(serviceId: contactAci, tx: tx)
XCTAssertEqual(fetchedContactThreads.count, 1)
let expectedContactThread = fetchedContactThreads.first!
struct ExpectedExpirationTimerUpdate {
let authorIsLocalUser: Bool
let expiresInSeconds: UInt32
var isEnabled: Bool { expiresInSeconds > 0 }
}
var expectedUpdates: [ExpectedExpirationTimerUpdate] = [
.init(authorIsLocalUser: false, expiresInSeconds: 0),
.init(authorIsLocalUser: true, expiresInSeconds: 9001),
]
try deps.interactionStore.enumerateAllInteractions(tx: tx) { interaction -> Bool in
XCTAssertEqual(interaction.uniqueThreadId, expectedContactThread.uniqueId)
guard let dmUpdateInfoMessage = interaction as? OWSDisappearingConfigurationUpdateInfoMessage else {
XCTFail("Unexpected interaction type: \(type(of: interaction))")
return false
}
guard let expectedUpdate = expectedUpdates.popFirst() else {
XCTFail("Unexpectedly missing expected timer change!")
return false
}
XCTAssertEqual(dmUpdateInfoMessage.configurationDurationSeconds, expectedUpdate.expiresInSeconds)
XCTAssertEqual(dmUpdateInfoMessage.configurationIsEnabled, expectedUpdate.isEnabled)
if expectedUpdate.authorIsLocalUser {
XCTAssertNil(dmUpdateInfoMessage.createdByRemoteName)
} else {
XCTAssertNotNil(dmUpdateInfoMessage.createdByRemoteName)
}
return true
}
}
}
}