7
7
8
8
import ConcurrencyExtras
9
9
import CustomDump
10
+ import HTTPTypes
10
11
import InlineSnapshotTesting
11
12
import TestHelpers
12
13
import XCTest
@@ -80,8 +81,8 @@ final class AuthClientTests: XCTestCase {
80
81
}
81
82
82
83
func testSignOut( ) async throws {
83
- sut = makeSUT { _ in
84
- . stub( )
84
+ sut = makeSUT { _, _ in
85
+ TestStub . stub ( )
85
86
}
86
87
87
88
Dependencies [ sut. clientID] . sessionStorage. store ( . validSession)
@@ -109,8 +110,8 @@ final class AuthClientTests: XCTestCase {
109
110
}
110
111
111
112
func testSignOutWithOthersScopeShouldNotRemoveLocalSession( ) async throws {
112
- sut = makeSUT { _ in
113
- . stub( )
113
+ sut = makeSUT { _, _ in
114
+ TestStub . stub ( )
114
115
}
115
116
116
117
Dependencies [ sut. clientID] . sessionStorage. store ( . validSession)
@@ -122,14 +123,12 @@ final class AuthClientTests: XCTestCase {
122
123
}
123
124
124
125
func testSignOutShouldRemoveSessionIfUserIsNotFound( ) async throws {
125
- sut = makeSUT { _ in
126
+ sut = makeSUT { _, _ in
126
127
throw AuthError . api (
127
128
message: " " ,
128
129
errorCode: . unknown,
129
- underlyingData: Data ( ) ,
130
- underlyingResponse: HTTPURLResponse (
131
- url: URL ( string: " http://localhost " ) !, statusCode: 404 , httpVersion: nil ,
132
- headerFields: nil ) !
130
+ data: Data ( ) ,
131
+ response: HTTPResponse ( status: . init( code: 404 ) )
133
132
)
134
133
}
135
134
@@ -155,14 +154,12 @@ final class AuthClientTests: XCTestCase {
155
154
}
156
155
157
156
func testSignOutShouldRemoveSessionIfJWTIsInvalid( ) async throws {
158
- sut = makeSUT { _ in
157
+ sut = makeSUT { _, _ in
159
158
throw AuthError . api (
160
159
message: " " ,
161
160
errorCode: . invalidCredentials,
162
- underlyingData: Data ( ) ,
163
- underlyingResponse: HTTPURLResponse (
164
- url: URL ( string: " http://localhost " ) !, statusCode: 401 , httpVersion: nil ,
165
- headerFields: nil ) !
161
+ data: Data ( ) ,
162
+ response: HTTPResponse ( status: . init( code: 401 ) )
166
163
)
167
164
}
168
165
@@ -188,14 +185,12 @@ final class AuthClientTests: XCTestCase {
188
185
}
189
186
190
187
func testSignOutShouldRemoveSessionIf403Returned( ) async throws {
191
- sut = makeSUT { _ in
188
+ sut = makeSUT { _, _ in
192
189
throw AuthError . api (
193
190
message: " " ,
194
191
errorCode: . invalidCredentials,
195
- underlyingData: Data ( ) ,
196
- underlyingResponse: HTTPURLResponse (
197
- url: URL ( string: " http://localhost " ) !, statusCode: 403 , httpVersion: nil ,
198
- headerFields: nil ) !
192
+ data: Data ( ) ,
193
+ response: HTTPResponse ( status: . init( code: 403 ) )
199
194
)
200
195
}
201
196
@@ -223,8 +218,8 @@ final class AuthClientTests: XCTestCase {
223
218
func testSignInAnonymously( ) async throws {
224
219
let session = Session ( fromMockNamed: " anonymous-sign-in-response " )
225
220
226
- let sut = makeSUT { _ in
227
- . stub( fromFileName: " anonymous-sign-in-response " )
221
+ let sut = makeSUT { _, _ in
222
+ TestStub . stub ( fromFileName: " anonymous-sign-in-response " )
228
223
}
229
224
230
225
let eventsTask = Task {
@@ -243,8 +238,8 @@ final class AuthClientTests: XCTestCase {
243
238
}
244
239
245
240
func testSignInWithOAuth( ) async throws {
246
- let sut = makeSUT { _ in
247
- . stub( fromFileName: " session " )
241
+ let sut = makeSUT { _, _ in
242
+ TestStub . stub ( fromFileName: " session " )
248
243
}
249
244
250
245
let eventsTask = Task {
@@ -266,8 +261,8 @@ final class AuthClientTests: XCTestCase {
266
261
}
267
262
268
263
func testGetLinkIdentityURL( ) async throws {
269
- let sut = makeSUT { _ in
270
- . stub(
264
+ let sut = makeSUT { _, _ in
265
+ TestStub . stub (
271
266
"""
272
267
{
273
268
" url " : " https://github.com/login/oauth/authorize?client_id=1234&redirect_to=com.supabase.swift-examples://&redirect_uri=http://127.0.0.1:54321/auth/v1/callback&response_type=code&scope=user:email&skip_http_redirect=true&state=jwt "
@@ -295,8 +290,8 @@ final class AuthClientTests: XCTestCase {
295
290
func testLinkIdentity( ) async throws {
296
291
let url =
297
292
" https://github.com/login/oauth/authorize?client_id=1234&redirect_to=com.supabase.swift-examples://&redirect_uri=http://127.0.0.1:54321/auth/v1/callback&response_type=code&scope=user:email&skip_http_redirect=true&state=jwt "
298
- let sut = makeSUT { _ in
299
- . stub(
293
+ let sut = makeSUT { _, _ in
294
+ TestStub . stub (
300
295
"""
301
296
{
302
297
" url " : " \( url) "
@@ -318,12 +313,12 @@ final class AuthClientTests: XCTestCase {
318
313
}
319
314
320
315
func testAdminListUsers( ) async throws {
321
- let sut = makeSUT { _ in
322
- . stub(
316
+ let sut = makeSUT { _, _ in
317
+ TestStub . stub (
323
318
fromFileName: " list-users-response " ,
324
319
headers: [
325
- " X-Total-Count " : " 669 " ,
326
- " Link " :
320
+ . xTotalCount : " 669 " ,
321
+ . link :
327
322
" </admin/users?page=2&per_page=>; rel= \" next \" , </admin/users?page=14&per_page=>; rel= \" last \" " ,
328
323
]
329
324
)
@@ -336,12 +331,12 @@ final class AuthClientTests: XCTestCase {
336
331
}
337
332
338
333
func testAdminListUsers_noNextPage( ) async throws {
339
- let sut = makeSUT { _ in
340
- . stub(
334
+ let sut = makeSUT { _, _ in
335
+ TestStub . stub (
341
336
fromFileName: " list-users-response " ,
342
337
headers: [
343
- " X-Total-Count " : " 669 " ,
344
- " Link " : " </admin/users?page=14&per_page=>; rel= \" last \" " ,
338
+ . xTotalCount : " 669 " ,
339
+ . link : " </admin/users?page=14&per_page=>; rel= \" last \" " ,
345
340
]
346
341
)
347
342
}
@@ -378,20 +373,20 @@ final class AuthClientTests: XCTestCase {
378
373
}
379
374
380
375
private func makeSUT(
381
- fetch: ( ( URLRequest ) async throws -> HTTPResponse ) ? = nil
376
+ fetch: ( ( HTTPRequest , Data ? ) async throws -> ( Data , HTTPResponse ) ) ? = nil
382
377
) -> AuthClient {
383
378
let configuration = AuthClient . Configuration (
384
379
url: clientURL,
385
- headers: [ " Apikey " : " dummy.api.key " ] ,
380
+ headers: [ . apiKey : " dummy.api.key " ] ,
386
381
localStorage: storage,
387
382
logger: nil ,
388
- fetch: { request in
383
+ fetch: { request, body in
389
384
guard let fetch else {
390
385
throw UnimplementedError ( )
391
386
}
392
387
393
- let response = try await fetch ( request)
394
- return ( response . data, response. underlyingResponse )
388
+ let ( data , response) = try await fetch ( request, body )
389
+ return ( data, response)
395
390
}
396
391
)
397
392
@@ -401,52 +396,47 @@ final class AuthClientTests: XCTestCase {
401
396
}
402
397
}
403
398
404
- extension HTTPResponse {
399
+ struct TestStub {
405
400
static func stub(
406
401
_ body: String = " " ,
407
402
code: Int = 200 ,
408
- headers: [ String : String ] ? = nil
409
- ) -> HTTPResponse {
410
- HTTPResponse (
411
- data: body. data ( using: . utf8) !,
412
- response: HTTPURLResponse (
413
- url: clientURL,
414
- statusCode: code,
415
- httpVersion: nil ,
403
+ headers: HTTPFields = [ : ]
404
+ ) -> ( Data , HTTPResponse ) {
405
+ (
406
+ Data ( body. utf8) ,
407
+ HTTPResponse (
408
+ status: . init( code: code) ,
416
409
headerFields: headers
417
- ) !
410
+ )
418
411
)
419
412
}
420
413
421
414
static func stub(
422
415
fromFileName fileName: String ,
423
416
code: Int = 200 ,
424
- headers: [ String : String ] ? = nil
425
- ) -> HTTPResponse {
426
- HTTPResponse (
427
- data: json ( named: fileName) ,
428
- response: HTTPURLResponse (
429
- url: clientURL,
430
- statusCode: code,
431
- httpVersion: nil ,
417
+ headers: HTTPFields = [ : ]
418
+ ) -> ( Data , HTTPResponse ) {
419
+ (
420
+ json ( named: fileName) ,
421
+ HTTPResponse (
422
+ status: . init( code: code) ,
432
423
headerFields: headers
433
- ) !
424
+ )
434
425
)
435
426
}
436
427
437
428
static func stub(
438
429
_ value: some Encodable ,
439
430
code: Int = 200 ,
440
- headers: [ String : String ] ? = nil
441
- ) -> HTTPResponse {
442
- HTTPResponse (
443
- data: try ! AuthClient . Configuration. jsonEncoder. encode ( value) ,
444
- response: HTTPURLResponse (
445
- url: clientURL,
446
- statusCode: code,
447
- httpVersion: nil ,
431
+ headers: HTTPFields = [ : ]
432
+ ) -> ( Data , HTTPResponse ) {
433
+ (
434
+ try ! AuthClient . Configuration. jsonEncoder. encode ( value) ,
435
+ HTTPResponse (
436
+ status: . init( code: code) ,
448
437
headerFields: headers
449
- ) !
438
+ )
450
439
)
440
+
451
441
}
452
442
}
0 commit comments