diff --git a/ElementX/Sources/Services/Timeline/TimelineItems/RoomStateEventStringBuilder.swift b/ElementX/Sources/Services/Timeline/TimelineItems/RoomStateEventStringBuilder.swift index 27a0f0cca..2d2fa3c7f 100644 --- a/ElementX/Sources/Services/Timeline/TimelineItems/RoomStateEventStringBuilder.swift +++ b/ElementX/Sources/Services/Timeline/TimelineItems/RoomStateEventStringBuilder.swift @@ -169,13 +169,13 @@ struct RoomStateEventStringBuilder { } case .roomTopic(let topic): switch (topic, isOutgoing) { - case (.some(let topic), false): + case (.some(let topic), false) where !topic.isBlank: return L10n.stateEventRoomTopicChanged(displayName, topic) - case (nil, false): + case (_, false): return L10n.stateEventRoomTopicRemoved(displayName) - case (.some(let name), true): - return L10n.stateEventRoomTopicChangedByYou(name) - case (nil, true): + case (.some(let topic), true) where !topic.isBlank: + return L10n.stateEventRoomTopicChangedByYou(topic) + case (_, true): return L10n.stateEventRoomTopicRemovedByYou } case .roomPinnedEvents(let change): diff --git a/UnitTests/Sources/RoomStateEventStringBuilderTests.swift b/UnitTests/Sources/RoomStateEventStringBuilderTests.swift index 14dbcdf9a..0445bc89b 100644 --- a/UnitTests/Sources/RoomStateEventStringBuilderTests.swift +++ b/UnitTests/Sources/RoomStateEventStringBuilderTests.swift @@ -80,4 +80,26 @@ class RoomStateEventStringBuilderTests: XCTestCase { memberIsYou: sender.id == userID) XCTAssertEqual(string, expectedString) } + + func testTopicChanges() { + let you = TimelineItemSender(id: userID, displayName: "Alice") + let other = TimelineItemSender(id: "@bob:matrix.org", displayName: "Bob") + + let newTopic = "New topic" + var string = stringBuilder.buildString(for: .roomTopic(topic: newTopic), sender: you, isOutgoing: true) + XCTAssertEqual(string, L10n.stateEventRoomTopicChangedByYou(newTopic)) + string = stringBuilder.buildString(for: .roomTopic(topic: newTopic), sender: other, isOutgoing: false) + XCTAssertEqual(string, L10n.stateEventRoomTopicChanged(other.displayName ?? "", newTopic)) + + let emptyTopic = "" + string = stringBuilder.buildString(for: .roomTopic(topic: emptyTopic), sender: you, isOutgoing: true) + XCTAssertEqual(string, L10n.stateEventRoomTopicRemovedByYou) + string = stringBuilder.buildString(for: .roomTopic(topic: emptyTopic), sender: other, isOutgoing: false) + XCTAssertEqual(string, L10n.stateEventRoomTopicRemoved(other.displayName ?? "")) + + string = stringBuilder.buildString(for: .roomTopic(topic: nil), sender: you, isOutgoing: true) + XCTAssertEqual(string, L10n.stateEventRoomTopicRemovedByYou) + string = stringBuilder.buildString(for: .roomTopic(topic: nil), sender: other, isOutgoing: false) + XCTAssertEqual(string, L10n.stateEventRoomTopicRemoved(other.displayName ?? "")) + } }