// // Copyright 2022-2024 New Vector Ltd. // // SPDX-License-Identifier: AGPL-3.0-only // Please see LICENSE in the repository root for full details. // @testable import ElementX import Combine import MatrixRustSDK import XCTest @MainActor class TimelineMediaPreviewViewModelTests: XCTestCase { var viewModel: TimelineMediaPreviewViewModel! var context: TimelineMediaPreviewViewModel.Context { viewModel.context } var mediaProvider: MediaProviderMock! func testLoadingItem() async throws { // Given a fresh view model. setupViewModel() XCTAssertFalse(mediaProvider.loadFileFromSourceFilenameCalled) XCTAssertNil(context.viewState.currentItem) // When setting the current item. await viewModel.updateCurrentItem(context.viewState.previewItems[0]) // Then the view model should load the item and update its view state. XCTAssertTrue(mediaProvider.loadFileFromSourceFilenameCalled) XCTAssertEqual(context.viewState.currentItem, context.viewState.previewItems[0]) } // MARK: - Helpers private func setupViewModel() { let previewItems = [ ImageRoomTimelineItem(id: .randomEvent, timestamp: .mock, isOutgoing: false, isEditable: false, canBeRepliedTo: true, isThreaded: false, sender: .init(id: "", displayName: "Sally Sanderson"), content: .init(filename: "Amazing image.jpeg", caption: "A caption goes right here.", imageInfo: .mockImage, thumbnailInfo: .mockThumbnail)) ] mediaProvider = MediaProviderMock(configuration: .init()) viewModel = TimelineMediaPreviewViewModel(previewItems: previewItems, mediaProvider: mediaProvider, userIndicatorController: UserIndicatorControllerMock()) } }