Files
letro-ios/UnitTests/Sources/RoomStateEventStringBuilderTests.swift
Doug e54a202a44 Improvements to state items (#478)
- Remove context menu (and fix long press when there are no items).
- Add membership change tests.
- Fix new/old name incorrect ordering.
- Fix message grouping when it comes before/after a state item from the same user.
- Only show reactions picker for items that can be reacted to.
2023-01-23 10:01:45 +00:00

90 lines
4.7 KiB
Swift

//
// Copyright 2023 New Vector Ltd
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
@testable import ElementX
import MatrixRustSDK
import XCTest
class RoomStateEventStringBuilderTests: XCTestCase {
var userID: String!
var stringBuilder: RoomStateEventStringBuilder!
override func setUp() {
userID = "@alice:matrix.org"
stringBuilder = RoomStateEventStringBuilder(userID: userID)
}
func testDisplayNameChanges() {
// Changes by you.
validateDisplayNameChange(senderID: userID, oldName: "Alice", newName: "Bob",
expectedString: ElementL10n.noticeDisplayNameChangedFromByYou("Alice", "Bob"))
validateDisplayNameChange(senderID: userID, oldName: "Alice", newName: nil,
expectedString: ElementL10n.noticeDisplayNameRemovedByYou("Alice"))
validateDisplayNameChange(senderID: userID, oldName: nil, newName: "Alice",
expectedString: ElementL10n.noticeDisplayNameSetByYou("Alice"))
// Changes by someone else.
let senderID = "@bob:matrix.org"
validateDisplayNameChange(senderID: senderID, oldName: "Bob", newName: "Alice",
expectedString: ElementL10n.noticeDisplayNameChangedFrom(senderID, "Bob", "Alice"))
validateDisplayNameChange(senderID: senderID, oldName: "Bob", newName: nil,
expectedString: ElementL10n.noticeDisplayNameRemoved(senderID, "Bob"))
validateDisplayNameChange(senderID: senderID, oldName: nil, newName: "Bob",
expectedString: ElementL10n.noticeDisplayNameSet(senderID, "Bob"))
}
func validateDisplayNameChange(senderID: String, oldName: String?, newName: String?, expectedString: String) {
let sender = TimelineItemSender(id: senderID, displayName: newName)
let change = MembershipChange.profileChanged(displayName: newName, prevDisplayName: oldName, avatarUrl: nil, prevAvatarUrl: nil)
let string = stringBuilder.buildString(for: change, member: sender.id, sender: sender, isOutgoing: sender.id == userID)
XCTAssertEqual(string, expectedString)
}
func testAvatarChanges() {
// Changes by you.
validateAvatarChange(senderID: userID, oldAvatarURL: "mxc://1", newAvatarURL: "mxc://2",
expectedString: ElementL10n.noticeAvatarUrlChangedByYou)
validateAvatarChange(senderID: userID, oldAvatarURL: "mxc://1", newAvatarURL: nil,
expectedString: ElementL10n.noticeAvatarUrlChangedByYou)
validateAvatarChange(senderID: userID, oldAvatarURL: nil, newAvatarURL: "mxc://1",
expectedString: ElementL10n.noticeAvatarUrlChangedByYou)
// Changes by someone else.
let senderID = "@bob:matrix.org"
let senderName = "Bob"
validateAvatarChange(senderID: senderID, senderName: senderName, oldAvatarURL: "mxc://1", newAvatarURL: "mxc://2",
expectedString: ElementL10n.noticeAvatarUrlChanged(senderName))
validateAvatarChange(senderID: senderID, senderName: senderName, oldAvatarURL: "mxc://1", newAvatarURL: nil,
expectedString: ElementL10n.noticeAvatarUrlChanged(senderName))
validateAvatarChange(senderID: senderID, senderName: senderName, oldAvatarURL: nil, newAvatarURL: "mxc://1",
expectedString: ElementL10n.noticeAvatarUrlChanged(senderName))
}
func validateAvatarChange(senderID: String, senderName: String? = nil,
oldAvatarURL: String?, newAvatarURL: String?,
expectedString: String) {
let sender = TimelineItemSender(id: senderID, displayName: senderName)
let change = MembershipChange.profileChanged(displayName: senderName, prevDisplayName: senderName,
avatarUrl: oldAvatarURL, prevAvatarUrl: newAvatarURL)
let string = stringBuilder.buildString(for: change, member: sender.id, sender: sender, isOutgoing: sender.id == userID)
XCTAssertEqual(string, expectedString)
}
}