mirror of
https://github.com/permissionlesstech/bitchat.git
synced 2026-07-24 21:45:20 +00:00
* Run local packages’ tests as well on CI * BitFoundation module to centralize shared components
85 lines
3.5 KiB
Swift
85 lines
3.5 KiB
Swift
import Foundation
|
|
import Testing
|
|
import BitFoundation
|
|
@testable import bitchat
|
|
|
|
@Suite("BitchatPeer Tests")
|
|
struct BitchatPeerTests {
|
|
typealias FavoriteRelationship = FavoritesPersistenceService.FavoriteRelationship
|
|
|
|
@Test("Connection state prioritizes bluetooth, mesh, nostr, then offline")
|
|
func connectionStatePriorityIsCorrect() {
|
|
let peerID = PeerID(str: "0123456789abcdef")
|
|
let noiseKey = Data((0..<32).map(UInt8.init))
|
|
let mutual = makeRelationship(isFavorite: true, theyFavoritedUs: true)
|
|
|
|
let bluetooth = BitchatPeer(peerID: peerID, noisePublicKey: noiseKey, nickname: "A", isConnected: true, isReachable: true)
|
|
let mesh = BitchatPeer(peerID: peerID, noisePublicKey: noiseKey, nickname: "A", isConnected: false, isReachable: true)
|
|
var nostr = BitchatPeer(peerID: peerID, noisePublicKey: noiseKey, nickname: "A", isConnected: false, isReachable: false)
|
|
nostr.favoriteStatus = mutual
|
|
let offline = BitchatPeer(peerID: peerID, noisePublicKey: noiseKey, nickname: "A", isConnected: false, isReachable: false)
|
|
|
|
#expect(bluetooth.connectionState == .bluetoothConnected)
|
|
#expect(mesh.connectionState == .meshReachable)
|
|
#expect(nostr.connectionState == .nostrAvailable)
|
|
#expect(offline.connectionState == .offline)
|
|
}
|
|
|
|
@Test("Display name falls back to peer prefix and offline icon reflects inbound favorite")
|
|
func displayNameAndOfflineIconUseDerivedState() {
|
|
let peerID = PeerID(str: "fedcba9876543210")
|
|
let noiseKey = Data((32..<64).map(UInt8.init))
|
|
var peer = BitchatPeer(peerID: peerID, noisePublicKey: noiseKey, nickname: "", isConnected: false, isReachable: false)
|
|
peer.favoriteStatus = makeRelationship(isFavorite: false, theyFavoritedUs: true)
|
|
|
|
#expect(peer.displayName == String(peerID.id.prefix(8)))
|
|
#expect(peer.statusIcon == "🌙")
|
|
}
|
|
|
|
@Test("Mutual offline peers show Nostr icon")
|
|
func mutualFavoriteOfflinePeerShowsNostrIcon() {
|
|
let peerID = PeerID(str: "0011223344556677")
|
|
let noiseKey = Data((64..<96).map(UInt8.init))
|
|
var peer = BitchatPeer(peerID: peerID, noisePublicKey: noiseKey, nickname: "Peer", isConnected: false, isReachable: false)
|
|
peer.favoriteStatus = makeRelationship(isFavorite: true, theyFavoritedUs: true)
|
|
|
|
#expect(peer.statusIcon == "🌐")
|
|
#expect(peer.isFavorite)
|
|
#expect(peer.isMutualFavorite)
|
|
#expect(peer.theyFavoritedUs)
|
|
}
|
|
|
|
@Test("Equality is based only on peer ID")
|
|
func equalityUsesPeerIDOnly() {
|
|
let peerID = PeerID(str: "8899aabbccddeeff")
|
|
let first = BitchatPeer(
|
|
peerID: peerID,
|
|
noisePublicKey: Data(repeating: 1, count: 32),
|
|
nickname: "First",
|
|
isConnected: false,
|
|
isReachable: false
|
|
)
|
|
let second = BitchatPeer(
|
|
peerID: peerID,
|
|
noisePublicKey: Data(repeating: 2, count: 32),
|
|
nickname: "Second",
|
|
isConnected: true,
|
|
isReachable: true
|
|
)
|
|
|
|
#expect(first == second)
|
|
}
|
|
|
|
private func makeRelationship(isFavorite: Bool, theyFavoritedUs: Bool) -> FavoriteRelationship {
|
|
FavoriteRelationship(
|
|
peerNoisePublicKey: Data(repeating: 7, count: 32),
|
|
peerNostrPublicKey: "npub1example",
|
|
peerNickname: "Peer",
|
|
isFavorite: isFavorite,
|
|
theyFavoritedUs: theyFavoritedUs,
|
|
favoritedAt: Date(timeIntervalSince1970: 1),
|
|
lastUpdated: Date(timeIntervalSince1970: 2)
|
|
)
|
|
}
|
|
}
|