Skip to content

Commit 9d3cbfc

Browse files
committed
Unit tests updated
1 parent 22af999 commit 9d3cbfc

File tree

6 files changed

+60
-33
lines changed

6 files changed

+60
-33
lines changed

App/ContentView.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ struct ContentView: View {
4545
Button {
4646
Task {
4747
#if WEB_AUTH_PLATFORM
48-
4948
#if os(macOS)
5049
await viewModel.logout(presentationWindow: currentWindow)
5150
#else

App/ContentViewModel.swift

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,7 @@ final class ContentViewModel: ObservableObject {
4343
errorMessage = nil
4444
#if !os(tvOS) && !os(watchOS)
4545
do {
46-
var webAuth = Auth0.webAuth()
47-
48-
if let window = window {
49-
webAuth = webAuth.presentationWindow(window)
50-
}
51-
52-
try await webAuth.clearSession()
46+
try await Auth0.webAuth().clearSession()
5347

5448
let cleared = credentialsManager.clear()
5549
if cleared {

Auth0.xcodeproj/project.pbxproj

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3983,6 +3983,7 @@
39833983
PRODUCT_NAME = "$(TARGET_NAME)";
39843984
PROVISIONING_PROFILE = "";
39853985
PROVISIONING_PROFILE_SPECIFIER = "";
3986+
SWIFT_ACTIVE_COMPILATION_CONDITIONS = WEB_AUTH_PLATFORM;
39863987
SWIFT_VERSION = 5.0;
39873988
};
39883989
name = Debug;
@@ -4007,6 +4008,7 @@
40074008
PRODUCT_BUNDLE_IDENTIFIER = com.auth0.OAuth2;
40084009
PRODUCT_NAME = "$(TARGET_NAME)";
40094010
PROVISIONING_PROFILE_SPECIFIER = "";
4011+
SWIFT_ACTIVE_COMPILATION_CONDITIONS = WEB_AUTH_PLATFORM;
40104012
SWIFT_VERSION = 5.0;
40114013
};
40124014
name = Release;
@@ -4047,7 +4049,7 @@
40474049
PRODUCT_NAME = "$(TARGET_NAME)";
40484050
SDKROOT = xros;
40494051
SUPPORTED_PLATFORMS = "xros xrsimulator";
4050-
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "";
4052+
SWIFT_ACTIVE_COMPILATION_CONDITIONS = WEB_AUTH_PLATFORM;
40514053
SWIFT_EMIT_LOC_STRINGS = NO;
40524054
SWIFT_VERSION = 5.0;
40534055
TARGETED_DEVICE_FAMILY = "1,2,7";

Auth0/Requestable.swift

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import Foundation
2+
import Combine
23

34
public protocol Requestable<ResultType, ErrorType> {
45
associatedtype ResultType
@@ -7,4 +8,32 @@ public protocol Requestable<ResultType, ErrorType> {
78
func parameters(_ extraParameters: [String: Any]) -> any Requestable<ResultType, ErrorType>
89
func headers(_ extraHeaders: [String: String]) -> any Requestable<ResultType, ErrorType>
910
func requestValidators(_ extraValidators: [RequestValidator]) -> any Requestable<ResultType, ErrorType>
11+
func start() -> AnyPublisher<ResultType, ErrorType>
12+
func start() async throws -> ResultType
13+
}
14+
15+
// DPoP is an internal implementation detail of Request<T, E>. This extension allows tests
16+
// to access it via the Requestable protocol without depending on the concrete return type.
17+
extension Requestable {
18+
var dpop: DPoP? { (self as? Request<ResultType, ErrorType>)?.dpop }
19+
}
20+
21+
// MARK: - Combine
22+
23+
public extension Requestable {
24+
func start() -> AnyPublisher<ResultType, ErrorType> {
25+
return Deferred { Future(self.start) }.eraseToAnyPublisher()
26+
}
27+
}
28+
29+
// MARK: - Async/Await
30+
31+
public extension Requestable {
32+
func start() async throws -> ResultType {
33+
return try await withCheckedThrowingContinuation { continuation in
34+
self.start { result in
35+
continuation.resume(with: result)
36+
}
37+
}
38+
}
1039
}

Auth0Tests/MFA/Auth0MFAClientTests.swift

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,7 @@ struct Auth0MFAClientTests {
343343

344344
@Test
345345
func testEnrollOTPWithRecoveryCodes() async {
346-
let request: Request<OTPMFAEnrollmentChallenge, MfaEnrollmentError> = Auth0.mfa(clientId: "", domain: "", session: makeMockSession()).enroll(mfaToken: "")
346+
let request: any Requestable<OTPMFAEnrollmentChallenge, MfaEnrollmentError> = Auth0.mfa(clientId: "", domain: "", session: makeMockSession()).enroll(mfaToken: "")
347347

348348
do {
349349
try await confirmation(expectedCount: 1) { confirmation in
@@ -372,7 +372,7 @@ struct Auth0MFAClientTests {
372372

373373
@Test
374374
func testEnrollOTPWithoutRecoveryCodes() async {
375-
let request: Request<OTPMFAEnrollmentChallenge, MfaEnrollmentError> = Auth0.mfa(clientId: "", domain: "", session: makeMockSession()).enroll(mfaToken: "")
375+
let request: any Requestable<OTPMFAEnrollmentChallenge, MfaEnrollmentError> = Auth0.mfa(clientId: "", domain: "", session: makeMockSession()).enroll(mfaToken: "")
376376

377377
do {
378378
try await confirmation(expectedCount: 1) { confirmation in
@@ -400,7 +400,7 @@ struct Auth0MFAClientTests {
400400

401401
@Test
402402
func testEnrollPushWithRecoveryCodes() async {
403-
let request: Request<PushMFAEnrollmentChallenge, MfaEnrollmentError> = Auth0.mfa(clientId: "", domain: "", session: makeMockSession()).enroll(mfaToken: "")
403+
let request: any Requestable<PushMFAEnrollmentChallenge, MfaEnrollmentError> = Auth0.mfa(clientId: "", domain: "", session: makeMockSession()).enroll(mfaToken: "")
404404

405405
do {
406406
try await confirmation(expectedCount: 1) { confirmation in
@@ -428,7 +428,7 @@ struct Auth0MFAClientTests {
428428

429429
@Test
430430
func testEnrollPushWithoutRecoveryCodes() async {
431-
let request: Request<PushMFAEnrollmentChallenge, MfaEnrollmentError> = Auth0.mfa(clientId: "", domain: "", session: makeMockSession()).enroll(mfaToken: "")
431+
let request: any Requestable<PushMFAEnrollmentChallenge, MfaEnrollmentError> = Auth0.mfa(clientId: "", domain: "", session: makeMockSession()).enroll(mfaToken: "")
432432

433433
do {
434434
try await confirmation(expectedCount: 1) { confirmation in
@@ -482,7 +482,7 @@ struct Auth0MFAClientTests {
482482

483483
@Test
484484
func testVerifyOOBSuccess() async {
485-
let request: Request<Credentials, MFAVerifyError> = Auth0.mfa(clientId: "", domain: "", session: makeMockSession()).verify(oobCode: "oob123", bindingCode: "bind456", mfaToken: "mfa_token")
485+
let request: any Requestable<Credentials, MFAVerifyError> = Auth0.mfa(clientId: "", domain: "", session: makeMockSession()).verify(oobCode: "oob123", bindingCode: "bind456", mfaToken: "mfa_token")
486486

487487
do {
488488
try await confirmation(expectedCount: 1) { confirmation in
@@ -509,7 +509,7 @@ struct Auth0MFAClientTests {
509509

510510
@Test
511511
func testVerifyOOBWithoutBindingCode() async {
512-
let request: Request<Credentials, MFAVerifyError> = Auth0.mfa(clientId: "", domain: "", session: makeMockSession()).verify(oobCode: "oob123", bindingCode: nil, mfaToken: "mfa_token")
512+
let request: any Requestable<Credentials, MFAVerifyError> = Auth0.mfa(clientId: "", domain: "", session: makeMockSession()).verify(oobCode: "oob123", bindingCode: nil, mfaToken: "mfa_token")
513513

514514
do {
515515
try await confirmation(expectedCount: 1) { confirmation in
@@ -536,7 +536,7 @@ struct Auth0MFAClientTests {
536536

537537
@Test
538538
func testVerifyOTPSuccess() async {
539-
let request: Request<Credentials, MFAVerifyError> = Auth0.mfa(clientId: "", domain: "", session: makeMockSession()).verify(otp: "123456", mfaToken: "mfa_token")
539+
let request: any Requestable<Credentials, MFAVerifyError> = Auth0.mfa(clientId: "", domain: "", session: makeMockSession()).verify(otp: "123456", mfaToken: "mfa_token")
540540

541541
do {
542542
try await confirmation(expectedCount: 1) { confirmation in
@@ -563,7 +563,7 @@ struct Auth0MFAClientTests {
563563

564564
@Test
565565
func testVerifyRecoveryCodeSuccess() async {
566-
let request: Request<Credentials, MFAVerifyError> = Auth0.mfa(clientId: "", domain: "", session: makeMockSession()).verify(recoveryCode: "RECOVERY123", mfaToken: "mfa_token")
566+
let request: any Requestable<Credentials, MFAVerifyError> = Auth0.mfa(clientId: "", domain: "", session: makeMockSession()).verify(recoveryCode: "RECOVERY123", mfaToken: "mfa_token")
567567

568568
do {
569569
try await confirmation(expectedCount: 1) { confirmation in
@@ -641,7 +641,7 @@ struct Auth0MFAClientTests {
641641

642642
@Test
643643
func testOTPEnrollmentFailure() async {
644-
let request: Request<OTPMFAEnrollmentChallenge, MfaEnrollmentError> = Auth0.mfa(clientId: "", domain: "", session: makeMockSession()).enroll(mfaToken: "expired_token")
644+
let request: any Requestable<OTPMFAEnrollmentChallenge, MfaEnrollmentError> = Auth0.mfa(clientId: "", domain: "", session: makeMockSession()).enroll(mfaToken: "expired_token")
645645

646646
MockURLProtocol.requestHandler = { _ in
647647
let response = HTTPURLResponse(
@@ -691,7 +691,7 @@ struct Auth0MFAClientTests {
691691

692692
@Test
693693
func testVerifyOOBFailure() async {
694-
let request: Request<Credentials, MFAVerifyError> = Auth0.mfa(clientId: "", domain: "", session: makeMockSession()).verify(oobCode: "invalid", bindingCode: nil, mfaToken: "")
694+
let request: any Requestable<Credentials, MFAVerifyError> = Auth0.mfa(clientId: "", domain: "", session: makeMockSession()).verify(oobCode: "invalid", bindingCode: nil, mfaToken: "")
695695

696696
MockURLProtocol.requestHandler = { _ in
697697
let response = HTTPURLResponse(
@@ -716,7 +716,7 @@ struct Auth0MFAClientTests {
716716

717717
@Test
718718
func testVerifyOTPFailure() async {
719-
let request: Request<Credentials, MFAVerifyError> = Auth0.mfa(clientId: "", domain: "", session: makeMockSession()).verify(otp: "000000", mfaToken: "")
719+
let request: any Requestable<Credentials, MFAVerifyError> = Auth0.mfa(clientId: "", domain: "", session: makeMockSession()).verify(otp: "000000", mfaToken: "")
720720

721721
MockURLProtocol.requestHandler = { _ in
722722
let response = HTTPURLResponse(
@@ -741,7 +741,7 @@ struct Auth0MFAClientTests {
741741

742742
@Test
743743
func testVerifyRecoveryCodeFailure() async {
744-
let request: Request<Credentials, MFAVerifyError> = Auth0.mfa(clientId: "", domain: "", session: makeMockSession()).verify(recoveryCode: "INVALID", mfaToken: "")
744+
let request: any Requestable<Credentials, MFAVerifyError> = Auth0.mfa(clientId: "", domain: "", session: makeMockSession()).verify(recoveryCode: "INVALID", mfaToken: "")
745745

746746
MockURLProtocol.requestHandler = { _ in
747747
let response = HTTPURLResponse(
@@ -791,7 +791,7 @@ struct Auth0MFAClientTests {
791791

792792
@Test
793793
func testPushEnrollmentFailure() async {
794-
let request: Request<PushMFAEnrollmentChallenge, MfaEnrollmentError> = Auth0.mfa(clientId: "", domain: "", session: makeMockSession()).enroll(mfaToken: "")
794+
let request: any Requestable<PushMFAEnrollmentChallenge, MfaEnrollmentError> = Auth0.mfa(clientId: "", domain: "", session: makeMockSession()).enroll(mfaToken: "")
795795

796796
MockURLProtocol.requestHandler = { _ in
797797
let response = HTTPURLResponse(

Auth0Tests/RequestSpec.swift

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -52,30 +52,32 @@ class RequestSpec: QuickSpec {
5252
}
5353

5454
it("should create a new request with extra parameters") {
55-
let request = Request().parameters(["foo": "bar"])
55+
let request = Request().parameters(["foo": "bar"]) as! Request<[String: Any], AuthenticationError>
5656
expect(request.parameters["foo"] as? String) == "bar"
5757
}
5858

5959
it("should merge extra parameters with existing parameters") {
60-
let request = Request(parameters: ["foo": "bar"]).parameters(["baz": "qux"])
60+
let request = Request(parameters: ["foo": "bar"]).parameters(["baz": "qux"]) as! Request<[String: Any], AuthenticationError>
6161
expect(request.parameters["foo"] as? String) == "bar"
6262
expect(request.parameters["baz"] as? String) == "qux"
6363
}
6464

6565
it("should overwrite existing parameters with extra parameters") {
66-
let request = Request(parameters: ["foo": "bar"]).parameters(["foo": "baz"])
66+
let request = Request(parameters: ["foo": "bar"]).parameters(["foo": "baz"]) as! Request<[String: Any], AuthenticationError>
6767
expect(request.parameters["foo"] as? String) == "baz"
6868
}
6969

7070
it("should create a new request and not mutate an existing request") {
7171
let request = Request(parameters: ["foo": "bar"])
72-
expect(request.parameters(["foo": "baz"]).parameters["foo"] as? String) == "baz"
72+
let updated = request.parameters(["foo": "baz"]) as! Request<[String: Any], AuthenticationError>
73+
expect(updated.parameters["foo"] as? String) == "baz"
7374
expect(request.parameters["foo"] as? String) == "bar"
7475
}
7576

7677
it("should enforce the openid scope when adding extra parameters") {
7778
let request = Request(parameters: ["foo": "bar"])
78-
expect(request.parameters(["scope": "email phone"]).parameters["scope"] as? String) == "openid email phone"
79+
let updated = request.parameters(["scope": "email phone"]) as! Request<[String: Any], AuthenticationError>
80+
expect(updated.parameters["scope"] as? String) == "openid email phone"
7981
}
8082

8183
it("should add the parameters as query parameters") {
@@ -111,24 +113,25 @@ class RequestSpec: QuickSpec {
111113
}
112114

113115
it("should create a new request with extra headers") {
114-
let request = Request().headers(["foo": "bar"])
116+
let request = Request().headers(["foo": "bar"]) as! Request<[String: Any], AuthenticationError>
115117
expect(request.headers["foo"]) == "bar"
116118
}
117119

118120
it("should merge extra headers with existing headers") {
119-
let request = Request(headers: ["foo": "bar"]).headers(["baz": "qux"])
121+
let request = Request(headers: ["foo": "bar"]).headers(["baz": "qux"]) as! Request<[String: Any], AuthenticationError>
120122
expect(request.headers["foo"]) == "bar"
121123
expect(request.headers["baz"]) == "qux"
122124
}
123125

124126
it("should overwrite existing headers with extra headers") {
125-
let request = Request(headers: ["foo": "bar"]).headers(["foo": "baz"])
127+
let request = Request(headers: ["foo": "bar"]).headers(["foo": "baz"]) as! Request<[String: Any], AuthenticationError>
126128
expect(request.headers["foo"]) == "baz"
127129
}
128130

129131
it("should create a new request and not mutate an existing request") {
130132
let request = Request(headers: ["foo": "bar"])
131-
expect(request.headers(["foo": "baz"]).headers["foo"]) == "baz"
133+
let updated = request.headers(["foo": "baz"]) as! Request<[String: Any], AuthenticationError>
134+
expect(updated.headers["foo"]) == "baz"
132135
expect(request.headers["foo"]) == "bar"
133136
}
134137

@@ -152,12 +155,12 @@ class RequestSpec: QuickSpec {
152155
}
153156

154157
it("should preserve dpop when adding parameters") {
155-
let request = Request(dpop: DPoP()).parameters(["foo": "bar"])
158+
let request = Request(dpop: DPoP()).parameters(["foo": "bar"]) as! Request<[String: Any], AuthenticationError>
156159
expect(request.dpop).toNot(beNil())
157160
}
158161

159162
it("should preserve dpop when adding headers") {
160-
let request = Request(dpop: DPoP()).headers(["foo": "bar"])
163+
let request = Request(dpop: DPoP()).headers(["foo": "bar"]) as! Request<[String: Any], AuthenticationError>
161164
expect(request.dpop).toNot(beNil())
162165
}
163166

0 commit comments

Comments
 (0)