Convert the old MockTimelineController to the generated TimelineControllerMock

This commit is contained in:
Stefan Ceriu
2026-06-02 14:28:57 +03:00
parent d66a968afd
commit 6ad1654d97
29 changed files with 299 additions and 380 deletions
+25 -25
View File
@@ -35,7 +35,7 @@ final class TimelineViewModelTests {
]
// When showing them in a timeline.
let timelineController = MockTimelineController(timelineItems: items)
let timelineController = TimelineControllerMock(.init(timelineItems: items))
let viewModel = makeViewModel(timelineController: timelineController)
// Then the messages should be grouped together.
@@ -63,7 +63,7 @@ final class TimelineViewModelTests {
]
// When showing them in a timeline.
let timelineController = MockTimelineController(timelineItems: items)
let timelineController = TimelineControllerMock(.init(timelineItems: items))
let viewModel = makeViewModel(timelineController: timelineController)
// Then the messages should be grouped by sender.
@@ -89,7 +89,7 @@ final class TimelineViewModelTests {
]
// When showing them in a timeline.
let timelineController = MockTimelineController(timelineItems: items)
let timelineController = TimelineControllerMock(.init(timelineItems: items))
let viewModel = makeViewModel(timelineController: timelineController)
// Then the first message should not be grouped but the other two should.
@@ -112,7 +112,7 @@ final class TimelineViewModelTests {
]
// When showing them in a timeline.
let timelineController = MockTimelineController(timelineItems: items)
let timelineController = TimelineControllerMock(.init(timelineItems: items))
let viewModel = makeViewModel(timelineController: timelineController)
// Then the first and second messages should be grouped and the last one should not.
@@ -135,7 +135,7 @@ final class TimelineViewModelTests {
]
// When showing them in a timeline.
let timelineController = MockTimelineController(timelineItems: items)
let timelineController = TimelineControllerMock(.init(timelineItems: items))
let viewModel = makeViewModel(timelineController: timelineController)
// Then the messages should be grouped together.
@@ -152,10 +152,10 @@ final class TimelineViewModelTests {
let items = [TextRoomTimelineItem(eventID: "t1"),
TextRoomTimelineItem(eventID: "t2"),
TextRoomTimelineItem(eventID: "t3")]
let timelineController = MockTimelineController(timelineItems: items)
let timelineController = TimelineControllerMock(.init(timelineItems: items))
let viewModel = makeViewModel(timelineController: timelineController)
#expect(timelineController.focusOnEventCallCount == 0)
#expect(timelineController.focusOnEventTimelineSizeCallsCount == 0)
#expect(viewModel.context.viewState.timelineState.isLive)
#expect(viewModel.context.viewState.timelineState.focussedEvent == nil)
@@ -165,7 +165,7 @@ final class TimelineViewModelTests {
try await deferred.fulfill()
// Then a new timeline should be loaded and the room focussed on that event.
#expect(timelineController.focusOnEventCallCount == 1)
#expect(timelineController.focusOnEventTimelineSizeCallsCount == 1)
#expect(!viewModel.context.viewState.timelineState.isLive)
#expect(viewModel.context.viewState.timelineState.focussedEvent == .init(eventID: "t4", appearance: .immediate))
}
@@ -176,10 +176,10 @@ final class TimelineViewModelTests {
let items = [TextRoomTimelineItem(eventID: "t1"),
TextRoomTimelineItem(eventID: "t2"),
TextRoomTimelineItem(eventID: "t3")]
let timelineController = MockTimelineController(timelineItems: items)
let timelineController = TimelineControllerMock(.init(timelineItems: items))
let viewModel = makeViewModel(timelineController: timelineController)
#expect(timelineController.focusOnEventCallCount == 0)
#expect(timelineController.focusOnEventTimelineSizeCallsCount == 0)
#expect(viewModel.context.viewState.timelineState.isLive)
#expect(viewModel.context.viewState.timelineState.focussedEvent == nil)
@@ -189,7 +189,7 @@ final class TimelineViewModelTests {
try await deferred.fulfill()
// Then the timeline should remain live and the item should be focussed.
#expect(timelineController.focusOnEventCallCount == 0)
#expect(timelineController.focusOnEventTimelineSizeCallsCount == 0)
#expect(viewModel.context.viewState.timelineState.isLive)
#expect(viewModel.context.viewState.timelineState.focussedEvent == .init(eventID: "t1", appearance: .animated))
}
@@ -200,7 +200,7 @@ final class TimelineViewModelTests {
let items = [TextRoomTimelineItem(eventID: "t1"),
TextRoomTimelineItem(eventID: "t2"),
TextRoomTimelineItem(eventID: "t3")]
let timelineController = MockTimelineController(timelineItems: items)
let timelineController = TimelineControllerMock(.init(timelineItems: items))
let viewModel = makeViewModel(timelineController: timelineController)
@@ -208,7 +208,7 @@ final class TimelineViewModelTests {
await viewModel.focusOnEvent(eventID: "t4")
try await deferred.fulfill()
#expect(timelineController.focusLiveCallCount == 0)
#expect(timelineController.focusLiveCallsCount == 0)
#expect(!viewModel.context.viewState.timelineState.isLive)
#expect(viewModel.context.viewState.timelineState.focussedEvent == .init(eventID: "t4", appearance: .immediate))
@@ -218,14 +218,14 @@ final class TimelineViewModelTests {
try await deferred.fulfill()
// Then the timeline should switch back to being live and the event focus should be removed.
#expect(timelineController.focusLiveCallCount == 1)
#expect(timelineController.focusLiveCallsCount == 1)
#expect(viewModel.context.viewState.timelineState.isLive)
#expect(viewModel.context.viewState.timelineState.focussedEvent == nil)
}
@Test
func initialFocusViewState() {
let timelineController = MockTimelineController()
let timelineController = TimelineControllerMock(.init())
let viewModel = makeViewModel(focussedEventID: "t10", timelineController: timelineController)
#expect(viewModel.context.viewState.timelineState.focussedEvent == .init(eventID: "t10", appearance: .immediate))
@@ -285,14 +285,14 @@ final class TimelineViewModelTests {
private func readReceiptsConfiguration(with items: [RoomTimelineItemProtocol]) -> (TimelineViewModel,
JoinedRoomProxyMock,
TimelineProxyMock,
MockTimelineController) {
TimelineControllerMock) {
let timelineProxy = TimelineProxyMock()
timelineProxy.sendReadReceiptForTypeReturnValue = .success(())
let roomProxy = JoinedRoomProxyMock(.init(name: ""))
roomProxy.timeline = timelineProxy
let timelineController = MockTimelineController(roomProxy: roomProxy, timelineItems: items)
let timelineController = TimelineControllerMock(.init(roomProxy: roomProxy, timelineItems: items))
let appSettings = AppSettings.volatile()
@@ -323,7 +323,7 @@ final class TimelineViewModelTests {
let appSettings = AppSettings.volatile()
// When showing them in a timeline.
let timelineController = MockTimelineController(timelineItems: [message])
let timelineController = TimelineControllerMock(.init(timelineItems: [message]))
let viewModel = TimelineViewModel(roomProxy: JoinedRoomProxyMock(.init(name: "", members: [RoomMemberProxyMock.mockAlice, RoomMemberProxyMock.mockCharlie])),
timelineController: timelineController,
userSession: UserSessionMock(.init()),
@@ -352,7 +352,7 @@ final class TimelineViewModelTests {
members: [RoomMemberProxyMock.mockAdmin,
RoomMemberProxyMock.mockAlice],
ownUserID: RoomMemberProxyMock.mockAdmin.userID)),
timelineController: MockTimelineController(),
timelineController: TimelineControllerMock(.init()),
userSession: UserSessionMock(.init()),
mediaPlayerProvider: MediaPlayerProviderMock(),
userIndicatorController: UserIndicatorControllerMock(),
@@ -391,7 +391,7 @@ final class TimelineViewModelTests {
members: [RoomMemberProxyMock.mockAdmin,
RoomMemberProxyMock.mockAlice],
ownUserID: RoomMemberProxyMock.mockAlice.userID)),
timelineController: MockTimelineController(),
timelineController: TimelineControllerMock(.init()),
userSession: UserSessionMock(.init()),
mediaPlayerProvider: MediaPlayerProviderMock(),
userIndicatorController: UserIndicatorControllerMock(),
@@ -430,7 +430,7 @@ final class TimelineViewModelTests {
members: [RoomMemberProxyMock.mockAdmin,
RoomMemberProxyMock.mockBanned[0]],
ownUserID: RoomMemberProxyMock.mockAdmin.userID)),
timelineController: MockTimelineController(),
timelineController: TimelineControllerMock(.init()),
userSession: UserSessionMock(.init()),
mediaPlayerProvider: MediaPlayerProviderMock(),
userIndicatorController: UserIndicatorControllerMock(),
@@ -475,7 +475,7 @@ final class TimelineViewModelTests {
roomProxyMock.underlyingInfoPublisher = infoSubject.asCurrentValuePublisher()
let viewModel = TimelineViewModel(roomProxy: roomProxyMock,
timelineController: MockTimelineController(),
timelineController: TimelineControllerMock(.init()),
userSession: UserSessionMock(.init()),
mediaPlayerProvider: MediaPlayerProviderMock(),
userIndicatorController: UserIndicatorControllerMock(),
@@ -506,7 +506,7 @@ final class TimelineViewModelTests {
roomProxyMock.underlyingInfoPublisher = infoSubject.asCurrentValuePublisher()
let viewModel = TimelineViewModel(roomProxy: roomProxyMock,
timelineController: MockTimelineController(),
timelineController: TimelineControllerMock(.init()),
userSession: UserSessionMock(.init()),
mediaPlayerProvider: MediaPlayerProviderMock(),
userIndicatorController: UserIndicatorControllerMock(),
@@ -543,7 +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(timelineItems: items)
let timelineController = TimelineControllerMock(.init(timelineItems: items))
let viewModel = makeViewModel(timelineController: timelineController)
#expect(viewModel.state.bindings.alertInfo == nil)
@@ -557,7 +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(timelineItems: items)
let timelineController = TimelineControllerMock(.init(timelineItems: items))
let viewModel = makeViewModel(timelineController: timelineController)
#expect(viewModel.state.bindings.alertInfo == nil)