diff --git a/ElementX/Sources/Mocks/TimelineControllerFactoryMock.swift b/ElementX/Sources/Mocks/TimelineControllerFactoryMock.swift index a39705179..083b1dc5c 100644 --- a/ElementX/Sources/Mocks/TimelineControllerFactoryMock.swift +++ b/ElementX/Sources/Mocks/TimelineControllerFactoryMock.swift @@ -17,18 +17,19 @@ extension TimelineControllerFactoryMock { convenience init(_ configuration: Configuration) { self.init() - buildTimelineControllerRoomProxyInitialFocussedEventIDTimelineItemFactoryMediaProviderReturnValue = configuration.timelineController ?? { - let timelineController = MockTimelineController() - timelineController.timelineItems = RoomTimelineItemFixtures.largeChunk - return timelineController - }() + buildTimelineControllerRoomProxyInitialFocussedEventIDTimelineItemFactoryMediaProviderClosure = { _, _, _, _ in + if let timelineController = configuration.threadTimelineController { + return timelineController + } else { + return MockTimelineController(timelineItems: RoomTimelineItemFixtures.largeChunk) + } + } buildThreadTimelineControllerThreadRootEventIDInitialFocussedEventIDRoomProxyTimelineItemFactoryMediaProviderClosure = { threadRootEventID, _, _, _, _ in - if let threadTimelineController = configuration.threadTimelineController { - return .success(threadTimelineController) + if let timelineController = configuration.threadTimelineController { + return .success(timelineController) } else { - let timelineController = MockTimelineController(timelineKind: .thread(rootEventID: threadRootEventID)) - timelineController.timelineItems = RoomTimelineItemFixtures.largeChunk + let timelineController = MockTimelineController(timelineKind: .thread(rootEventID: threadRootEventID), timelineItems: RoomTimelineItemFixtures.largeChunk) return .success(timelineController) } } diff --git a/ElementX/Sources/Screens/FilePreviewScreen/TimelineMediaPreviewModifier.swift b/ElementX/Sources/Screens/FilePreviewScreen/TimelineMediaPreviewModifier.swift index ad547b0a9..2024f59b0 100644 --- a/ElementX/Sources/Screens/FilePreviewScreen/TimelineMediaPreviewModifier.swift +++ b/ElementX/Sources/Screens/FilePreviewScreen/TimelineMediaPreviewModifier.swift @@ -163,8 +163,7 @@ struct TimelineMediaPreviewModifier_Previews: PreviewProvider { thumbnailSource: nil, contentType: .pdf)) - let timelineController = MockTimelineController(timelineKind: .media(.mediaFilesScreen)) - timelineController.timelineItems = [item] + let timelineController = MockTimelineController(timelineKind: .media(.mediaFilesScreen), timelineItems: [item]) let mediaProvider = MediaProviderMock(.init()) diff --git a/ElementX/Sources/Screens/FilePreviewScreen/View/TimelineMediaPreviewDetailsView.swift b/ElementX/Sources/Screens/FilePreviewScreen/View/TimelineMediaPreviewDetailsView.swift index 8505da802..e61ca3de8 100644 --- a/ElementX/Sources/Screens/FilePreviewScreen/View/TimelineMediaPreviewDetailsView.swift +++ b/ElementX/Sources/Screens/FilePreviewScreen/View/TimelineMediaPreviewDetailsView.swift @@ -224,8 +224,7 @@ struct TimelineMediaPreviewDetailsView_Previews: PreviewProvider, TestablePrevie contentType: contentType)) let timelineKind = TimelineKind.media(isPresentedOnRoomScreen ? .roomScreenLive : .mediaFilesScreen) - let timelineController = MockTimelineController(timelineKind: timelineKind) - timelineController.timelineItems = [item] + let timelineController = MockTimelineController(timelineKind: timelineKind, timelineItems: [item]) let viewModel = TimelineMediaPreviewViewModel(initialItem: item, timelineViewModel: TimelineViewModel.mock(timelineKind: timelineKind, diff --git a/ElementX/Sources/Screens/FilePreviewScreen/View/TimelineMediaPreviewRedactConfirmationView.swift b/ElementX/Sources/Screens/FilePreviewScreen/View/TimelineMediaPreviewRedactConfirmationView.swift index b52a9213e..14819922a 100644 --- a/ElementX/Sources/Screens/FilePreviewScreen/View/TimelineMediaPreviewRedactConfirmationView.swift +++ b/ElementX/Sources/Screens/FilePreviewScreen/View/TimelineMediaPreviewRedactConfirmationView.swift @@ -142,8 +142,7 @@ struct TimelineMediaPreviewRedactConfirmationView_Previews: PreviewProvider, Tes thumbnailInfo: .mockThumbnail, contentType: contentType)) - let timelineController = MockTimelineController(timelineKind: .media(.mediaFilesScreen)) - timelineController.timelineItems = [item] + let timelineController = MockTimelineController(timelineKind: .media(.mediaFilesScreen), timelineItems: [item]) return TimelineMediaPreviewViewModel(initialItem: item, timelineViewModel: TimelineViewModel.mock(timelineKind: timelineController.timelineKind, timelineController: timelineController), diff --git a/ElementX/Sources/Screens/PinnedEventsTimelineScreen/View/PinnedEventsTimelineScreen.swift b/ElementX/Sources/Screens/PinnedEventsTimelineScreen/View/PinnedEventsTimelineScreen.swift index 40b244cfd..bc81378f1 100644 --- a/ElementX/Sources/Screens/PinnedEventsTimelineScreen/View/PinnedEventsTimelineScreen.swift +++ b/ElementX/Sources/Screens/PinnedEventsTimelineScreen/View/PinnedEventsTimelineScreen.swift @@ -72,8 +72,7 @@ struct PinnedEventsTimelineScreen_Previews: PreviewProvider, TestablePreview { analyticsService: AnalyticsServiceMock(.init())) static let emptyTimelineViewModel: TimelineViewModel = { - let timelineController = MockTimelineController(timelineKind: .pinned) - timelineController.timelineItems = [] + let timelineController = MockTimelineController(timelineKind: .pinned, timelineItems: []) let appSettings = AppSettings.volatile() diff --git a/ElementX/Sources/Screens/RoomPollsHistoryScreen/View/RoomPollsHistoryScreen.swift b/ElementX/Sources/Screens/RoomPollsHistoryScreen/View/RoomPollsHistoryScreen.swift index 9cbc6a9e1..ee7f18523 100644 --- a/ElementX/Sources/Screens/RoomPollsHistoryScreen/View/RoomPollsHistoryScreen.swift +++ b/ElementX/Sources/Screens/RoomPollsHistoryScreen/View/RoomPollsHistoryScreen.swift @@ -115,8 +115,7 @@ private extension DateFormatter { struct RoomPollsHistoryScreen_Previews: PreviewProvider, TestablePreview { static let viewModelEmpty: RoomPollsHistoryScreenViewModel = { - let timelineController = MockTimelineController() - timelineController.timelineItems = [] + let timelineController = MockTimelineController(timelineItems: []) let roomProxyMockConfiguration = JoinedRoomProxyMockConfiguration(name: "Polls") return RoomPollsHistoryScreenViewModel(pollInteractionHandler: PollInteractionHandlerMock(), timelineController: timelineController, @@ -124,20 +123,20 @@ struct RoomPollsHistoryScreen_Previews: PreviewProvider, TestablePreview { }() static let viewModel: RoomPollsHistoryScreenViewModel = { - let timelineController = MockTimelineController() - let polls = [PollRoomTimelineItem.mock(poll: .disclosed(createdByAccountOwner: false)), PollRoomTimelineItem.mock(poll: .disclosed(createdByAccountOwner: true)), PollRoomTimelineItem.mock(poll: .emptyDisclosed, isEditable: true)] - timelineController.timelineItems = polls - + var timelineItemsTimestamps = [TimelineItemIdentifier: Date]() for i in 0..() + private(set) var timelineItems: [RoomTimelineItemProtocol] = RoomTimelineItemFixtures.default { + didSet { + callbacks.send(.updatedTimelineItems(timelineItems: timelineItems, isSwitchingTimelines: false)) + } + } + + private let timelineItemsTimestamps: [TimelineItemIdentifier: Date] + + /// An array of timeline item arrays that will be inserted in order for each back pagination request. + var backPaginationResponses: [[RoomTimelineItemProtocol]] = [] + var paginationState: TimelinePaginationState = .initial { didSet { callbacks.send(.paginationState(paginationState)) } } - var timelineItems: [RoomTimelineItemProtocol] = RoomTimelineItemFixtures.default { - didSet { - callbacks.send(.updatedTimelineItems(timelineItems: timelineItems, isSwitchingTimelines: false)) - } - } - - var timelineItemsTimestamp: [TimelineItemIdentifier: Date] = [:] - static var mediaGallery: MockTimelineController { MockTimelineController(timelineKind: .media(.mediaFilesScreen), timelineItems: (0..<5).reduce([]) { partialResult, _ in partialResult + [RoomTimelineItemFixtures.separator] + RoomTimelineItemFixtures.mediaChunk @@ -56,12 +56,16 @@ class MockTimelineController: TimelineControllerProtocol { return mock } - init(timelineKind: TimelineKind = .live, + init(roomProxy: JoinedRoomProxyProtocol? = nil, + timelineKind: TimelineKind = .live, timelineItems: [RoomTimelineItemProtocol] = RoomTimelineItemFixtures.default, - timelineProxy: TimelineProxyProtocol? = nil) { + timelineProxy: TimelineProxyProtocol? = nil, + timelineItemsTimestamps: [TimelineItemIdentifier: Date] = [TimelineItemIdentifier: Date]()) { + self.roomProxy = roomProxy self.timelineKind = timelineKind self.timelineItems = timelineItems self.timelineProxy = timelineProxy + self.timelineItemsTimestamps = timelineItemsTimestamps callbacks.send(.paginationState(paginationState)) callbacks.send(.isLive(true)) @@ -169,7 +173,7 @@ class MockTimelineController: TimelineControllerProtocol { } func eventTimestamp(for itemID: TimelineItemIdentifier) -> Date? { - timelineItemsTimestamp[itemID] ?? .now + timelineItemsTimestamps[itemID] ?? .now } // MARK: - Sending diff --git a/ElementX/Sources/UITests/UITestsAppCoordinator.swift b/ElementX/Sources/UITests/UITestsAppCoordinator.swift index 71ef1aa5c..6c371430a 100644 --- a/ElementX/Sources/UITests/UITestsAppCoordinator.swift +++ b/ElementX/Sources/UITests/UITestsAppCoordinator.swift @@ -308,8 +308,7 @@ class MockScreen: Identifiable { return navigationStackCoordinator case .roomSmallTimeline: let navigationStackCoordinator = NavigationStackCoordinator() - let timelineController = MockTimelineController() - timelineController.timelineItems = RoomTimelineItemFixtures.smallChunk + let timelineController = MockTimelineController(timelineItems: RoomTimelineItemFixtures.smallChunk) let parameters = RoomScreenCoordinatorParameters(userSession: UserSessionMock(.init()), roomProxy: JoinedRoomProxyMock(.init(name: "New room", avatarURL: .mockMXCAvatar)), timelineController: timelineController, @@ -330,8 +329,7 @@ class MockScreen: Identifiable { return navigationStackCoordinator case .roomSmallTimelineWithReactions: let navigationStackCoordinator = NavigationStackCoordinator() - let timelineController = MockTimelineController() - timelineController.timelineItems = RoomTimelineItemFixtures.default + let timelineController = MockTimelineController(timelineItems: RoomTimelineItemFixtures.default) let parameters = RoomScreenCoordinatorParameters(userSession: UserSessionMock(.init()), roomProxy: JoinedRoomProxyMock(.init(name: "New room", avatarURL: .mockMXCAvatar)), timelineController: timelineController, @@ -351,8 +349,7 @@ class MockScreen: Identifiable { return navigationStackCoordinator case .roomSmallTimelineWithReadReceipts: let navigationStackCoordinator = NavigationStackCoordinator() - let timelineController = MockTimelineController() - timelineController.timelineItems = RoomTimelineItemFixtures.smallChunkWithReadReceipts + let timelineController = MockTimelineController(timelineItems: RoomTimelineItemFixtures.smallChunkWithReadReceipts) let parameters = RoomScreenCoordinatorParameters(userSession: UserSessionMock(.init()), roomProxy: JoinedRoomProxyMock(.init(name: "New room", avatarURL: .mockMXCAvatar)), timelineController: timelineController, @@ -504,8 +501,7 @@ class MockScreen: Identifiable { case .roomLayoutHighlight: let navigationStackCoordinator = NavigationStackCoordinator() - let timelineController = MockTimelineController() - timelineController.timelineItems = RoomTimelineItemFixtures.permalinkChunk + let timelineController = MockTimelineController(timelineItems: RoomTimelineItemFixtures.permalinkChunk) let parameters = RoomScreenCoordinatorParameters(userSession: UserSessionMock(.init()), roomProxy: JoinedRoomProxyMock(.init(name: "Timeline highlight", avatarURL: .mockMXCAvatar)), timelineController: timelineController, @@ -540,8 +536,7 @@ class MockScreen: Identifiable { case .roomWithDisclosedPolls: let navigationStackCoordinator = NavigationStackCoordinator() - let timelineController = MockTimelineController() - timelineController.timelineItems = RoomTimelineItemFixtures.disclosedPolls + let timelineController = MockTimelineController(timelineItems: RoomTimelineItemFixtures.disclosedPolls) let parameters = RoomScreenCoordinatorParameters(userSession: UserSessionMock(.init()), roomProxy: JoinedRoomProxyMock(.init(name: "Polls timeline", avatarURL: .mockMXCAvatar)), timelineController: timelineController, @@ -563,8 +558,7 @@ class MockScreen: Identifiable { case .roomWithUndisclosedPolls: let navigationStackCoordinator = NavigationStackCoordinator() - let timelineController = MockTimelineController() - timelineController.timelineItems = RoomTimelineItemFixtures.undisclosedPolls + let timelineController = MockTimelineController(timelineItems: RoomTimelineItemFixtures.undisclosedPolls) let parameters = RoomScreenCoordinatorParameters(userSession: UserSessionMock(.init()), roomProxy: JoinedRoomProxyMock(.init(name: "Polls timeline", avatarURL: .mockMXCAvatar)), timelineController: timelineController, @@ -586,8 +580,7 @@ class MockScreen: Identifiable { case .roomWithOutgoingPolls: let navigationStackCoordinator = NavigationStackCoordinator() - let timelineController = MockTimelineController() - timelineController.timelineItems = RoomTimelineItemFixtures.outgoingPolls + let timelineController = MockTimelineController(timelineItems: RoomTimelineItemFixtures.outgoingPolls) let parameters = RoomScreenCoordinatorParameters(userSession: UserSessionMock(.init()), roomProxy: JoinedRoomProxyMock(.init(name: "Polls timeline", avatarURL: .mockMXCAvatar)), timelineController: timelineController, diff --git a/UnitTests/Sources/PillContextTests.swift b/UnitTests/Sources/PillContextTests.swift index 4e3a18dc9..04d0bcacf 100644 --- a/UnitTests/Sources/PillContextTests.swift +++ b/UnitTests/Sources/PillContextTests.swift @@ -81,8 +81,7 @@ struct PillContextTests { let id = "test_room" let displayName = "Test" let proxyMock = JoinedRoomProxyMock(.init(id: id, name: displayName, avatarURL: avatarURL)) - let mockController = MockTimelineController() - mockController.roomProxy = proxyMock + let mockController = MockTimelineController(roomProxy: proxyMock) let mock = TimelineViewModel(roomProxy: proxyMock, timelineController: mockController, userSession: UserSessionMock(.init()), @@ -106,10 +105,9 @@ struct PillContextTests { let userIndicatorController = UserIndicatorControllerMock() let proxyMock = JoinedRoomProxyMock(.init()) - let mockController = MockTimelineController() + let mockController = MockTimelineController(roomProxy: proxyMock) let clientMock = ClientProxyMock(.init()) clientMock.roomSummaryForIdentifierReturnValue = .mock(id: "1", name: "Foundation 🔭🪐🌌") - mockController.roomProxy = proxyMock let mock = TimelineViewModel(roomProxy: proxyMock, timelineController: mockController, userSession: UserSessionMock(.init(clientProxy: clientMock)), @@ -134,8 +132,7 @@ struct PillContextTests { let userIndicatorController = UserIndicatorControllerMock() let proxyMock = JoinedRoomProxyMock(.init()) - let mockController = MockTimelineController() - mockController.roomProxy = proxyMock + let mockController = MockTimelineController(roomProxy: proxyMock) let mock = TimelineViewModel(roomProxy: proxyMock, timelineController: mockController, userSession: UserSessionMock(.init()), @@ -160,8 +157,7 @@ struct PillContextTests { let userIndicatorController = UserIndicatorControllerMock() let proxyMock = JoinedRoomProxyMock(.init()) - let mockController = MockTimelineController() - mockController.roomProxy = proxyMock + let mockController = MockTimelineController(roomProxy: proxyMock) let clientMock = ClientProxyMock(.init()) clientMock.roomSummaryForAliasReturnValue = .mock(id: "2", name: "Foundation and Empire", @@ -190,8 +186,7 @@ struct PillContextTests { let userIndicatorController = UserIndicatorControllerMock() let proxyMock = JoinedRoomProxyMock(.init()) - let mockController = MockTimelineController() - mockController.roomProxy = proxyMock + let mockController = MockTimelineController(roomProxy: proxyMock) let mock = TimelineViewModel(roomProxy: proxyMock, timelineController: mockController, userSession: UserSessionMock(.init()), @@ -216,8 +211,7 @@ struct PillContextTests { let userIndicatorController = UserIndicatorControllerMock() let proxyMock = JoinedRoomProxyMock(.init()) - let mockController = MockTimelineController() - mockController.roomProxy = proxyMock + let mockController = MockTimelineController(roomProxy: proxyMock) let clientMock = ClientProxyMock(.init()) clientMock.roomSummaryForIdentifierReturnValue = .mock(id: "1", name: "Foundation 🔭🪐🌌") let mock = TimelineViewModel(roomProxy: proxyMock, @@ -244,8 +238,7 @@ struct PillContextTests { let userIndicatorController = UserIndicatorControllerMock() let proxyMock = JoinedRoomProxyMock(.init()) - let mockController = MockTimelineController() - mockController.roomProxy = proxyMock + let mockController = MockTimelineController(roomProxy: proxyMock) let mock = TimelineViewModel(roomProxy: proxyMock, timelineController: mockController, userSession: UserSessionMock(.init()), @@ -270,8 +263,7 @@ struct PillContextTests { let userIndicatorController = UserIndicatorControllerMock() let proxyMock = JoinedRoomProxyMock(.init()) - let mockController = MockTimelineController() - mockController.roomProxy = proxyMock + let mockController = MockTimelineController(roomProxy: proxyMock) let clientMock = ClientProxyMock(.init()) clientMock.roomSummaryForAliasReturnValue = .mock(id: "2", name: "Foundation and Empire", @@ -300,8 +292,7 @@ struct PillContextTests { let userIndicatorController = UserIndicatorControllerMock() let proxyMock = JoinedRoomProxyMock(.init()) - let mockController = MockTimelineController() - mockController.roomProxy = proxyMock + let mockController = MockTimelineController(roomProxy: proxyMock) let mock = TimelineViewModel(roomProxy: proxyMock, timelineController: mockController, userSession: UserSessionMock(.init()), diff --git a/UnitTests/Sources/TimelineMediaPreviewViewModelTests.swift b/UnitTests/Sources/TimelineMediaPreviewViewModelTests.swift index faeca611c..12a05ab50 100644 --- a/UnitTests/Sources/TimelineMediaPreviewViewModelTests.swift +++ b/UnitTests/Sources/TimelineMediaPreviewViewModelTests.swift @@ -292,8 +292,7 @@ struct TimelineMediaPreviewViewModelTests { private mutating func setupViewModel(initialItemIndex: Int = 0, photoLibraryAuthorizationDenied: Bool = false) { let initialItems = makeItems() - timelineController = MockTimelineController(timelineKind: .media(.mediaFilesScreen)) - timelineController.timelineItems = initialItems + timelineController = MockTimelineController(timelineKind: .media(.mediaFilesScreen), timelineItems: initialItems) mediaProvider = MediaProviderMock(.init()) photoLibraryManager = PhotoLibraryManagerMock(.init(authorizationDenied: photoLibraryAuthorizationDenied)) diff --git a/UnitTests/Sources/TimelineViewModelTests.swift b/UnitTests/Sources/TimelineViewModelTests.swift index d7f4e1067..f38c65bc3 100644 --- a/UnitTests/Sources/TimelineViewModelTests.swift +++ b/UnitTests/Sources/TimelineViewModelTests.swift @@ -35,8 +35,7 @@ final class TimelineViewModelTests { ] // When showing them in a timeline. - let timelineController = MockTimelineController() - timelineController.timelineItems = items + let timelineController = MockTimelineController(timelineItems: items) let viewModel = makeViewModel(timelineController: timelineController) // Then the messages should be grouped together. @@ -64,8 +63,7 @@ final class TimelineViewModelTests { ] // When showing them in a timeline. - let timelineController = MockTimelineController() - timelineController.timelineItems = items + let timelineController = MockTimelineController(timelineItems: items) let viewModel = makeViewModel(timelineController: timelineController) // Then the messages should be grouped by sender. @@ -91,8 +89,7 @@ final class TimelineViewModelTests { ] // When showing them in a timeline. - let timelineController = MockTimelineController() - timelineController.timelineItems = items + let timelineController = MockTimelineController(timelineItems: items) let viewModel = makeViewModel(timelineController: timelineController) // Then the first message should not be grouped but the other two should. @@ -115,8 +112,7 @@ final class TimelineViewModelTests { ] // When showing them in a timeline. - let timelineController = MockTimelineController() - timelineController.timelineItems = items + let timelineController = MockTimelineController(timelineItems: items) let viewModel = makeViewModel(timelineController: timelineController) // Then the first and second messages should be grouped and the last one should not. @@ -139,8 +135,7 @@ final class TimelineViewModelTests { ] // When showing them in a timeline. - let timelineController = MockTimelineController() - timelineController.timelineItems = items + let timelineController = MockTimelineController(timelineItems: items) let viewModel = makeViewModel(timelineController: timelineController) // Then the messages should be grouped together. @@ -157,8 +152,7 @@ final class TimelineViewModelTests { let items = [TextRoomTimelineItem(eventID: "t1"), TextRoomTimelineItem(eventID: "t2"), TextRoomTimelineItem(eventID: "t3")] - let timelineController = MockTimelineController() - timelineController.timelineItems = items + let timelineController = MockTimelineController(timelineItems: items) let viewModel = makeViewModel(timelineController: timelineController) #expect(timelineController.focusOnEventCallCount == 0) @@ -182,8 +176,7 @@ final class TimelineViewModelTests { let items = [TextRoomTimelineItem(eventID: "t1"), TextRoomTimelineItem(eventID: "t2"), TextRoomTimelineItem(eventID: "t3")] - let timelineController = MockTimelineController() - timelineController.timelineItems = items + let timelineController = MockTimelineController(timelineItems: items) let viewModel = makeViewModel(timelineController: timelineController) #expect(timelineController.focusOnEventCallCount == 0) @@ -207,8 +200,7 @@ final class TimelineViewModelTests { let items = [TextRoomTimelineItem(eventID: "t1"), TextRoomTimelineItem(eventID: "t2"), TextRoomTimelineItem(eventID: "t3")] - let timelineController = MockTimelineController() - timelineController.timelineItems = items + let timelineController = MockTimelineController(timelineItems: items) let viewModel = makeViewModel(timelineController: timelineController) @@ -294,17 +286,13 @@ final class TimelineViewModelTests { JoinedRoomProxyMock, TimelineProxyMock, MockTimelineController) { - let roomProxy = JoinedRoomProxyMock(.init(name: "")) - let timelineProxy = TimelineProxyMock() - - roomProxy.timeline = timelineProxy - let timelineController = MockTimelineController() - timelineProxy.sendReadReceiptForTypeReturnValue = .success(()) - timelineController.timelineItems = items - timelineController.roomProxy = roomProxy + let roomProxy = JoinedRoomProxyMock(.init(name: "")) + roomProxy.timeline = timelineProxy + + let timelineController = MockTimelineController(roomProxy: roomProxy, timelineItems: items) let appSettings = AppSettings.volatile() @@ -335,8 +323,7 @@ final class TimelineViewModelTests { let appSettings = AppSettings.volatile() // When showing them in a timeline. - let timelineController = MockTimelineController() - timelineController.timelineItems = [message] + let timelineController = MockTimelineController(timelineItems: [message]) let viewModel = TimelineViewModel(roomProxy: JoinedRoomProxyMock(.init(name: "", members: [RoomMemberProxyMock.mockAlice, RoomMemberProxyMock.mockCharlie])), timelineController: timelineController, userSession: UserSessionMock(.init()), @@ -556,8 +543,7 @@ final class TimelineViewModelTests { func tapSendInfoEncryptionAuthentictyDisplaysAlert() { // Given a room with an event whose authenticity could not be verified let items = [TextRoomTimelineItem(eventID: "t1", encryptionAuthenticity: .verificationViolation(color: .red))] - let timelineController = MockTimelineController() - timelineController.timelineItems = items + let timelineController = MockTimelineController(timelineItems: items) let viewModel = makeViewModel(timelineController: timelineController) #expect(viewModel.state.bindings.alertInfo == nil) @@ -571,8 +557,7 @@ final class TimelineViewModelTests { func tapSendInfoEncryptionForwarderDisplaysAlert() { // Given a room with an event whose key was forwarded let items = [TextRoomTimelineItem(eventID: "t1", keyForwarder: .test)] - let timelineController = MockTimelineController() - timelineController.timelineItems = items + let timelineController = MockTimelineController(timelineItems: items) let viewModel = makeViewModel(timelineController: timelineController) #expect(viewModel.state.bindings.alertInfo == nil)