Skip to content

Commit a86d9cc

Browse files
committed
[Netlens]- fix observe calls use case
1 parent 5d3d39d commit a86d9cc

3 files changed

Lines changed: 54 additions & 13 deletions

File tree

Tests/NetLensTests/Helpers/WaitForStream+Async.swift

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,41 @@ func waitForStreamValue<T:Sendable> (from stream: AsyncStream<T>, timeout: TimeI
3333
}
3434
}
3535

36+
func waitForStreamCondition<T: Sendable>(
37+
from stream: AsyncStream<T>,
38+
timeout: TimeInterval = 2.0,
39+
condition: @Sendable @escaping (T) -> Bool
40+
) async throws -> T {
41+
try await withThrowingTaskGroup(of: T?.self) { group in
42+
43+
group.addTask(operation: { @Sendable in
44+
var iterator = stream.makeAsyncIterator()
45+
46+
while let value = await iterator.next() {
47+
if condition(value) {
48+
return value
49+
}
50+
}
51+
return nil
52+
})
53+
54+
group.addTask {
55+
try await Task.sleep(for: .seconds(timeout))
56+
return nil
57+
}
58+
59+
guard let result = try await group.next() else {
60+
throw AsyncTestError.timedOut
61+
}
62+
63+
group.cancelAll()
64+
65+
guard let value = result else {
66+
throw AsyncTestError.timedOut
67+
}
68+
69+
return value
70+
}
71+
}
72+
3673

Tests/NetLensTests/Mocks/Repositories/MockNetworkCallRepository.swift

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@ import Foundation
99

1010
@testable import NetLens
1111

12-
@MainActor
13-
final class MockNetworkCallRepository: @preconcurrency NetworkCallRepository, @unchecked Sendable {
12+
final class MockNetworkCallRepository: NetworkCallRepository, @unchecked Sendable {
1413

1514
private(set) var calls: [NetworkCall] = []
1615

@@ -49,14 +48,16 @@ final class MockNetworkCallRepository: @preconcurrency NetworkCallRepository, @u
4948
}
5049

5150
func reset() {
51+
callsSubject.continuation.finish()
52+
5253
calls.removeAll()
5354

5455
addNetworkCallCallCount = 0
5556

5657
getAllCallCallCount = 0
5758

5859
clearAllCallsCount = 0
59-
60+
6061
callsSubject = AsyncStream<[NetworkCall]>.makeStream()
6162
}
6263

Tests/NetLensTests/UseCasesTests/ObserveNetworkCallsUseCaseSwiftTests.swift

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,30 +24,33 @@ struct ObserveNetworkCallsUseCaseSwiftTests {
2424
}
2525

2626
@Test("Execute return stream from repository")
27-
func execureReturnstream() async throws {
27+
func executeReturnstream() async throws {
2828

29-
let call = NetworkCallFactory.makeSuccessCall()
29+
let testCall = NetworkCallFactory.makeSuccessCall()
3030

3131
let stream = observeNetworkCallsUseCase.execute()
3232

3333
let streamTask = Task {
34-
try await waitForStreamValue(
34+
try await waitForStreamCondition(
3535
from: stream,
3636
timeout: 2.0
37-
)
38-
37+
) { calls in
38+
!calls.isEmpty
39+
}
3940
}
4041

41-
await mockNetworkrepository.addNetworkCall(call)
42+
try await Task.sleep(for: .milliseconds(50))
43+
44+
await mockNetworkrepository.addNetworkCall(testCall)
4245

4346
let receivedCalls = try await streamTask.value
4447

4548
#expect(receivedCalls.count == 1)
4649

47-
#expect(receivedCalls.first?.id == call.id)
48-
50+
#expect(receivedCalls.first?.id == testCall.id)
51+
4952
}
50-
51-
53+
54+
5255
}
5356

0 commit comments

Comments
 (0)