68 lines
4.1 KiB
Swift
68 lines
4.1 KiB
Swift
//
|
|
// Copyright 2023, 2024 New Vector Ltd.
|
|
//
|
|
// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
|
|
// Please see LICENSE files in the repository root for full details.
|
|
//
|
|
|
|
@testable import ElementX
|
|
import MatrixRustSDK
|
|
import XCTest
|
|
|
|
class RoomEventStringBuilderTests: XCTestCase {
|
|
var ownUserID: String!
|
|
var stringBuilder: RoomEventStringBuilder!
|
|
|
|
override func setUp() {
|
|
ownUserID = "@alice:matrix.org"
|
|
let stateEventStringBuilder = RoomStateEventStringBuilder(userID: ownUserID)
|
|
let attributedStringBuilder = AttributedStringBuilder(mentionBuilder: MentionBuilder())
|
|
|
|
stringBuilder = RoomEventStringBuilder(stateEventStringBuilder: stateEventStringBuilder,
|
|
messageEventStringBuilder: RoomMessageEventStringBuilder(attributedStringBuilder: attributedStringBuilder,
|
|
destination: .roomList),
|
|
shouldDisambiguateDisplayNames: true,
|
|
shouldPrefixSenderName: true)
|
|
}
|
|
|
|
func testSenderPrefix() {
|
|
let ownMessageString = stringBuilder.buildAttributedString(for: makeTextMessageItem(senderID: ownUserID, senderDisplayName: "Alice"))
|
|
XCTAssertEqual(ownMessageString?.string, "You: Hello, World!",
|
|
"Your own messages should be prefixed with 'You'")
|
|
|
|
let otherMessageString = stringBuilder.buildAttributedString(for: makeTextMessageItem(senderID: "@bob:matrix.org", senderDisplayName: "Bob"))
|
|
XCTAssertEqual(otherMessageString?.string, "Bob: Hello, World!",
|
|
"Everyone else's messages should be prefixed with their display name.")
|
|
|
|
let ambiguousMessageString = stringBuilder.buildAttributedString(for: makeTextMessageItem(senderID: "@charlie:matrix.org",
|
|
senderDisplayName: "Charlie",
|
|
senderDisplayNameAmbiguous: true))
|
|
XCTAssertEqual(ambiguousMessageString?.string, "Charlie (@charlie:matrix.org): Hello, World!",
|
|
"Messages from senders with ambiguous display names should include their user ID in the prefix.")
|
|
}
|
|
|
|
// MARK: - Helpers
|
|
|
|
private func makeTextMessageItem(senderID: String,
|
|
senderDisplayName: String? = nil,
|
|
senderDisplayNameAmbiguous: Bool = false,
|
|
message: String = "Hello, World!") -> EventTimelineItemProxy {
|
|
.init(item: .init(configuration: .init(eventID: "1234",
|
|
sender: senderID,
|
|
senderProfile: .ready(displayName: senderDisplayName, displayNameAmbiguous: senderDisplayNameAmbiguous, avatarUrl: nil),
|
|
isOwn: senderID == ownUserID,
|
|
content: .msgLike(content: .init(kind: .message(content: .init(msgType: makeTextContent(message: message),
|
|
body: message,
|
|
isEdited: false,
|
|
mentions: nil)),
|
|
reactions: [],
|
|
threadRoot: nil,
|
|
inReplyTo: nil)))),
|
|
uniqueID: .init("0"))
|
|
}
|
|
|
|
private func makeTextContent(message: String) -> MessageType {
|
|
.text(content: .init(body: message, formatted: nil))
|
|
}
|
|
}
|