//
// Copyright 2023, 2024 New Vector Ltd.
//
// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
// Please see LICENSE files in the repository root for full details.
//

@testable import ElementX
import MatrixRustSDK
import XCTest

final class MediaLoaderTests: XCTestCase {
    func testMediaRequestCoalescing() async throws {
        let mediaLoadingClient = ClientSDKMock()
        mediaLoadingClient.getMediaContentMediaSourceReturnValue = Data()
        let mediaLoader = MediaLoader(client: mediaLoadingClient)
        
        let mediaSource = try MediaSourceProxy(url: .mockMXCFile, mimeType: nil)
        
        do {
            for _ in 1...10 {
                _ = try await mediaLoader.loadMediaContentForSource(mediaSource)
            }
            
            XCTAssertEqual(mediaLoadingClient.getMediaContentMediaSourceCallsCount, 10)
        } catch {
            fatalError()
        }
    }
    
    func testMediaThumbnailRequestCoalescing() async throws {
        let mediaLoadingClient = ClientSDKMock()
        mediaLoadingClient.getMediaThumbnailMediaSourceWidthHeightReturnValue = Data()
        let mediaLoader = MediaLoader(client: mediaLoadingClient)
        
        let mediaSource = try MediaSourceProxy(url: .mockMXCImage, mimeType: nil)
        
        do {
            for _ in 1...10 {
                _ = try await mediaLoader.loadMediaThumbnailForSource(mediaSource, width: 100, height: 100)
            }
            
            XCTAssertEqual(mediaLoadingClient.getMediaThumbnailMediaSourceWidthHeightCallsCount, 10)
        } catch {
            fatalError()
        }
    }
}
