Skip to content

Commit b8f8164

Browse files
authored
test: fix failing tests (#467)
1 parent e92e43e commit b8f8164

File tree

3 files changed

+40
-46
lines changed

3 files changed

+40
-46
lines changed

Sources/TestHelpers/HTTPClientMock.swift

Lines changed: 13 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -10,22 +10,16 @@ import Foundation
1010
import Helpers
1111
import XCTestDynamicOverlay
1212

13-
package final class HTTPClientMock: HTTPClientType {
13+
package actor HTTPClientMock: HTTPClientType {
1414
package struct MockNotFound: Error {}
1515

16-
private let mocks: LockIsolated < [@Sendable (HTTPRequest) async throws -> HTTPResponse?]> = .init([])
17-
private let _receivedRequests = LockIsolated<[HTTPRequest]>([])
18-
private let _returnedResponses = LockIsolated<[Result<HTTPResponse, any Error>]>([])
19-
16+
private var mocks = [@Sendable (HTTPRequest) async throws -> HTTPResponse?]()
17+
2018
/// Requests received by this client in order.
21-
package var receivedRequests: [HTTPRequest] {
22-
_receivedRequests.value
23-
}
19+
package var receivedRequests: [HTTPRequest] = []
2420

2521
/// Responses returned by this client in order.
26-
package var returnedResponses: [Result<HTTPResponse, any Error>] {
27-
_returnedResponses.value
28-
}
22+
package var returnedResponses: [Result<HTTPResponse, any Error>] = []
2923

3024
package init() {}
3125

@@ -34,14 +28,11 @@ package final class HTTPClientMock: HTTPClientType {
3428
_ request: @escaping @Sendable (HTTPRequest) -> Bool,
3529
return response: @escaping @Sendable (HTTPRequest) async throws -> HTTPResponse
3630
) -> Self {
37-
mocks.withValue {
38-
$0.append { r in
39-
if request(r) {
40-
return try await response(r)
41-
}
42-
43-
return nil
31+
mocks.append { r in
32+
if request(r) {
33+
return try await response(r)
4434
}
35+
return nil
4536
}
4637
return self
4738
}
@@ -54,20 +45,16 @@ package final class HTTPClientMock: HTTPClientType {
5445
}
5546

5647
package func send(_ request: HTTPRequest) async throws -> HTTPResponse {
57-
_receivedRequests.withValue { $0.append(request) }
48+
receivedRequests.append(request)
5849

59-
for mock in mocks.value {
50+
for mock in mocks{
6051
do {
6152
if let response = try await mock(request) {
62-
_returnedResponses.withValue {
63-
$0.append(.success(response))
64-
}
53+
returnedResponses.append(.success(response))
6554
return response
6655
}
6756
} catch {
68-
_returnedResponses.withValue {
69-
$0.append(.failure(error))
70-
}
57+
returnedResponses.append(.failure(error))
7158
throw error
7259
}
7360
}

Tests/AuthTests/SessionManagerTests.swift

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ final class SessionManagerTests: XCTestCase {
3131
configuration: .init(
3232
url: clientURL,
3333
localStorage: InMemoryLocalStorage(),
34-
logger: nil,
34+
logger: TestLogger(),
3535
autoRefreshToken: false
3636
),
3737
http: http,
@@ -72,7 +72,7 @@ final class SessionManagerTests: XCTestCase {
7272

7373
let (refreshSessionStream, refreshSessionContinuation) = AsyncStream<Session>.makeStream()
7474

75-
http.when(
75+
await http.when(
7676
{ $0.url.path.contains("/token") },
7777
return: { _ in
7878
refreshSessionCallCount.withValue { $0 += 1 }
@@ -83,7 +83,7 @@ final class SessionManagerTests: XCTestCase {
8383

8484
// Fire N tasks and call sut.session()
8585
let tasks = (0 ..< 10).map { _ in
86-
Task.detached { [weak self] in
86+
Task { [weak self] in
8787
try await self?.sut.session()
8888
}
8989
}
@@ -106,3 +106,9 @@ final class SessionManagerTests: XCTestCase {
106106
}
107107
}
108108
}
109+
110+
struct TestLogger: SupabaseLogger {
111+
func log(message: SupabaseLogMessage) {
112+
print(message.description)
113+
}
114+
}

Tests/FunctionsTests/FunctionsClientTests.swift

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ final class FunctionsClientTests: XCTestCase {
2929
func testInvoke() async throws {
3030
let url = URL(string: "http://localhost:5432/functions/v1/hello_world")!
3131

32-
let http = HTTPClientMock()
32+
let http = await HTTPClientMock()
3333
.when {
3434
$0.url.pathComponents.contains("hello_world")
3535
} return: { _ in
@@ -49,7 +49,7 @@ final class FunctionsClientTests: XCTestCase {
4949
options: .init(headers: ["X-Custom-Key": "value"], body: body)
5050
)
5151

52-
let request = http.receivedRequests.last
52+
let request = await http.receivedRequests.last
5353

5454
XCTAssertEqual(request?.url, url)
5555
XCTAssertEqual(request?.method, .post)
@@ -59,7 +59,7 @@ final class FunctionsClientTests: XCTestCase {
5959
}
6060

6161
func testInvokeWithCustomMethod() async throws {
62-
let http = HTTPClientMock().any { _ in try .stub(body: Empty()) }
62+
let http = await HTTPClientMock().any { _ in try .stub(body: Empty()) }
6363

6464
let sut = FunctionsClient(
6565
url: url,
@@ -70,12 +70,12 @@ final class FunctionsClientTests: XCTestCase {
7070

7171
try await sut.invoke("hello-world", options: .init(method: .delete))
7272

73-
let request = http.receivedRequests.last
73+
let request = await http.receivedRequests.last
7474
XCTAssertEqual(request?.method, .delete)
7575
}
7676

7777
func testInvokeWithQuery() async throws {
78-
let http = HTTPClientMock().any { _ in try .stub(body: Empty()) }
78+
let http = await HTTPClientMock().any { _ in try .stub(body: Empty()) }
7979

8080
let sut = FunctionsClient(
8181
url: url,
@@ -91,12 +91,12 @@ final class FunctionsClientTests: XCTestCase {
9191
)
9292
)
9393

94-
let request = http.receivedRequests.last
94+
let request = await http.receivedRequests.last
9595
XCTAssertEqual(request?.urlRequest.url?.query, "key=value")
9696
}
9797

9898
func testInvokeWithRegionDefinedInClient() async throws {
99-
let http = HTTPClientMock()
99+
let http = await HTTPClientMock()
100100
.any { _ in try .stub(body: Empty()) }
101101

102102
let sut = FunctionsClient(
@@ -108,11 +108,12 @@ final class FunctionsClientTests: XCTestCase {
108108

109109
try await sut.invoke("hello-world")
110110

111-
XCTAssertEqual(http.receivedRequests.last?.headers["x-region"], "ca-central-1")
111+
let request = await http.receivedRequests.last
112+
XCTAssertEqual(request?.headers["x-region"], "ca-central-1")
112113
}
113114

114115
func testInvokeWithRegion() async throws {
115-
let http = HTTPClientMock()
116+
let http = await HTTPClientMock()
116117
.any { _ in try .stub(body: Empty()) }
117118

118119
let sut = FunctionsClient(
@@ -124,11 +125,12 @@ final class FunctionsClientTests: XCTestCase {
124125

125126
try await sut.invoke("hello-world", options: .init(region: .caCentral1))
126127

127-
XCTAssertEqual(http.receivedRequests.last?.headers["x-region"], "ca-central-1")
128+
let request = await http.receivedRequests.last
129+
XCTAssertEqual(request?.headers["x-region"], "ca-central-1")
128130
}
129131

130132
func testInvokeWithoutRegion() async throws {
131-
let http = HTTPClientMock()
133+
let http = await HTTPClientMock()
132134
.any { _ in try .stub(body: Empty()) }
133135

134136
let sut = FunctionsClient(
@@ -140,11 +142,12 @@ final class FunctionsClientTests: XCTestCase {
140142

141143
try await sut.invoke("hello-world")
142144

143-
XCTAssertNil(http.receivedRequests.last?.headers["x-region"])
145+
let request = await http.receivedRequests.last
146+
XCTAssertNil(request?.headers["x-region"])
144147
}
145148

146149
func testInvoke_shouldThrow_URLError_badServerResponse() async {
147-
let sut = FunctionsClient(
150+
let sut = await FunctionsClient(
148151
url: url,
149152
headers: ["Apikey": apiKey],
150153
region: nil,
@@ -162,7 +165,7 @@ final class FunctionsClientTests: XCTestCase {
162165
}
163166

164167
func testInvoke_shouldThrow_FunctionsError_httpError() async {
165-
let sut = FunctionsClient(
168+
let sut = await FunctionsClient(
166169
url: url,
167170
headers: ["Apikey": apiKey],
168171
region: nil,
@@ -180,9 +183,7 @@ final class FunctionsClientTests: XCTestCase {
180183
}
181184

182185
func testInvoke_shouldThrow_FunctionsError_relayError() async {
183-
let url = URL(string: "http://localhost:5432/functions/v1/hello_world")!
184-
185-
let sut = FunctionsClient(
186+
let sut = await FunctionsClient(
186187
url: self.url,
187188
headers: ["Apikey": apiKey],
188189
region: nil,

0 commit comments

Comments
 (0)