Fix playback and recording of voice messages (#1948)

This commit is contained in:
Nicolas Mauri
2023-10-24 18:49:42 +02:00
committed by GitHub
parent 37f1a79a11
commit f9ad44f96a
10 changed files with 115 additions and 55 deletions
@@ -19,6 +19,7 @@ import Combine
import Foundation
import XCTest
@MainActor
class MediaPlayerProviderTests: XCTestCase {
private var mediaPlayerProvider: MediaPlayerProvider!
@@ -41,7 +42,7 @@ class MediaPlayerProviderTests: XCTestCase {
}
let mediaSourceVideo = MediaSourceProxy(url: someURL, mimeType: "video/mp4")
switch mediaPlayerProvider.player(for: mediaSourceWithoutMimeType) {
switch mediaPlayerProvider.player(for: mediaSourceVideo) {
case .failure(.unsupportedMediaType):
// Ok
break
@@ -72,11 +73,11 @@ class MediaPlayerProviderTests: XCTestCase {
// By default, there should be no player state
XCTAssertNil(mediaPlayerProvider.playerState(for: audioPlayerStateId))
let audioPlayerState = await AudioPlayerState(id: audioPlayerStateId, duration: 10.0)
await mediaPlayerProvider.register(audioPlayerState: audioPlayerState)
let audioPlayerState = AudioPlayerState(id: audioPlayerStateId, duration: 10.0)
mediaPlayerProvider.register(audioPlayerState: audioPlayerState)
XCTAssertEqual(audioPlayerState, mediaPlayerProvider.playerState(for: audioPlayerStateId))
await mediaPlayerProvider.unregister(audioPlayerState: audioPlayerState)
mediaPlayerProvider.unregister(audioPlayerState: audioPlayerState)
XCTAssertNil(mediaPlayerProvider.playerState(for: audioPlayerStateId))
}
@@ -84,17 +85,17 @@ class MediaPlayerProviderTests: XCTestCase {
let audioPlayer = AudioPlayerMock()
audioPlayer.actions = PassthroughSubject<AudioPlayerAction, Never>().eraseToAnyPublisher()
let audioPlayerStates = await Array(repeating: AudioPlayerState(id: .timelineItemIdentifier(.random), duration: 0), count: 10)
let audioPlayerStates = Array(repeating: AudioPlayerState(id: .timelineItemIdentifier(.random), duration: 0), count: 10)
for audioPlayerState in audioPlayerStates {
await mediaPlayerProvider.register(audioPlayerState: audioPlayerState)
await audioPlayerState.attachAudioPlayer(audioPlayer)
let isAttached = await audioPlayerState.isAttached
mediaPlayerProvider.register(audioPlayerState: audioPlayerState)
audioPlayerState.attachAudioPlayer(audioPlayer)
let isAttached = audioPlayerState.isAttached
XCTAssertTrue(isAttached)
}
await mediaPlayerProvider.detachAllStates(except: nil)
mediaPlayerProvider.detachAllStates(except: nil)
for audioPlayerState in audioPlayerStates {
let isAttached = await audioPlayerState.isAttached
let isAttached = audioPlayerState.isAttached
XCTAssertFalse(isAttached)
}
}
@@ -103,18 +104,18 @@ class MediaPlayerProviderTests: XCTestCase {
let audioPlayer = AudioPlayerMock()
audioPlayer.actions = PassthroughSubject<AudioPlayerAction, Never>().eraseToAnyPublisher()
let audioPlayerStates = await Array(repeating: AudioPlayerState(id: .timelineItemIdentifier(.random), duration: 0), count: 10)
let audioPlayerStates = Array(repeating: AudioPlayerState(id: .timelineItemIdentifier(.random), duration: 0), count: 10)
for audioPlayerState in audioPlayerStates {
await mediaPlayerProvider.register(audioPlayerState: audioPlayerState)
await audioPlayerState.attachAudioPlayer(audioPlayer)
let isAttached = await audioPlayerState.isAttached
mediaPlayerProvider.register(audioPlayerState: audioPlayerState)
audioPlayerState.attachAudioPlayer(audioPlayer)
let isAttached = audioPlayerState.isAttached
XCTAssertTrue(isAttached)
}
let exception = audioPlayerStates[1]
await mediaPlayerProvider.detachAllStates(except: exception)
mediaPlayerProvider.detachAllStates(except: exception)
for audioPlayerState in audioPlayerStates {
let isAttached = await audioPlayerState.isAttached
let isAttached = audioPlayerState.isAttached
if audioPlayerState == exception {
XCTAssertTrue(isAttached)
} else {