Fix all compilation errors and warnings in test suite

- Fixed mock service property overrides to match base class properties
- Added missing CryptoKit imports where needed
- Fixed immutable property assignments by creating new instances
- Replaced XCTAssertThrows with XCTAssertThrowsError
- Fixed DeliveryAck serialization method names (serialize -> encode)
- Fixed unused variable warnings
- Ensured all BitchatPacket modifications create new instances
- Fixed BitchatMessage property mutations by creating new instances

All test targets now build successfully for both iOS and macOS platforms.
This commit is contained in:
jack
2025-07-23 09:25:57 +02:00
parent 96136ec364
commit 847d333366
10 changed files with 210 additions and 110 deletions
+35 -18
View File
@@ -7,6 +7,7 @@
//
import XCTest
import CryptoKit
@testable import bitchat
final class PrivateChatE2ETests: XCTestCase {
@@ -134,7 +135,7 @@ final class PrivateChatE2ETests: XCTestCase {
hopCount: 1
) {
// Send ACK back
let ackData = ack.serialize()
let ackData = ack.encode()!
let ackPacket = TestHelpers.createTestPacket(
type: 0x03,
senderID: TestConstants.testPeerID2,
@@ -149,20 +150,25 @@ final class PrivateChatE2ETests: XCTestCase {
// Setup Alice to process ACK
alice.packetDeliveryHandler = { packet in
if packet.type == 0x03 {
if let ack = DeliveryAck.deserialize(from: packet.payload) {
if let ack = DeliveryAck.decode(from: packet.payload) {
self.deliveryTracker.processDeliveryAck(ack)
}
}
}
// Track the message
let message = TestHelpers.createTestMessage(
let trackedMessage = BitchatMessage(
id: messageID,
sender: TestConstants.testNickname1,
content: TestConstants.testMessage1,
timestamp: Date(),
isRelay: false,
originalSender: nil,
isPrivate: true,
recipientNickname: TestConstants.testNickname2
recipientNickname: TestConstants.testNickname2,
senderPeerID: TestConstants.testPeerID1,
mentions: nil
)
var trackedMessage = message
trackedMessage.id = messageID
deliveryTracker.trackMessage(
trackedMessage,
@@ -187,8 +193,8 @@ final class PrivateChatE2ETests: XCTestCase {
let messageID = UUID().uuidString
let expectation = XCTestExpectation(description: "Delivery failed due to timeout")
// Use shorter timeout for testing
let shortTimeoutTracker = DeliveryTracker()
// Use shared instance (can't create new one due to private init)
let shortTimeoutTracker = DeliveryTracker.shared
let cancellable = shortTimeoutTracker.deliveryStatusUpdated.sink { update in
if update.messageID == messageID {
@@ -202,13 +208,18 @@ final class PrivateChatE2ETests: XCTestCase {
}
}
let message = TestHelpers.createTestMessage(
let trackedMessage = BitchatMessage(
id: messageID,
sender: TestConstants.testNickname1,
content: TestConstants.testMessage1,
timestamp: Date(),
isRelay: false,
originalSender: nil,
isPrivate: true,
recipientNickname: TestConstants.testNickname2
recipientNickname: TestConstants.testNickname2,
senderPeerID: TestConstants.testPeerID1,
mentions: nil
)
var trackedMessage = message
trackedMessage.id = messageID
// Track with short timeout (will use default 30s for private messages)
shortTimeoutTracker.trackMessage(
@@ -347,9 +358,15 @@ final class PrivateChatE2ETests: XCTestCase {
message.isPrivate {
do {
let encrypted = try aliceManager.encrypt(packet.payload, for: TestConstants.testPeerID2)
var encryptedPacket = packet
encryptedPacket.type = 0x02 // Encrypted message type
encryptedPacket.payload = encrypted
let encryptedPacket = BitchatPacket(
type: 0x02, // Encrypted message type
senderID: packet.senderID,
recipientID: packet.recipientID,
timestamp: packet.timestamp,
payload: encrypted,
signature: packet.signature,
ttl: packet.ttl
)
self.bob.simulateIncomingPacket(encryptedPacket)
} catch {
XCTFail("Encryption failed: \(error)")
@@ -527,7 +544,7 @@ final class PrivateChatE2ETests: XCTestCase {
myNickname: TestConstants.testNickname2,
hopCount: 1
) {
let ackData = ack.serialize()
let ackData = ack.encode()!
let ackPacket = TestHelpers.createTestPacket(
type: 0x03,
senderID: TestConstants.testPeerID2,
@@ -548,8 +565,8 @@ final class PrivateChatE2ETests: XCTestCase {
private func createMockService(peerID: String, nickname: String) -> MockBluetoothMeshService {
let service = MockBluetoothMeshService()
service.peerID = peerID
service.nickname = nickname
service.myPeerID = peerID
service.mockNickname = nickname
return service
}
+44 -17
View File
@@ -101,14 +101,29 @@ final class PublicChatE2ETests: XCTestCase {
message.sender == TestConstants.testNickname1 {
// Create relay message
var relayMessage = message
relayMessage.isRelay = true
relayMessage.originalSender = message.sender
let relayMessage = BitchatMessage(
id: message.id,
sender: message.sender,
content: message.content,
timestamp: message.timestamp,
isRelay: true,
originalSender: message.sender,
isPrivate: message.isPrivate,
recipientNickname: message.recipientNickname,
senderPeerID: message.senderPeerID,
mentions: message.mentions
)
if let relayPayload = relayMessage.toBinaryPayload() {
var relayPacket = packet
relayPacket.payload = relayPayload
relayPacket.ttl = packet.ttl - 1
let relayPacket = BitchatPacket(
type: packet.type,
senderID: packet.senderID,
recipientID: packet.recipientID,
timestamp: packet.timestamp,
payload: relayPayload,
signature: packet.signature,
ttl: packet.ttl - 1
)
// Simulate relay to Charlie
self.charlie.simulateIncomingPacket(relayPacket)
@@ -394,8 +409,8 @@ final class PublicChatE2ETests: XCTestCase {
private func createMockService(peerID: String, nickname: String) -> MockBluetoothMeshService {
let service = MockBluetoothMeshService()
service.peerID = peerID
service.nickname = nickname
service.myPeerID = peerID
service.mockNickname = nickname
return service
}
@@ -414,17 +429,29 @@ final class PublicChatE2ETests: XCTestCase {
guard message.senderPeerID != node.peerID else { return }
// Create relay message
var relayMessage = message
if !relayMessage.isRelay {
relayMessage.isRelay = true
relayMessage.originalSender = message.sender
}
let relayMessage = BitchatMessage(
id: message.id,
sender: message.sender,
content: message.content,
timestamp: message.timestamp,
isRelay: true,
originalSender: message.isRelay ? message.originalSender : message.sender,
isPrivate: message.isPrivate,
recipientNickname: message.recipientNickname,
senderPeerID: message.senderPeerID,
mentions: message.mentions
)
if let relayPayload = relayMessage.toBinaryPayload() {
var relayPacket = packet
relayPacket.payload = relayPayload
relayPacket.ttl = packet.ttl - 1
relayPacket.senderID = node.peerID.data(using: .utf8)!
let relayPacket = BitchatPacket(
type: packet.type,
senderID: node.peerID.data(using: .utf8)!,
recipientID: packet.recipientID,
timestamp: packet.timestamp,
payload: relayPayload,
signature: packet.signature,
ttl: packet.ttl - 1
)
// Relay to next hops
for nextHop in nextHops {