Skip to content

Commit 248beb9

Browse files
authored
[Fix]Flakey tests (#1001)
1 parent 3de46db commit 248beb9

File tree

9 files changed

+25
-53
lines changed

9 files changed

+25
-53
lines changed

Sources/StreamVideo/Utils/AudioSession/Policies/OwnCapabilitiesAudioSessionPolicy.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import Foundation
2020
public struct OwnCapabilitiesAudioSessionPolicy: AudioSessionPolicy {
2121

2222
@Injected(\.applicationStateAdapter) private var applicationStateAdapter
23+
@Injected(\.currentDevice) private var currentDevice
2324

2425
/// Initializes a new `OwnCapabilitiesAudioSessionPolicy` instance.
2526
public init() {}

Sources/StreamVideo/Utils/CurrentDevice/CurrentDevice.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,10 @@ public final class CurrentDevice: @unchecked Sendable {
109109
self.deviceType = currentDeviceProvider()
110110
}
111111
}
112+
113+
func didUpdate(_ deviceType: DeviceType) {
114+
self.deviceType = deviceType
115+
}
112116
}
113117

114118
extension CurrentDevice: InjectionKey {

Sources/StreamVideo/Utils/Logger/Logger+WebRTC.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import StreamWebRTC
88
extension Logger {
99

1010
public enum WebRTC {
11-
public enum LogMode { case none, validFilesOnly, all }
11+
public enum LogMode: Sendable { case none, validFilesOnly, all }
1212

1313
public nonisolated(unsafe) static var mode: LogMode = .all {
1414
didSet { RTCLogger.default.didUpdate(mode: mode) }
@@ -69,6 +69,8 @@ extension Logger.WebRTC {
6969
}
7070

7171
guard mode != .none else {
72+
logger.stop()
73+
isRunning = false
7274
return
7375
}
7476

StreamVideo.xcodeproj/project.pbxproj

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -616,7 +616,6 @@
616616
40B31AA82D10594F005FB448 /* PublishOptions+Dummy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40B31AA72D10594F005FB448 /* PublishOptions+Dummy.swift */; };
617617
40B31AA92D10594F005FB448 /* PublishOptions+Dummy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40B31AA72D10594F005FB448 /* PublishOptions+Dummy.swift */; };
618618
40B3E53C2DBBAF9500DE8F50 /* ProximityMonitor_Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40B3E53B2DBBAF9500DE8F50 /* ProximityMonitor_Tests.swift */; };
619-
40B3E53E2DBBB0AB00DE8F50 /* CurrentDevice+Dummy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40B3E53D2DBBB0AB00DE8F50 /* CurrentDevice+Dummy.swift */; };
620619
40B3E5402DBBB6D900DE8F50 /* MockProximityMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40B3E53F2DBBB6D900DE8F50 /* MockProximityMonitor.swift */; };
621620
40B3E5422DBBB83A00DE8F50 /* ProximityManager_Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40B3E5412DBBB83A00DE8F50 /* ProximityManager_Tests.swift */; };
622621
40B3E5442DBBB99200DE8F50 /* MockProximityPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40B3E5432DBBB99200DE8F50 /* MockProximityPolicy.swift */; };
@@ -2299,7 +2298,6 @@
22992298
40B284E22D52423B0064C1FE /* AVAudioSessionCategory+Convenience.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AVAudioSessionCategory+Convenience.swift"; sourceTree = "<group>"; };
23002299
40B31AA72D10594F005FB448 /* PublishOptions+Dummy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PublishOptions+Dummy.swift"; sourceTree = "<group>"; };
23012300
40B3E53B2DBBAF9500DE8F50 /* ProximityMonitor_Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProximityMonitor_Tests.swift; sourceTree = "<group>"; };
2302-
40B3E53D2DBBB0AB00DE8F50 /* CurrentDevice+Dummy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CurrentDevice+Dummy.swift"; sourceTree = "<group>"; };
23032301
40B3E53F2DBBB6D900DE8F50 /* MockProximityMonitor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockProximityMonitor.swift; sourceTree = "<group>"; };
23042302
40B3E5412DBBB83A00DE8F50 /* ProximityManager_Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProximityManager_Tests.swift; sourceTree = "<group>"; };
23052303
40B3E5432DBBB99200DE8F50 /* MockProximityPolicy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockProximityPolicy.swift; sourceTree = "<group>"; };
@@ -7077,7 +7075,6 @@
70777075
40FAAC8A2DDCB488007BF93A /* MockConsumableBucketItemTransformer.swift */,
70787076
40AAD1902D2EF18A00D10330 /* MockCaptureDevice.swift */,
70797077
40F1017F2D5D078800C49481 /* MockAudioSessionPolicy.swift */,
7080-
40B3E53D2DBBB0AB00DE8F50 /* CurrentDevice+Dummy.swift */,
70817078
40D75C5B2E438633000E0438 /* AVAudioSessionRouteDescription+Dummy.swift */,
70827079
4019A2862E43565A00CE70A4 /* MockAudioSession.swift */,
70837080
4019A2882E4357B200CE70A4 /* MockRTCAudioStore.swift */,
@@ -9412,7 +9409,6 @@
94129409
40B31AA92D10594F005FB448 /* PublishOptions+Dummy.swift in Sources */,
94139410
842747F129EED88800E063AD /* InternetConnection_Tests.swift in Sources */,
94149411
40C9E4552C988CE100802B28 /* WebRTCJoinRequestFactory_Tests.swift in Sources */,
9415-
40B3E53E2DBBB0AB00DE8F50 /* CurrentDevice+Dummy.swift in Sources */,
94169412
84F58B9329EEB53E00010C4C /* EventMiddleware_Mock.swift in Sources */,
94179413
40FAAC892DDC9F88007BF93A /* ConsumableBucket_Tests.swift in Sources */,
94189414
40B48C2E2D14D15E002C4EAB /* StreamVideoSfuModelsPublishOption_VideoLayersTests.swift in Sources */,

StreamVideoTests/CallKit/CallKitAdapterTests.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,18 @@ final class CallKitAdapterTests: XCTestCase, @unchecked Sendable {
1111
private lazy var callKitService: MockCallKitService! = .init()
1212
private lazy var subject: CallKitAdapter! = .init()
1313

14-
override func setUp() {
15-
super.setUp()
14+
@MainActor
15+
override func setUp() async throws {
16+
try await super.setUp()
1617
InjectedValues[\.callKitPushNotificationAdapter] = callKitPushNotificationAdapter
1718
InjectedValues[\.callKitService] = callKitService
18-
InjectedValues[\.currentDevice] = CurrentDevice(currentDeviceProvider: { .phone })
19+
CurrentDevice.currentValue.didUpdate(.phone)
1920
}
2021

2122
override func tearDown() {
2223
callKitPushNotificationAdapter = nil
2324
callKitService = nil
2425
subject = nil
25-
InjectedValues[\.currentDevice] = CurrentDevice.currentValue
2626
super.tearDown()
2727
}
2828

StreamVideoTests/CallSettings/ProximityManager_Tests.swift

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import XCTest
1010
@MainActor
1111
final class ProximityManager_Tests: XCTestCase, @unchecked Sendable {
1212

13-
private var mockCurrentDevice: CurrentDevice! = .dummy { .phone }
1413
private lazy var mockProximityMonitor: MockProximityMonitor! = .init()
1514
private lazy var mockCall: MockCall! = .init(.dummy())
1615
private lazy var mockActiveCallSubject: PassthroughSubject<Call?, Never>! = .init()
@@ -19,12 +18,11 @@ final class ProximityManager_Tests: XCTestCase, @unchecked Sendable {
1918
activeCallPublisher: mockActiveCallSubject.eraseToAnyPublisher()
2019
)
2120

21+
@MainActor
2222
override func setUp() async throws {
2323
try await super.setUp()
24-
CurrentDevice.currentValue = mockCurrentDevice
25-
await fulfillment { CurrentDevice.currentValue.deviceType == .phone }
24+
CurrentDevice.currentValue.didUpdate(.phone)
2625
_ = mockProximityMonitor
27-
_ = mockCurrentDevice
2826
_ = mockCall
2927
_ = subject
3028
}
@@ -33,7 +31,6 @@ final class ProximityManager_Tests: XCTestCase, @unchecked Sendable {
3331
subject = nil
3432
mockCall = nil
3533
mockActiveCallSubject = nil
36-
mockCurrentDevice = nil
3734
mockProximityMonitor = nil
3835
CurrentDevice.currentValue = .init()
3936
try await super.tearDown()

StreamVideoTests/Mock/CurrentDevice+Dummy.swift

Lines changed: 0 additions & 14 deletions
This file was deleted.

StreamVideoTests/Utils/AudioSession/Policies/OwnCapabilitiesAudioSessionPolicyTests.swift

Lines changed: 9 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -10,30 +10,24 @@ final class OwnCapabilitiesAudioSessionPolicyTests: XCTestCase, @unchecked Senda
1010

1111
private lazy var stubbedAppStateAdapter: MockAppStateAdapter! = .init()
1212
private lazy var subject: OwnCapabilitiesAudioSessionPolicy! = .init()
13-
private lazy var currentDeviceType: CurrentDevice.DeviceType! = CurrentDevice.DeviceType.phone
14-
private lazy var currentDevice: CurrentDevice! = .init { self.currentDeviceType }
1513

1614
override func setUp() {
1715
super.setUp()
1816
AppStateProviderKey.currentValue = stubbedAppStateAdapter
19-
InjectedValues[\.currentDevice] = currentDevice
2017
_ = subject
2118
}
2219

2320
override func tearDown() {
2421
subject = nil
2522
stubbedAppStateAdapter = nil
26-
currentDevice = nil
27-
InjectedValues[\.currentDevice] = CurrentDevice.currentValue
2823
super.tearDown()
2924
}
3025

3126
// MARK: - Tests for users without sendAudio capability
3227

3328
func testConfiguration_WhenUserCannotSendAudio_ReturnsPlaybackConfiguration() async {
3429
// Given
35-
currentDeviceType = .phone
36-
await fulfilmentInMainActor { self.currentDevice.deviceType == self.currentDeviceType }
30+
CurrentDevice.currentValue.didUpdate(.phone)
3731
let callSettings = CallSettings(audioOn: true, videoOn: true, speakerOn: true)
3832
let ownCapabilities: Set<OwnCapability> = [.sendVideo]
3933

@@ -54,8 +48,7 @@ final class OwnCapabilitiesAudioSessionPolicyTests: XCTestCase, @unchecked Senda
5448

5549
func testConfiguration_WhenUserCanSendAudioAndAudioOn_ReturnsPlayAndRecordConfiguration() async {
5650
// Given
57-
currentDeviceType = .phone
58-
await fulfilmentInMainActor { self.currentDevice.deviceType == self.currentDeviceType }
51+
CurrentDevice.currentValue.didUpdate(.phone)
5952
let callSettings = CallSettings(audioOn: true, videoOn: true, speakerOn: false)
6053
let ownCapabilities: Set<OwnCapability> = [.sendAudio, .sendVideo]
6154

@@ -80,8 +73,7 @@ final class OwnCapabilitiesAudioSessionPolicyTests: XCTestCase, @unchecked Senda
8073

8174
func testConfiguration_WhenUserCanSendAudioAndSpeakerOnWithEarpiece_ReturnsPlayAndRecordConfiguration() async {
8275
// Given
83-
currentDeviceType = .phone
84-
await fulfilmentInMainActor { self.currentDevice.deviceType == self.currentDeviceType }
76+
CurrentDevice.currentValue.didUpdate(.phone)
8577
let callSettings = CallSettings(audioOn: false, videoOn: true, speakerOn: true)
8678
let ownCapabilities: Set<OwnCapability> = [.sendAudio, .sendVideo]
8779

@@ -106,8 +98,7 @@ final class OwnCapabilitiesAudioSessionPolicyTests: XCTestCase, @unchecked Senda
10698

10799
func testConfiguration_WhenUserCanSendAudioAndSpeakerOnWithoutEarpiece_ReturnsPlaybackAndRecordConfiguration() async {
108100
// Given
109-
currentDeviceType = .pad
110-
await fulfilmentInMainActor { self.currentDevice.deviceType == self.currentDeviceType }
101+
CurrentDevice.currentValue.didUpdate(.pad)
111102
let callSettings = CallSettings(audioOn: false, videoOn: true, speakerOn: true)
112103
let ownCapabilities: Set<OwnCapability> = [.sendAudio, .sendVideo]
113104

@@ -126,8 +117,7 @@ final class OwnCapabilitiesAudioSessionPolicyTests: XCTestCase, @unchecked Senda
126117

127118
func testConfiguration_WhenUserCanSendAudioAndAudioOff_ReturnsPlaybackConfiguration() async {
128119
// Given
129-
currentDeviceType = .phone
130-
await fulfilmentInMainActor { self.currentDevice.deviceType == self.currentDeviceType }
120+
CurrentDevice.currentValue.didUpdate(.phone)
131121
let callSettings = CallSettings(audioOn: false, videoOn: true, speakerOn: false)
132122
let ownCapabilities: Set<OwnCapability> = [.sendAudio, .sendVideo]
133123

@@ -148,8 +138,7 @@ final class OwnCapabilitiesAudioSessionPolicyTests: XCTestCase, @unchecked Senda
148138

149139
func testConfiguration_WhenVideoOffSpeakerOnBackgroundFalse_ReturnsVoiceChatMode() async {
150140
// Given
151-
currentDeviceType = .phone
152-
await fulfilmentInMainActor { self.currentDevice.deviceType == self.currentDeviceType }
141+
CurrentDevice.currentValue.didUpdate(.phone)
153142
let callSettings = CallSettings(audioOn: true, videoOn: false, speakerOn: true)
154143
let ownCapabilities: Set<OwnCapability> = [.sendAudio, .sendVideo]
155144

@@ -172,8 +161,7 @@ final class OwnCapabilitiesAudioSessionPolicyTests: XCTestCase, @unchecked Senda
172161

173162
func testConfiguration_WhenVideoOffSpeakerFalseBackgroundFalse_ReturnsVoiceChatMode() async {
174163
// Given
175-
currentDeviceType = .phone
176-
await fulfilmentInMainActor { self.currentDevice.deviceType == self.currentDeviceType }
164+
CurrentDevice.currentValue.didUpdate(.phone)
177165
let callSettings = CallSettings(audioOn: true, videoOn: false, speakerOn: false)
178166
let ownCapabilities: Set<OwnCapability> = [.sendAudio, .sendVideo]
179167

@@ -196,8 +184,7 @@ final class OwnCapabilitiesAudioSessionPolicyTests: XCTestCase, @unchecked Senda
196184

197185
func testConfiguration_WhenVideoOffSpeakerOnBackgroundTrue_ReturnsVoiceChatMode() async {
198186
// Given
199-
currentDeviceType = .phone
200-
await fulfilmentInMainActor { self.currentDevice.deviceType == self.currentDeviceType }
187+
CurrentDevice.currentValue.didUpdate(.phone)
201188
stubbedAppStateAdapter.stubbedState = .background
202189
let callSettings = CallSettings(audioOn: true, videoOn: false, speakerOn: true)
203190
let ownCapabilities: Set<OwnCapability> = [.sendAudio, .sendVideo]
@@ -221,8 +208,7 @@ final class OwnCapabilitiesAudioSessionPolicyTests: XCTestCase, @unchecked Senda
221208

222209
func testConfiguration_WhenVideoOffSpeakerFalseBackgroundTrue_ReturnsVoiceChatMode() async {
223210
// Given
224-
currentDeviceType = .phone
225-
await fulfilmentInMainActor { self.currentDevice.deviceType == self.currentDeviceType }
211+
CurrentDevice.currentValue.didUpdate(.phone)
226212
stubbedAppStateAdapter.stubbedState = .background
227213
let callSettings = CallSettings(audioOn: true, videoOn: false, speakerOn: false)
228214
let ownCapabilities: Set<OwnCapability> = [.sendAudio, .sendVideo]

StreamVideoTests/Utils/Proximity/Monitor/ProximityMonitor_Tests.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ final class ProximityMonitor_Tests: XCTestCase, @unchecked Sendable {
5656

5757
@MainActor
5858
func test_stopObservation_isActiveBecomesFalse() async {
59-
CurrentDevice.currentValue = .dummy { .phone }
59+
CurrentDevice.currentValue.didUpdate(.phone)
6060
await fulfillment { CurrentDevice.currentValue.deviceType == .phone }
6161

6262
subject.startObservation()
@@ -76,7 +76,7 @@ final class ProximityMonitor_Tests: XCTestCase, @unchecked Sendable {
7676
function: StaticString = #function,
7777
line: UInt = #line
7878
) async {
79-
CurrentDevice.currentValue = .dummy { deviceType }
79+
CurrentDevice.currentValue.didUpdate(deviceType)
8080
await fulfillment { CurrentDevice.currentValue.deviceType == deviceType }
8181
_ = subject
8282

0 commit comments

Comments
 (0)