// // MockBluetoothMeshService.swift // bitchatTests // // This is free and unencumbered software released into the public domain. // For more information, see // import Foundation import MultipeerConnectivity @testable import bitchat class MockBluetoothMeshService: BluetoothMeshService { var sentMessages: [(message: BitchatMessage, packet: BitchatPacket)] = [] var sentPackets: [BitchatPacket] = [] var connectedPeers: Set = [] var messageDeliveryHandler: ((BitchatMessage) -> Void)? var packetDeliveryHandler: ((BitchatPacket) -> Void)? // Override these properties var mockNickname: String = "MockUser" override var myPeerID: String { didSet { // Update when changed } } var nickname: String { return mockNickname } var peerID: String { return myPeerID } override init() { super.init() self.myPeerID = "MOCK1234" } func simulateConnectedPeer(_ peerID: String) { connectedPeers.insert(peerID) delegate?.didConnectToPeer(peerID) delegate?.didUpdatePeerList(Array(connectedPeers)) } func simulateDisconnectedPeer(_ peerID: String) { connectedPeers.remove(peerID) delegate?.didDisconnectFromPeer(peerID) delegate?.didUpdatePeerList(Array(connectedPeers)) } override func sendMessage(_ content: String, mentions: [String], to room: String? = nil, messageID: String? = nil, timestamp: Date? = nil) { let message = BitchatMessage( id: messageID ?? UUID().uuidString, sender: mockNickname, content: content, timestamp: timestamp ?? Date(), isRelay: false, originalSender: nil, isPrivate: false, recipientNickname: nil, senderPeerID: myPeerID, mentions: mentions.isEmpty ? nil : mentions ) if let payload = message.toBinaryPayload() { let packet = BitchatPacket( type: 0x01, senderID: myPeerID.data(using: .utf8)!, recipientID: nil, timestamp: UInt64(Date().timeIntervalSince1970 * 1000), payload: payload, signature: nil, ttl: 3, sequenceNumber: 1 ) sentMessages.append((message, packet)) sentPackets.append(packet) // Simulate local echo DispatchQueue.main.async { [weak self] in self?.delegate?.didReceiveMessage(message) } // Call delivery handler if set messageDeliveryHandler?(message) } } override func sendPrivateMessage(_ content: String, to recipientPeerID: String, recipientNickname: String, messageID: String? = nil) { let message = BitchatMessage( id: messageID ?? UUID().uuidString, sender: mockNickname, content: content, timestamp: Date(), isRelay: false, originalSender: nil, isPrivate: true, recipientNickname: recipientNickname, senderPeerID: myPeerID, mentions: nil ) if let payload = message.toBinaryPayload() { let packet = BitchatPacket( type: 0x01, senderID: myPeerID.data(using: .utf8)!, recipientID: recipientPeerID.data(using: .utf8)!, timestamp: UInt64(Date().timeIntervalSince1970 * 1000), payload: payload, signature: nil, ttl: 3, sequenceNumber: 1 ) sentMessages.append((message, packet)) sentPackets.append(packet) // Simulate local echo DispatchQueue.main.async { [weak self] in self?.delegate?.didReceiveMessage(message) } // Call delivery handler if set messageDeliveryHandler?(message) } } func simulateIncomingMessage(_ message: BitchatMessage) { delegate?.didReceiveMessage(message) } func simulateIncomingPacket(_ packet: BitchatPacket) { // Process through the actual handling logic if let message = BitchatMessage.fromBinaryPayload(packet.payload) { delegate?.didReceiveMessage(message) } packetDeliveryHandler?(packet) } func getConnectedPeers() -> [String] { return Array(connectedPeers) } }