Files
mobile-ios/RosettaTests/CallAttachmentParityTests.swift

89 lines
3.2 KiB
Swift

import XCTest
@testable import Rosetta
@MainActor
final class CallAttachmentParityTests: XCTestCase {
private var ctx: DBTestContext!
private var packetSenderMock: CallAttachmentPacketSenderMock!
private var ownPrivateKeyHex: String = ""
private var ownPublicKey: String = ""
private var peerPublicKey: String = ""
override func setUpWithError() throws {
let ownPair = try Self.makeKeyPair()
let peerPair = try Self.makeKeyPair()
ownPrivateKeyHex = ownPair.privateKeyHex
ownPublicKey = ownPair.publicKeyHex
peerPublicKey = peerPair.publicKeyHex
ctx = DBTestContext(account: ownPublicKey)
packetSenderMock = CallAttachmentPacketSenderMock()
SessionManager.shared.testConfigureSessionForParityFlows(
currentPublicKey: ownPublicKey,
privateKeyHex: ownPrivateKeyHex
)
SessionManager.shared.packetFlowSender = packetSenderMock
AttachmentCache.shared.privateKey = ownPrivateKeyHex
}
override func tearDownWithError() throws {
ctx?.teardown()
ctx = nil
packetSenderMock = nil
AttachmentCache.shared.privateKey = nil
SessionManager.shared.testResetParityFlowDependencies()
}
func testCallDurationPreviewParserMatrix() {
let tag = "aaaaaaaa-1111-2222-3333-bbbbbbbbbbbb"
XCTAssertEqual(AttachmentPreviewCodec.parseCallDurationSeconds("65"), 65)
XCTAssertEqual(AttachmentPreviewCodec.parseCallDurationSeconds("\(tag)::125"), 125)
XCTAssertEqual(AttachmentPreviewCodec.parseCallDurationSeconds("durationSec=42"), 42)
XCTAssertEqual(AttachmentPreviewCodec.parseCallDurationSeconds("duration 33"), 33)
XCTAssertEqual(AttachmentPreviewCodec.parseCallDurationSeconds("invalid"), 0)
}
func testSendCallAttachmentProducesType4WithDurationPreview() async throws {
try await ctx.bootstrap()
try await SessionManager.shared.sendCallAttachment(
toPublicKey: peerPublicKey,
durationSec: 87,
opponentTitle: "Peer",
opponentUsername: "peer"
)
XCTAssertEqual(packetSenderMock.sentMessages.count, 1)
guard let packet = packetSenderMock.sentMessages.first else {
XCTFail("Expected one outgoing call attachment packet")
return
}
XCTAssertEqual(packet.attachments.count, 1)
let attachment = packet.attachments[0]
XCTAssertEqual(attachment.type, .call)
XCTAssertEqual(attachment.preview, "87")
XCTAssertEqual(attachment.blob, "")
}
private static func makeKeyPair() throws -> (privateKeyHex: String, publicKeyHex: String) {
let mnemonic = try CryptoManager.shared.generateMnemonic()
let pair = try CryptoManager.shared.deriveKeyPair(from: mnemonic)
return (pair.privateKey.hexString, pair.publicKey.hexString)
}
}
private final class CallAttachmentPacketSenderMock: PacketFlowSending {
private(set) var sentMessages: [PacketMessage] = []
func sendPacket(_ packet: any Packet) {
if let message = packet as? PacketMessage {
sentMessages.append(message)
}
}
}