mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-02 12:07:55 +00:00
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.
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
//
|
||||
// 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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user