Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 84 additions & 0 deletions bitchatTests/Utils/PeerDisplayNameResolverTests.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
//
// PeerDisplayNameResolverTests.swift
// bitchatTests
//
// Tests for PeerDisplayNameResolver nickname-collision suffixing
//

import Testing
import BitFoundation
@testable import bitchat

struct PeerDisplayNameResolverTests {

@Test func uniqueNicknamesPassThroughUnchanged() {
let alice = PeerID(str: "aaaa000000000000")
let bob = PeerID(str: "bbbb000000000000")

let result = PeerDisplayNameResolver.resolve(
[
(peerID: alice, nickname: "alice", isConnected: true),
(peerID: bob, nickname: "bob", isConnected: true),

Check warning on line 21 in bitchatTests/Utils/PeerDisplayNameResolverTests.swift

View workflow job for this annotation

GitHub Actions / SwiftLint (advisory)

Collection literals should not have trailing commas (trailing_comma)
],
selfNickname: "me"
)

#expect(result[alice] == "alice")
#expect(result[bob] == "bob")
}

@Test func connectedCollisionSuffixesBothPeers() {
let first = PeerID(str: "1111000000000000")
let second = PeerID(str: "2222000000000000")

let result = PeerDisplayNameResolver.resolve(
[
(peerID: first, nickname: "sam", isConnected: true),
(peerID: second, nickname: "sam", isConnected: true),

Check warning on line 37 in bitchatTests/Utils/PeerDisplayNameResolverTests.swift

View workflow job for this annotation

GitHub Actions / SwiftLint (advisory)

Collection literals should not have trailing commas (trailing_comma)
],
selfNickname: "me"
)

#expect(result[first] == "sam#" + String(first.id.prefix(4)))
#expect(result[second] == "sam#" + String(second.id.prefix(4)))
}

@Test func disconnectedPeerIsExemptFromSuffixingAndFromCollisionCounting() {
let connectedA = PeerID(str: "aaaa000000000000")
let connectedB = PeerID(str: "bbbb000000000000")
let disconnected = PeerID(str: "cccc000000000000")

let result = PeerDisplayNameResolver.resolve(
[
(peerID: connectedA, nickname: "sam", isConnected: true),
(peerID: connectedB, nickname: "sam", isConnected: true),
(peerID: disconnected, nickname: "sam", isConnected: false),

Check warning on line 55 in bitchatTests/Utils/PeerDisplayNameResolverTests.swift

View workflow job for this annotation

GitHub Actions / SwiftLint (advisory)

Collection literals should not have trailing commas (trailing_comma)
],
selfNickname: "me"
)

// The two connected peers still collide with each other and get suffixed.
#expect(result[connectedA] == "sam#" + String(connectedA.id.prefix(4)))
#expect(result[connectedB] == "sam#" + String(connectedB.id.prefix(4)))
// The disconnected peer is never suffixed, regardless of collisions.
#expect(result[disconnected] == "sam")
}

@Test func selfNicknameTriggersSuffixOnLoneRemotePeer() {
// Only one remote peer shares the nickname, but it collides with the
// local user's own current nickname, so it still gets suffixed.
let remote = PeerID(str: "dddd000000000000")

let result = PeerDisplayNameResolver.resolve(
[(peerID: remote, nickname: "me", isConnected: true)],
selfNickname: "me"
)

#expect(result[remote] == "me#" + String(remote.id.prefix(4)))
}

@Test func emptyPeerListReturnsEmptyMap() {
let result = PeerDisplayNameResolver.resolve([], selfNickname: "me")
#expect(result.isEmpty)
}
}
Loading