Rename RoomTimelineItemFixtures to just TimelineFixtures

This commit is contained in:
Stefan Ceriu
2026-06-03 14:21:28 +03:00
parent 9615e184ad
commit 56d5f72f01
8 changed files with 50 additions and 50 deletions
+4 -4
View File
@@ -60,6 +60,7 @@
06D17F7813AA931FF18FD5D0 /* SDKListener.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE5CD2993048222B64C45006 /* SDKListener.swift */; }; 06D17F7813AA931FF18FD5D0 /* SDKListener.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE5CD2993048222B64C45006 /* SDKListener.swift */; };
06D3942496E9E0E655F14D21 /* NotificationManagerProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = A057F2FDC14866C3026A89A4 /* NotificationManagerProtocol.swift */; }; 06D3942496E9E0E655F14D21 /* NotificationManagerProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = A057F2FDC14866C3026A89A4 /* NotificationManagerProtocol.swift */; };
06F8EDF52E33A2D36BCC1161 /* AppLockScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56D6F88FE35A0979D2821E06 /* AppLockScreen.swift */; }; 06F8EDF52E33A2D36BCC1161 /* AppLockScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56D6F88FE35A0979D2821E06 /* AppLockScreen.swift */; };
071244C4CCD5E932ACC3D36D /* TimelineFixtures.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F65178687F725E8924B723C /* TimelineFixtures.swift */; };
071A017E415AD378F2961B11 /* URL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 227AC5D71A4CE43512062243 /* URL.swift */; }; 071A017E415AD378F2961B11 /* URL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 227AC5D71A4CE43512062243 /* URL.swift */; };
0728314DD51AC3819F818EA8 /* LogLevel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2711E5996016ABD6EAAEB58A /* LogLevel.swift */; }; 0728314DD51AC3819F818EA8 /* LogLevel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2711E5996016ABD6EAAEB58A /* LogLevel.swift */; };
07376A5274822EB45CC320C7 /* InvitedRoomProxyMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A21027F05874B1BCC3E452B /* InvitedRoomProxyMock.swift */; }; 07376A5274822EB45CC320C7 /* InvitedRoomProxyMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A21027F05874B1BCC3E452B /* InvitedRoomProxyMock.swift */; };
@@ -673,7 +674,6 @@
6FC10A00D268FCD48B631E37 /* ViewFrameReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = EFF7BF82A950B91BC5469E91 /* ViewFrameReader.swift */; }; 6FC10A00D268FCD48B631E37 /* ViewFrameReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = EFF7BF82A950B91BC5469E91 /* ViewFrameReader.swift */; };
6FD8053301C5FEFA82D2F246 /* URLComponents.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BFDCA5A09EE70BC17F2EFA7 /* URLComponents.swift */; }; 6FD8053301C5FEFA82D2F246 /* URLComponents.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BFDCA5A09EE70BC17F2EFA7 /* URLComponents.swift */; };
70394ECD2DCC70741538620D /* AccessibilityIdentifiers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04BB8DDE245ED86C489BA983 /* AccessibilityIdentifiers.swift */; }; 70394ECD2DCC70741538620D /* AccessibilityIdentifiers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04BB8DDE245ED86C489BA983 /* AccessibilityIdentifiers.swift */; };
70558528EF68CAAEF09972D5 /* RoomTimelineItemFixtures.swift in Sources */ = {isa = PBXBuildFile; fileRef = E96ED747FF90332EA1333C22 /* RoomTimelineItemFixtures.swift */; };
706289B086B0A6B0C211763F /* UITestsSignalling.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7F0192CE2F891141A25B49F /* UITestsSignalling.swift */; }; 706289B086B0A6B0C211763F /* UITestsSignalling.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7F0192CE2F891141A25B49F /* UITestsSignalling.swift */; };
707E49BE07E8EB8A13C0EB1E /* SessionVerificationScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FACD034DB52525A3CEF2BDF /* SessionVerificationScreen.swift */; }; 707E49BE07E8EB8A13C0EB1E /* SessionVerificationScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FACD034DB52525A3CEF2BDF /* SessionVerificationScreen.swift */; };
708FC3184CCED825F0A36273 /* RoomThreadListServiceProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = CCE06F4A71FD46C9D8CD432E /* RoomThreadListServiceProxy.swift */; }; 708FC3184CCED825F0A36273 /* RoomThreadListServiceProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = CCE06F4A71FD46C9D8CD432E /* RoomThreadListServiceProxy.swift */; };
@@ -1923,6 +1923,7 @@
2E11E7C396ED06A154CF6DF3 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/SAS.strings; sourceTree = "<group>"; }; 2E11E7C396ED06A154CF6DF3 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/SAS.strings; sourceTree = "<group>"; };
2F06F70B9C433BAD4BC6B9F5 /* EncryptedRoomTimelineView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EncryptedRoomTimelineView.swift; sourceTree = "<group>"; }; 2F06F70B9C433BAD4BC6B9F5 /* EncryptedRoomTimelineView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EncryptedRoomTimelineView.swift; sourceTree = "<group>"; };
2F36C5D9B37E50915ECBD3EE /* RoomMemberProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomMemberProxy.swift; sourceTree = "<group>"; }; 2F36C5D9B37E50915ECBD3EE /* RoomMemberProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomMemberProxy.swift; sourceTree = "<group>"; };
2F65178687F725E8924B723C /* TimelineFixtures.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineFixtures.swift; sourceTree = "<group>"; };
2F926D08EB3D622A480BCA71 /* TimelineEventContent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineEventContent.swift; sourceTree = "<group>"; }; 2F926D08EB3D622A480BCA71 /* TimelineEventContent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineEventContent.swift; sourceTree = "<group>"; };
303D9438EFB481F57A366E82 /* EncryptionResetPasswordScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EncryptionResetPasswordScreenViewModel.swift; sourceTree = "<group>"; }; 303D9438EFB481F57A366E82 /* EncryptionResetPasswordScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EncryptionResetPasswordScreenViewModel.swift; sourceTree = "<group>"; };
303FCADE77DF1F3670C086ED /* BugReportScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BugReportScreenViewModel.swift; sourceTree = "<group>"; }; 303FCADE77DF1F3670C086ED /* BugReportScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BugReportScreenViewModel.swift; sourceTree = "<group>"; };
@@ -2958,7 +2959,6 @@
E8A1F98AE670377B20679FF5 /* MediaPlayerProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MediaPlayerProvider.swift; sourceTree = "<group>"; }; E8A1F98AE670377B20679FF5 /* MediaPlayerProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MediaPlayerProvider.swift; sourceTree = "<group>"; };
E8AE4B3273BA189FDCD4055C /* UserIndicator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserIndicator.swift; sourceTree = "<group>"; }; E8AE4B3273BA189FDCD4055C /* UserIndicator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserIndicator.swift; sourceTree = "<group>"; };
E944F717FC10A428D027074D /* RoomPowerLevelsProxyMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomPowerLevelsProxyMock.swift; sourceTree = "<group>"; }; E944F717FC10A428D027074D /* RoomPowerLevelsProxyMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomPowerLevelsProxyMock.swift; sourceTree = "<group>"; };
E96ED747FF90332EA1333C22 /* RoomTimelineItemFixtures.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomTimelineItemFixtures.swift; sourceTree = "<group>"; };
E992D7B8BE54B2AB454613AF /* XCUIElement.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XCUIElement.swift; sourceTree = "<group>"; }; E992D7B8BE54B2AB454613AF /* XCUIElement.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XCUIElement.swift; sourceTree = "<group>"; };
E9A3D3CFA199FA7897364547 /* CallInviteRoomTimelineItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CallInviteRoomTimelineItem.swift; sourceTree = "<group>"; }; E9A3D3CFA199FA7897364547 /* CallInviteRoomTimelineItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CallInviteRoomTimelineItem.swift; sourceTree = "<group>"; };
E9B796D347E53631576F631C /* PreviewTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreviewTests.swift; sourceTree = "<group>"; }; E9B796D347E53631576F631C /* PreviewTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreviewTests.swift; sourceTree = "<group>"; };
@@ -4129,7 +4129,7 @@
3EA31CC7012EA2A5653DAFC9 /* Fixtures */ = { 3EA31CC7012EA2A5653DAFC9 /* Fixtures */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
E96ED747FF90332EA1333C22 /* RoomTimelineItemFixtures.swift */, 2F65178687F725E8924B723C /* TimelineFixtures.swift */,
); );
path = Fixtures; path = Fixtures;
sourceTree = "<group>"; sourceTree = "<group>";
@@ -8903,7 +8903,6 @@
12F7172C93873638B23CD6AD /* RoomThreadListServiceProxyProtocol.swift in Sources */, 12F7172C93873638B23CD6AD /* RoomThreadListServiceProxyProtocol.swift in Sources */,
4E945AD6862C403F74E57755 /* RoomTimelineItemFactory.swift in Sources */, 4E945AD6862C403F74E57755 /* RoomTimelineItemFactory.swift in Sources */,
13C77FDF17C4C6627CFFC205 /* RoomTimelineItemFactoryProtocol.swift in Sources */, 13C77FDF17C4C6627CFFC205 /* RoomTimelineItemFactoryProtocol.swift in Sources */,
70558528EF68CAAEF09972D5 /* RoomTimelineItemFixtures.swift in Sources */,
878070573C7BF19E735707B4 /* RoomTimelineItemProperties.swift in Sources */, 878070573C7BF19E735707B4 /* RoomTimelineItemProperties.swift in Sources */,
1AE4AEA0FA8DEF52671832E0 /* RoomTimelineItemProtocol.swift in Sources */, 1AE4AEA0FA8DEF52671832E0 /* RoomTimelineItemProtocol.swift in Sources */,
AD55E245FE686D7DB4C86406 /* RoomTimelineItemView.swift in Sources */, AD55E245FE686D7DB4C86406 /* RoomTimelineItemView.swift in Sources */,
@@ -9074,6 +9073,7 @@
FA53FA227FFBE469AFF32F71 /* TimelineControllerProtocol.swift in Sources */, FA53FA227FFBE469AFF32F71 /* TimelineControllerProtocol.swift in Sources */,
798BF3072137833FBD3F4C96 /* TimelineDeliveryStatusView.swift in Sources */, 798BF3072137833FBD3F4C96 /* TimelineDeliveryStatusView.swift in Sources */,
22BA593A5E19D8D3DE2FAA6F /* TimelineEventContent.swift in Sources */, 22BA593A5E19D8D3DE2FAA6F /* TimelineEventContent.swift in Sources */,
071244C4CCD5E932ACC3D36D /* TimelineFixtures.swift in Sources */,
109AEB7D33C4497727AFB87F /* TimelineInteractionHandler.swift in Sources */, 109AEB7D33C4497727AFB87F /* TimelineInteractionHandler.swift in Sources */,
E6FA87F773424B27614B23E9 /* TimelineItemAccessibilityModifier.swift in Sources */, E6FA87F773424B27614B23E9 /* TimelineItemAccessibilityModifier.swift in Sources */,
F6767F17D538578B370DD805 /* TimelineItemBubbleBackground.swift in Sources */, F6767F17D538578B370DD805 /* TimelineItemBubbleBackground.swift in Sources */,
@@ -21,7 +21,7 @@ extension TimelineControllerFactoryMock {
if let timelineController = configuration.threadTimelineController { if let timelineController = configuration.threadTimelineController {
return timelineController return timelineController
} else { } else {
return TimelineControllerMock(.init(timelineItems: RoomTimelineItemFixtures.largeChunk)) return TimelineControllerMock(.init(timelineItems: TimelineFixtures.largeChunk))
} }
} }
@@ -29,7 +29,7 @@ extension TimelineControllerFactoryMock {
if let timelineController = configuration.threadTimelineController { if let timelineController = configuration.threadTimelineController {
return .success(timelineController) return .success(timelineController)
} else { } else {
let timelineController = TimelineControllerMock(.init(timelineKind: .thread(rootEventID: threadRootEventID), timelineItems: RoomTimelineItemFixtures.largeChunk)) let timelineController = TimelineControllerMock(.init(timelineKind: .thread(rootEventID: threadRootEventID), timelineItems: TimelineFixtures.largeChunk))
return .success(timelineController) return .success(timelineController)
} }
} }
@@ -16,7 +16,7 @@ import MatrixRustSDKMocks
struct TimelineControllerMockConfiguration { struct TimelineControllerMockConfiguration {
var roomProxy: JoinedRoomProxyProtocol? var roomProxy: JoinedRoomProxyProtocol?
var timelineKind: TimelineKind = .live var timelineKind: TimelineKind = .live
var timelineItems: [RoomTimelineItemProtocol] = RoomTimelineItemFixtures.default var timelineItems: [RoomTimelineItemProtocol] = TimelineFixtures.default
var timelineProxy: TimelineProxyProtocol? var timelineProxy: TimelineProxyProtocol?
var timelineItemsTimestamps: [TimelineItemIdentifier: Date] = [:] var timelineItemsTimestamps: [TimelineItemIdentifier: Date] = [:]
var paginationState: TimelinePaginationState = .initial var paginationState: TimelinePaginationState = .initial
@@ -25,7 +25,7 @@ struct TimelineControllerMockConfiguration {
extension TimelineControllerMock { extension TimelineControllerMock {
static var mediaGallery: TimelineControllerMock { static var mediaGallery: TimelineControllerMock {
TimelineControllerMock(.init(timelineKind: .media(.mediaFilesScreen), timelineItems: (0..<5).reduce([]) { partialResult, _ in TimelineControllerMock(.init(timelineKind: .media(.mediaFilesScreen), timelineItems: (0..<5).reduce([]) { partialResult, _ in
partialResult + [RoomTimelineItemFixtures.separator] + RoomTimelineItemFixtures.mediaChunk partialResult + [TimelineFixtures.separator] + TimelineFixtures.mediaChunk
})) }))
} }
@@ -362,11 +362,11 @@ struct TimelineItemMenu_Previews: PreviewProvider, TestablePreview {
static func makeItem(itemType: ItemType) -> EventBasedTimelineItemProtocol? { static func makeItem(itemType: ItemType) -> EventBasedTimelineItemProtocol? {
switch itemType { switch itemType {
case .incomingText: case .incomingText:
RoomTimelineItemFixtures.singleMessageChunk.first as? EventBasedTimelineItemProtocol TimelineFixtures.singleMessageChunk.first as? EventBasedTimelineItemProtocol
case .outgoingMedia: case .outgoingMedia:
RoomTimelineItemFixtures.mediaChunk[1] as? EventBasedTimelineItemProtocol TimelineFixtures.mediaChunk[1] as? EventBasedTimelineItemProtocol
case .outgoingMediaWithCaption: case .outgoingMediaWithCaption:
RoomTimelineItemFixtures.mediaChunk[5] as? EventBasedTimelineItemProtocol TimelineFixtures.mediaChunk[5] as? EventBasedTimelineItemProtocol
} }
} }
} }
@@ -87,7 +87,7 @@ struct HighlightedTimelineItemModifier_Previews: PreviewProvider, TestablePrevie
struct HighlightedTimelineItemTimeline_Previews: PreviewProvider { struct HighlightedTimelineItemTimeline_Previews: PreviewProvider {
static let roomProxyMock = JoinedRoomProxyMock(.init(name: "Preview room")) static let roomProxyMock = JoinedRoomProxyMock(.init(name: "Preview room"))
static let roomViewModel = RoomScreenViewModel.mock(roomProxyMock: roomProxyMock) static let roomViewModel = RoomScreenViewModel.mock(roomProxyMock: roomProxyMock)
static let focussedEventID = "RoomTimelineItemFixtures.default.5" static let focussedEventID = "TimelineFixtures.default.5"
static let composerViewModel = ComposerToolbarViewModel.mock() static let composerViewModel = ComposerToolbarViewModel.mock()
static let timelineViewModel = { static let timelineViewModel = {
let appSettings = AppSettings.volatile() let appSettings = AppSettings.volatile()
@@ -9,12 +9,12 @@
import Foundation import Foundation
import MatrixRustSDK import MatrixRustSDK
enum RoomTimelineItemFixtures { enum TimelineFixtures {
/// The default timeline items used in Xcode previews etc. /// The default timeline items used in Xcode previews etc.
static var `default`: [RoomTimelineItemProtocol] = [ static var `default`: [RoomTimelineItemProtocol] = [
SeparatorRoomTimelineItem(id: .virtual(uniqueID: .init("Yesterday")), timestamp: .mock), SeparatorRoomTimelineItem(id: .virtual(uniqueID: .init("Yesterday")), timestamp: .mock),
TextRoomTimelineItem(id: .event(uniqueID: .init(".RoomTimelineItemFixtures.default.0"), TextRoomTimelineItem(id: .event(uniqueID: .init(".TimelineFixtures.default.0"),
eventOrTransactionID: .eventID("RoomTimelineItemFixtures.default.0")), eventOrTransactionID: .eventID("TimelineFixtures.default.0")),
timestamp: .mock, timestamp: .mock,
isOutgoing: false, isOutgoing: false,
isEditable: false, isEditable: false,
@@ -22,8 +22,8 @@ enum RoomTimelineItemFixtures {
sender: .init(id: "", displayName: "Jacob"), sender: .init(id: "", displayName: "Jacob"),
content: .init(body: "That looks so good!"), content: .init(body: "That looks so good!"),
properties: RoomTimelineItemProperties(isEdited: true)), properties: RoomTimelineItemProperties(isEdited: true)),
TextRoomTimelineItem(id: .event(uniqueID: .init("RoomTimelineItemFixtures.default.1"), TextRoomTimelineItem(id: .event(uniqueID: .init("TimelineFixtures.default.1"),
eventOrTransactionID: .eventID("RoomTimelineItemFixtures.default.1")), eventOrTransactionID: .eventID("TimelineFixtures.default.1")),
timestamp: .mock, timestamp: .mock,
isOutgoing: false, isOutgoing: false,
isEditable: false, isEditable: false,
@@ -33,8 +33,8 @@ enum RoomTimelineItemFixtures {
properties: RoomTimelineItemProperties(reactions: [ properties: RoomTimelineItemProperties(reactions: [
AggregatedReaction(accountOwnerID: "me", key: "🙌", senders: [ReactionSender(id: "me", timestamp: Date())]) AggregatedReaction(accountOwnerID: "me", key: "🙌", senders: [ReactionSender(id: "me", timestamp: Date())])
])), ])),
TextRoomTimelineItem(id: .event(uniqueID: .init("RoomTimelineItemFixtures.default.2"), TextRoomTimelineItem(id: .event(uniqueID: .init("TimelineFixtures.default.2"),
eventOrTransactionID: .eventID("RoomTimelineItemFixtures.default.2")), eventOrTransactionID: .eventID("TimelineFixtures.default.2")),
timestamp: .mock, timestamp: .mock,
isOutgoing: false, isOutgoing: false,
isEditable: false, isEditable: false,
@@ -52,8 +52,8 @@ enum RoomTimelineItemFixtures {
]) ])
])), ])),
SeparatorRoomTimelineItem(id: .virtual(uniqueID: .init("Today")), timestamp: .mock), SeparatorRoomTimelineItem(id: .virtual(uniqueID: .init("Today")), timestamp: .mock),
TextRoomTimelineItem(id: .event(uniqueID: .init("RoomTimelineItemFixtures.default.3"), TextRoomTimelineItem(id: .event(uniqueID: .init("TimelineFixtures.default.3"),
eventOrTransactionID: .eventID("RoomTimelineItemFixtures.default.3")), eventOrTransactionID: .eventID("TimelineFixtures.default.3")),
timestamp: .mock, timestamp: .mock,
isOutgoing: false, isOutgoing: false,
isEditable: false, isEditable: false,
@@ -61,16 +61,16 @@ enum RoomTimelineItemFixtures {
sender: .init(id: "", displayName: "Helena"), sender: .init(id: "", displayName: "Helena"),
content: .init(body: "Wow, cool. Ok, lets go the usual place tomorrow?! Is that too soon? Here’s the menu, let me know what you want it’s on me!"), content: .init(body: "Wow, cool. Ok, lets go the usual place tomorrow?! Is that too soon? Here’s the menu, let me know what you want it’s on me!"),
properties: RoomTimelineItemProperties(orderedReadReceipts: [ReadReceipt(userID: "alice", formattedTimestamp: nil)])), properties: RoomTimelineItemProperties(orderedReadReceipts: [ReadReceipt(userID: "alice", formattedTimestamp: nil)])),
TextRoomTimelineItem(id: .event(uniqueID: .init("RoomTimelineItemFixtures.default.4"), TextRoomTimelineItem(id: .event(uniqueID: .init("TimelineFixtures.default.4"),
eventOrTransactionID: .eventID("RoomTimelineItemFixtures.default.4")), eventOrTransactionID: .eventID("TimelineFixtures.default.4")),
timestamp: .mock, timestamp: .mock,
isOutgoing: true, isOutgoing: true,
isEditable: true, isEditable: true,
canBeRepliedTo: true, canBeRepliedTo: true,
sender: .init(id: "", displayName: "Bob"), sender: .init(id: "", displayName: "Bob"),
content: .init(body: "And John's speech was amazing!")), content: .init(body: "And John's speech was amazing!")),
TextRoomTimelineItem(id: .event(uniqueID: .init("RoomTimelineItemFixtures.default.5"), TextRoomTimelineItem(id: .event(uniqueID: .init("TimelineFixtures.default.5"),
eventOrTransactionID: .eventID("RoomTimelineItemFixtures.default.5")), eventOrTransactionID: .eventID("TimelineFixtures.default.5")),
timestamp: .mock, timestamp: .mock,
isOutgoing: true, isOutgoing: true,
isEditable: true, isEditable: true,
@@ -82,8 +82,8 @@ enum RoomTimelineItemFixtures {
ReadReceipt(userID: "bob", formattedTimestamp: nil), ReadReceipt(userID: "bob", formattedTimestamp: nil),
ReadReceipt(userID: "charlie", formattedTimestamp: nil), ReadReceipt(userID: "charlie", formattedTimestamp: nil),
ReadReceipt(userID: "dan", formattedTimestamp: nil)])), ReadReceipt(userID: "dan", formattedTimestamp: nil)])),
TextRoomTimelineItem(id: .event(uniqueID: .init("RoomTimelineItemFixtures.default.6"), TextRoomTimelineItem(id: .event(uniqueID: .init("TimelineFixtures.default.6"),
eventOrTransactionID: .eventID("RoomTimelineItemFixtures.default.6")), eventOrTransactionID: .eventID("TimelineFixtures.default.6")),
timestamp: .mock, timestamp: .mock,
isOutgoing: false, isOutgoing: false,
isEditable: false, isEditable: false,
@@ -248,7 +248,7 @@ enum RoomTimelineItemFixtures {
// MARK: - Private helpers // MARK: - Private helpers
private extension RoomTimelineItemFixtures { private extension TimelineFixtures {
static let factory = RoomTimelineItemFactory(userID: "@alice:matrix.org", static let factory = RoomTimelineItemFactory(userID: "@alice:matrix.org",
attributedStringBuilder: AttributedStringBuilder(mentionBuilder: MentionBuilder()), attributedStringBuilder: AttributedStringBuilder(mentionBuilder: MentionBuilder()),
stateEventStringBuilder: RoomStateEventStringBuilder(userID: "@alice:matrix.org")) stateEventStringBuilder: RoomStateEventStringBuilder(userID: "@alice:matrix.org"))
@@ -273,7 +273,7 @@ extension TimelineItemProxy {
private extension TimelineItemProxy { private extension TimelineItemProxy {
func buildRoomTimelineItem() -> RoomTimelineItemProtocol { func buildRoomTimelineItem() -> RoomTimelineItemProtocol {
guard case .event(let eventProxy) = self, guard case .event(let eventProxy) = self,
let item = RoomTimelineItemFixtures.factory.buildTimelineItem(for: eventProxy, isDM: false) else { let item = TimelineFixtures.factory.buildTimelineItem(for: eventProxy, isDM: false) else {
fatalError() fatalError()
} }
@@ -309,7 +309,7 @@ class MockScreen: Identifiable {
return navigationStackCoordinator return navigationStackCoordinator
case .roomSmallTimeline: case .roomSmallTimeline:
let navigationStackCoordinator = NavigationStackCoordinator() let navigationStackCoordinator = NavigationStackCoordinator()
let timelineController = TimelineControllerMock(.init(timelineItems: RoomTimelineItemFixtures.smallChunk)) let timelineController = TimelineControllerMock(.init(timelineItems: TimelineFixtures.smallChunk))
let parameters = RoomScreenCoordinatorParameters(userSession: UserSessionMock(.init()), let parameters = RoomScreenCoordinatorParameters(userSession: UserSessionMock(.init()),
roomProxy: JoinedRoomProxyMock(.init(name: "New room", avatarURL: .mockMXCAvatar)), roomProxy: JoinedRoomProxyMock(.init(name: "New room", avatarURL: .mockMXCAvatar)),
timelineController: timelineController, timelineController: timelineController,
@@ -330,7 +330,7 @@ class MockScreen: Identifiable {
return navigationStackCoordinator return navigationStackCoordinator
case .roomSmallTimelineWithReactions: case .roomSmallTimelineWithReactions:
let navigationStackCoordinator = NavigationStackCoordinator() let navigationStackCoordinator = NavigationStackCoordinator()
let timelineController = TimelineControllerMock(.init(timelineItems: RoomTimelineItemFixtures.default)) let timelineController = TimelineControllerMock(.init(timelineItems: TimelineFixtures.default))
let parameters = RoomScreenCoordinatorParameters(userSession: UserSessionMock(.init()), let parameters = RoomScreenCoordinatorParameters(userSession: UserSessionMock(.init()),
roomProxy: JoinedRoomProxyMock(.init(name: "New room", avatarURL: .mockMXCAvatar)), roomProxy: JoinedRoomProxyMock(.init(name: "New room", avatarURL: .mockMXCAvatar)),
timelineController: timelineController, timelineController: timelineController,
@@ -350,7 +350,7 @@ class MockScreen: Identifiable {
return navigationStackCoordinator return navigationStackCoordinator
case .roomSmallTimelineWithReadReceipts: case .roomSmallTimelineWithReadReceipts:
let navigationStackCoordinator = NavigationStackCoordinator() let navigationStackCoordinator = NavigationStackCoordinator()
let timelineController = TimelineControllerMock(.init(timelineItems: RoomTimelineItemFixtures.smallChunkWithReadReceipts)) let timelineController = TimelineControllerMock(.init(timelineItems: TimelineFixtures.smallChunkWithReadReceipts))
let parameters = RoomScreenCoordinatorParameters(userSession: UserSessionMock(.init()), let parameters = RoomScreenCoordinatorParameters(userSession: UserSessionMock(.init()),
roomProxy: JoinedRoomProxyMock(.init(name: "New room", avatarURL: .mockMXCAvatar)), roomProxy: JoinedRoomProxyMock(.init(name: "New room", avatarURL: .mockMXCAvatar)),
timelineController: timelineController, timelineController: timelineController,
@@ -371,10 +371,10 @@ class MockScreen: Identifiable {
case .roomSmallTimelineIncomingAndSmallPagination: case .roomSmallTimelineIncomingAndSmallPagination:
let navigationStackCoordinator = NavigationStackCoordinator() let navigationStackCoordinator = NavigationStackCoordinator()
let itemProvider = SignallingTimelineItemProviderMock(itemProxies: RoomTimelineItemFixtures.smallChunkProxies, let itemProvider = SignallingTimelineItemProviderMock(itemProxies: TimelineFixtures.smallChunkProxies,
listenForSignals: true) listenForSignals: true)
itemProvider.backPaginationResponses = [RoomTimelineItemFixtures.singleMessageChunkProxies] itemProvider.backPaginationResponses = [TimelineFixtures.singleMessageChunkProxies]
itemProvider.incomingItems = [RoomTimelineItemFixtures.incomingMessageProxy] itemProvider.incomingItems = [TimelineFixtures.incomingMessageProxy]
let roomProxy = JoinedRoomProxyMock(.init(name: "Small timeline", avatarURL: .mockMXCAvatar)) let roomProxy = JoinedRoomProxyMock(.init(name: "Small timeline", avatarURL: .mockMXCAvatar))
let timelineController = makeSignallingTimelineController(itemProvider: itemProvider, roomProxy: roomProxy) let timelineController = makeSignallingTimelineController(itemProvider: itemProvider, roomProxy: roomProxy)
let parameters = RoomScreenCoordinatorParameters(userSession: UserSessionMock(.init()), let parameters = RoomScreenCoordinatorParameters(userSession: UserSessionMock(.init()),
@@ -398,9 +398,9 @@ class MockScreen: Identifiable {
case .roomSmallTimelineLargePagination: case .roomSmallTimelineLargePagination:
let navigationStackCoordinator = NavigationStackCoordinator() let navigationStackCoordinator = NavigationStackCoordinator()
let itemProvider = SignallingTimelineItemProviderMock(itemProxies: RoomTimelineItemFixtures.smallChunkProxies, let itemProvider = SignallingTimelineItemProviderMock(itemProxies: TimelineFixtures.smallChunkProxies,
listenForSignals: true) listenForSignals: true)
itemProvider.backPaginationResponses = [RoomTimelineItemFixtures.largeChunkProxies] itemProvider.backPaginationResponses = [TimelineFixtures.largeChunkProxies]
let roomProxy = JoinedRoomProxyMock(.init(name: "Small timeline, paginating", avatarURL: .mockMXCAvatar)) let roomProxy = JoinedRoomProxyMock(.init(name: "Small timeline, paginating", avatarURL: .mockMXCAvatar))
let timelineController = makeSignallingTimelineController(itemProvider: itemProvider, roomProxy: roomProxy) let timelineController = makeSignallingTimelineController(itemProvider: itemProvider, roomProxy: roomProxy)
let parameters = RoomScreenCoordinatorParameters(userSession: UserSessionMock(.init()), let parameters = RoomScreenCoordinatorParameters(userSession: UserSessionMock(.init()),
@@ -423,9 +423,9 @@ class MockScreen: Identifiable {
case .roomLayoutTop: case .roomLayoutTop:
let navigationStackCoordinator = NavigationStackCoordinator() let navigationStackCoordinator = NavigationStackCoordinator()
let itemProvider = SignallingTimelineItemProviderMock(itemProxies: RoomTimelineItemFixtures.largeChunkProxies, let itemProvider = SignallingTimelineItemProviderMock(itemProxies: TimelineFixtures.largeChunkProxies,
listenForSignals: true) listenForSignals: true)
itemProvider.backPaginationResponses = [RoomTimelineItemFixtures.largeChunkProxies] itemProvider.backPaginationResponses = [TimelineFixtures.largeChunkProxies]
let roomProxy = JoinedRoomProxyMock(.init(name: "Large timeline", avatarURL: .mockMXCAvatar)) let roomProxy = JoinedRoomProxyMock(.init(name: "Large timeline", avatarURL: .mockMXCAvatar))
let timelineController = makeSignallingTimelineController(itemProvider: itemProvider, roomProxy: roomProxy) let timelineController = makeSignallingTimelineController(itemProvider: itemProvider, roomProxy: roomProxy)
let parameters = RoomScreenCoordinatorParameters(userSession: UserSessionMock(.init()), let parameters = RoomScreenCoordinatorParameters(userSession: UserSessionMock(.init()),
@@ -449,10 +449,10 @@ class MockScreen: Identifiable {
case .roomLayoutMiddle: case .roomLayoutMiddle:
let navigationStackCoordinator = NavigationStackCoordinator() let navigationStackCoordinator = NavigationStackCoordinator()
let itemProvider = SignallingTimelineItemProviderMock(itemProxies: RoomTimelineItemFixtures.largeChunkProxies, let itemProvider = SignallingTimelineItemProviderMock(itemProxies: TimelineFixtures.largeChunkProxies,
listenForSignals: true) listenForSignals: true)
itemProvider.backPaginationResponses = [RoomTimelineItemFixtures.largeChunkProxies] itemProvider.backPaginationResponses = [TimelineFixtures.largeChunkProxies]
itemProvider.incomingItems = [RoomTimelineItemFixtures.incomingMessageProxy] itemProvider.incomingItems = [TimelineFixtures.incomingMessageProxy]
let roomProxy = JoinedRoomProxyMock(.init(name: "Large timeline", avatarURL: .mockMXCAvatar)) let roomProxy = JoinedRoomProxyMock(.init(name: "Large timeline", avatarURL: .mockMXCAvatar))
let timelineController = makeSignallingTimelineController(itemProvider: itemProvider, roomProxy: roomProxy) let timelineController = makeSignallingTimelineController(itemProvider: itemProvider, roomProxy: roomProxy)
let parameters = RoomScreenCoordinatorParameters(userSession: UserSessionMock(.init()), let parameters = RoomScreenCoordinatorParameters(userSession: UserSessionMock(.init()),
@@ -476,9 +476,9 @@ class MockScreen: Identifiable {
case .roomLayoutBottom: case .roomLayoutBottom:
let navigationStackCoordinator = NavigationStackCoordinator() let navigationStackCoordinator = NavigationStackCoordinator()
let itemProvider = SignallingTimelineItemProviderMock(itemProxies: RoomTimelineItemFixtures.largeChunkProxies, let itemProvider = SignallingTimelineItemProviderMock(itemProxies: TimelineFixtures.largeChunkProxies,
listenForSignals: true) listenForSignals: true)
itemProvider.incomingItems = [RoomTimelineItemFixtures.incomingMessageProxy] itemProvider.incomingItems = [TimelineFixtures.incomingMessageProxy]
let roomProxy = JoinedRoomProxyMock(.init(name: "Large timeline", avatarURL: .mockMXCAvatar)) let roomProxy = JoinedRoomProxyMock(.init(name: "Large timeline", avatarURL: .mockMXCAvatar))
let timelineController = makeSignallingTimelineController(itemProvider: itemProvider, roomProxy: roomProxy) let timelineController = makeSignallingTimelineController(itemProvider: itemProvider, roomProxy: roomProxy)
let parameters = RoomScreenCoordinatorParameters(userSession: UserSessionMock(.init()), let parameters = RoomScreenCoordinatorParameters(userSession: UserSessionMock(.init()),
@@ -502,7 +502,7 @@ class MockScreen: Identifiable {
case .roomLayoutHighlight: case .roomLayoutHighlight:
let navigationStackCoordinator = NavigationStackCoordinator() let navigationStackCoordinator = NavigationStackCoordinator()
let timelineController = TimelineControllerMock(.init(timelineItems: RoomTimelineItemFixtures.permalinkChunk)) let timelineController = TimelineControllerMock(.init(timelineItems: TimelineFixtures.permalinkChunk))
let parameters = RoomScreenCoordinatorParameters(userSession: UserSessionMock(.init()), let parameters = RoomScreenCoordinatorParameters(userSession: UserSessionMock(.init()),
roomProxy: JoinedRoomProxyMock(.init(name: "Timeline highlight", avatarURL: .mockMXCAvatar)), roomProxy: JoinedRoomProxyMock(.init(name: "Timeline highlight", avatarURL: .mockMXCAvatar)),
timelineController: timelineController, timelineController: timelineController,
@@ -537,7 +537,7 @@ class MockScreen: Identifiable {
case .roomWithDisclosedPolls: case .roomWithDisclosedPolls:
let navigationStackCoordinator = NavigationStackCoordinator() let navigationStackCoordinator = NavigationStackCoordinator()
let timelineController = TimelineControllerMock(.init(timelineItems: RoomTimelineItemFixtures.disclosedPolls)) let timelineController = TimelineControllerMock(.init(timelineItems: TimelineFixtures.disclosedPolls))
let parameters = RoomScreenCoordinatorParameters(userSession: UserSessionMock(.init()), let parameters = RoomScreenCoordinatorParameters(userSession: UserSessionMock(.init()),
roomProxy: JoinedRoomProxyMock(.init(name: "Polls timeline", avatarURL: .mockMXCAvatar)), roomProxy: JoinedRoomProxyMock(.init(name: "Polls timeline", avatarURL: .mockMXCAvatar)),
timelineController: timelineController, timelineController: timelineController,
@@ -559,7 +559,7 @@ class MockScreen: Identifiable {
case .roomWithUndisclosedPolls: case .roomWithUndisclosedPolls:
let navigationStackCoordinator = NavigationStackCoordinator() let navigationStackCoordinator = NavigationStackCoordinator()
let timelineController = TimelineControllerMock(.init(timelineItems: RoomTimelineItemFixtures.undisclosedPolls)) let timelineController = TimelineControllerMock(.init(timelineItems: TimelineFixtures.undisclosedPolls))
let parameters = RoomScreenCoordinatorParameters(userSession: UserSessionMock(.init()), let parameters = RoomScreenCoordinatorParameters(userSession: UserSessionMock(.init()),
roomProxy: JoinedRoomProxyMock(.init(name: "Polls timeline", avatarURL: .mockMXCAvatar)), roomProxy: JoinedRoomProxyMock(.init(name: "Polls timeline", avatarURL: .mockMXCAvatar)),
timelineController: timelineController, timelineController: timelineController,
@@ -581,7 +581,7 @@ class MockScreen: Identifiable {
case .roomWithOutgoingPolls: case .roomWithOutgoingPolls:
let navigationStackCoordinator = NavigationStackCoordinator() let navigationStackCoordinator = NavigationStackCoordinator()
let timelineController = TimelineControllerMock(.init(timelineItems: RoomTimelineItemFixtures.outgoingPolls)) let timelineController = TimelineControllerMock(.init(timelineItems: TimelineFixtures.outgoingPolls))
let parameters = RoomScreenCoordinatorParameters(userSession: UserSessionMock(.init()), let parameters = RoomScreenCoordinatorParameters(userSession: UserSessionMock(.init()),
roomProxy: JoinedRoomProxyMock(.init(name: "Polls timeline", avatarURL: .mockMXCAvatar)), roomProxy: JoinedRoomProxyMock(.init(name: "Polls timeline", avatarURL: .mockMXCAvatar)),
timelineController: timelineController, timelineController: timelineController,
@@ -635,7 +635,7 @@ class MockScreen: Identifiable {
let appMediator = AppMediatorMock(.init()) let appMediator = AppMediatorMock(.init())
appMediator.windowManager = windowManager appMediator.windowManager = windowManager
let itemProvider = SignallingTimelineItemProviderMock(itemProxies: RoomTimelineItemFixtures.largeChunkProxies) let itemProvider = SignallingTimelineItemProviderMock(itemProxies: TimelineFixtures.largeChunkProxies)
let timelineController = makeSignallingTimelineController(itemProvider: itemProvider, let timelineController = makeSignallingTimelineController(itemProvider: itemProvider,
roomProxy: JoinedRoomProxyMock(.init())) roomProxy: JoinedRoomProxyMock(.init()))
@@ -239,7 +239,7 @@ struct TimelineMediaPreviewDataSourceTests {
// MARK: Helpers // MARK: Helpers
func newChunk() -> [EventBasedMessageTimelineItemProtocol] { func newChunk() -> [EventBasedMessageTimelineItemProtocol] {
RoomTimelineItemFixtures.mediaChunk TimelineFixtures.mediaChunk
.compactMap { $0 as? EventBasedMessageTimelineItemProtocol } .compactMap { $0 as? EventBasedMessageTimelineItemProtocol }
.filter(\.supportsMediaCaption) // Voice messages can't be previewed (and don't support captions). .filter(\.supportsMediaCaption) // Voice messages can't be previewed (and don't support captions).
} }