eleven / messenger Public

Clone
git clone https://amadan.net/eleven/messenger

Plain git — no account needed to clone.

Download

Download this file

1import XCTest
2@testable import LChatCore
3
4// 🤖 Twins of the web's sender-attribution helpers (sameSender in ui.js, the
5// senderName resolution in chat.js) — the run-grouping and bubble-header rules
6// must fold identically on both platforms, like Presence/presenceLabel.
7@MainActor
8final class SenderNameTests: XCTestCase {
9
10 private func msg(uid: String?, name: String) -> ChatFeedModel.Message {
11 var raw = MessagePayload()
12 raw.uid = uid
13 raw.name = name
14 return ChatFeedModel.Message(id: 1, name: name, text: "hi", mine: false,
15 at: 1_700_000_000, edited: false, raw: raw)
16 }
17
18 func testSameSenderPrefersUid() {
19 // Same person across a rename (snapshots differ) — still one run.
20 XCTAssertTrue(ChatFeedModel.sameSender(msg(uid: "u1", name: "Dermo"),
21 msg(uid: "u1", name: "Dermot")))
22 // Two people, even with identical snapshots (both nameless), never group.
23 XCTAssertFalse(ChatFeedModel.sameSender(msg(uid: "u1", name: ""),
24 msg(uid: "u2", name: "")))
25 }
26
27 func testSameSenderLegacyFallsBackToName() {
28 XCTAssertTrue(ChatFeedModel.sameSender(msg(uid: nil, name: "Al"),
29 msg(uid: nil, name: "Al")))
30 XCTAssertFalse(ChatFeedModel.sameSender(msg(uid: nil, name: "Al"),
31 msg(uid: nil, name: "Bo")))
32 // A nameless legacy pair says nothing about who sent them — no grouping.
33 XCTAssertFalse(ChatFeedModel.sameSender(msg(uid: nil, name: ""),
34 msg(uid: nil, name: "")))
35 XCTAssertFalse(ChatFeedModel.sameSender(nil, msg(uid: "u1", name: "Al")))
36 }
37}
38