Add unit tests for voice messages (#1869)

This commit is contained in:
Nicolas Mauri
2023-10-10 08:03:40 +02:00
committed by GitHub
parent f7bf4b6e20
commit cb9d35948e
7 changed files with 438 additions and 0 deletions
@@ -115,6 +115,94 @@ class AnalyticsClientMock: AnalyticsClientProtocol {
updateUserPropertiesClosure?(userProperties)
}
}
class AudioPlayerMock: AudioPlayerProtocol {
var actions: AnyPublisher<AudioPlayerAction, Never> {
get { return underlyingActions }
set(value) { underlyingActions = value }
}
var underlyingActions: AnyPublisher<AudioPlayerAction, Never>!
var mediaSource: MediaSourceProxy?
var currentTime: TimeInterval {
get { return underlyingCurrentTime }
set(value) { underlyingCurrentTime = value }
}
var underlyingCurrentTime: TimeInterval!
var url: URL?
var state: MediaPlayerState {
get { return underlyingState }
set(value) { underlyingState = value }
}
var underlyingState: MediaPlayerState!
//MARK: - load
var loadMediaSourceUsingCallsCount = 0
var loadMediaSourceUsingCalled: Bool {
return loadMediaSourceUsingCallsCount > 0
}
var loadMediaSourceUsingReceivedArguments: (mediaSource: MediaSourceProxy, url: URL)?
var loadMediaSourceUsingReceivedInvocations: [(mediaSource: MediaSourceProxy, url: URL)] = []
var loadMediaSourceUsingClosure: ((MediaSourceProxy, URL) -> Void)?
func load(mediaSource: MediaSourceProxy, using url: URL) {
loadMediaSourceUsingCallsCount += 1
loadMediaSourceUsingReceivedArguments = (mediaSource: mediaSource, url: url)
loadMediaSourceUsingReceivedInvocations.append((mediaSource: mediaSource, url: url))
loadMediaSourceUsingClosure?(mediaSource, url)
}
//MARK: - play
var playCallsCount = 0
var playCalled: Bool {
return playCallsCount > 0
}
var playClosure: (() -> Void)?
func play() {
playCallsCount += 1
playClosure?()
}
//MARK: - pause
var pauseCallsCount = 0
var pauseCalled: Bool {
return pauseCallsCount > 0
}
var pauseClosure: (() -> Void)?
func pause() {
pauseCallsCount += 1
pauseClosure?()
}
//MARK: - stop
var stopCallsCount = 0
var stopCalled: Bool {
return stopCallsCount > 0
}
var stopClosure: (() -> Void)?
func stop() {
stopCallsCount += 1
stopClosure?()
}
//MARK: - seek
var seekToCallsCount = 0
var seekToCalled: Bool {
return seekToCallsCount > 0
}
var seekToReceivedProgress: Double?
var seekToReceivedInvocations: [Double] = []
var seekToClosure: ((Double) async -> Void)?
func seek(to progress: Double) async {
seekToCallsCount += 1
seekToReceivedProgress = progress
seekToReceivedInvocations.append(progress)
await seekToClosure?(progress)
}
}
class BugReportServiceMock: BugReportServiceProtocol {
var isRunning: Bool {
get { return underlyingIsRunning }
@@ -226,6 +314,89 @@ class CompletionSuggestionServiceMock: CompletionSuggestionServiceProtocol {
setSuggestionTriggerClosure?(suggestionTrigger)
}
}
class MediaPlayerMock: MediaPlayerProtocol {
var mediaSource: MediaSourceProxy?
var currentTime: TimeInterval {
get { return underlyingCurrentTime }
set(value) { underlyingCurrentTime = value }
}
var underlyingCurrentTime: TimeInterval!
var url: URL?
var state: MediaPlayerState {
get { return underlyingState }
set(value) { underlyingState = value }
}
var underlyingState: MediaPlayerState!
//MARK: - load
var loadMediaSourceUsingCallsCount = 0
var loadMediaSourceUsingCalled: Bool {
return loadMediaSourceUsingCallsCount > 0
}
var loadMediaSourceUsingReceivedArguments: (mediaSource: MediaSourceProxy, url: URL)?
var loadMediaSourceUsingReceivedInvocations: [(mediaSource: MediaSourceProxy, url: URL)] = []
var loadMediaSourceUsingClosure: ((MediaSourceProxy, URL) -> Void)?
func load(mediaSource: MediaSourceProxy, using url: URL) {
loadMediaSourceUsingCallsCount += 1
loadMediaSourceUsingReceivedArguments = (mediaSource: mediaSource, url: url)
loadMediaSourceUsingReceivedInvocations.append((mediaSource: mediaSource, url: url))
loadMediaSourceUsingClosure?(mediaSource, url)
}
//MARK: - play
var playCallsCount = 0
var playCalled: Bool {
return playCallsCount > 0
}
var playClosure: (() -> Void)?
func play() {
playCallsCount += 1
playClosure?()
}
//MARK: - pause
var pauseCallsCount = 0
var pauseCalled: Bool {
return pauseCallsCount > 0
}
var pauseClosure: (() -> Void)?
func pause() {
pauseCallsCount += 1
pauseClosure?()
}
//MARK: - stop
var stopCallsCount = 0
var stopCalled: Bool {
return stopCallsCount > 0
}
var stopClosure: (() -> Void)?
func stop() {
stopCallsCount += 1
stopClosure?()
}
//MARK: - seek
var seekToCallsCount = 0
var seekToCalled: Bool {
return seekToCallsCount > 0
}
var seekToReceivedProgress: Double?
var seekToReceivedInvocations: [Double] = []
var seekToClosure: ((Double) async -> Void)?
func seek(to progress: Double) async {
seekToCallsCount += 1
seekToReceivedProgress = progress
seekToReceivedInvocations.append(progress)
await seekToClosure?(progress)
}
}
class NotificationCenterMock: NotificationCenterProtocol {
//MARK: - post
@@ -1914,4 +2085,32 @@ class UserNotificationCenterMock: UserNotificationCenterProtocol {
}
}
}
class VoiceMessageMediaManagerMock: VoiceMessageMediaManagerProtocol {
//MARK: - loadVoiceMessageFromSource
var loadVoiceMessageFromSourceBodyThrowableError: Error?
var loadVoiceMessageFromSourceBodyCallsCount = 0
var loadVoiceMessageFromSourceBodyCalled: Bool {
return loadVoiceMessageFromSourceBodyCallsCount > 0
}
var loadVoiceMessageFromSourceBodyReceivedArguments: (source: MediaSourceProxy, body: String?)?
var loadVoiceMessageFromSourceBodyReceivedInvocations: [(source: MediaSourceProxy, body: String?)] = []
var loadVoiceMessageFromSourceBodyReturnValue: URL!
var loadVoiceMessageFromSourceBodyClosure: ((MediaSourceProxy, String?) async throws -> URL)?
func loadVoiceMessageFromSource(_ source: MediaSourceProxy, body: String?) async throws -> URL {
if let error = loadVoiceMessageFromSourceBodyThrowableError {
throw error
}
loadVoiceMessageFromSourceBodyCallsCount += 1
loadVoiceMessageFromSourceBodyReceivedArguments = (source: source, body: body)
loadVoiceMessageFromSourceBodyReceivedInvocations.append((source: source, body: body))
if let loadVoiceMessageFromSourceBodyClosure = loadVoiceMessageFromSourceBodyClosure {
return try await loadVoiceMessageFromSourceBodyClosure(source, body)
} else {
return loadVoiceMessageFromSourceBodyReturnValue
}
}
}
// swiftlint:enable all