Skip to content

Commit

Permalink
Add two more tests to OAuthTests
Browse files Browse the repository at this point in the history
  • Loading branch information
amy-at-kickstarter committed Feb 21, 2024
1 parent 5dbcfae commit 03df52c
Showing 1 changed file with 63 additions and 0 deletions.
63 changes: 63 additions & 0 deletions Library/OAuthTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -91,4 +91,67 @@ final class OAuthTests: XCTestCase {
}
}
}

func testHandleRedirect_exchangeEndpointReturnsError_fails() {
let urlWithCode = URL(string: "ksrauth2://authenticate?code=a1b2c3")

XCTAssertNil(AppEnvironment.current.currentUser)
XCTAssertNil(AppEnvironment.current.apiService.oauthToken)

// The redirect makes two calls - the first is for token exchange, the second fetches the current user.
let expectedErrorMessage = "The token exchange failed."
let exchangeError = ErrorEnvelope(
errorMessages: [expectedErrorMessage],
ksrCode: .UnknownCode,
httpCode: 403,
exception: nil
)
var currentUser = User.template
currentUser.id = 123_456
let mockService = MockService(loginError: exchangeError)

withEnvironment(apiService: mockService) {
verifyRedirectAsync(redirectURL: urlWithCode, error: nil, verifier: "test_verifier") { result in
if case let .failure(errorMessage: errorMessage) = result {
XCTAssertNil(AppEnvironment.current.currentUser)
XCTAssertNil(AppEnvironment.current.apiService.oauthToken)

XCTAssertEqual(errorMessage, expectedErrorMessage)
} else {
XCTFail("Expected call to fail")
}
}
}
}

func testHandleRedirect_userEndpointReturnsError_fails() {
let urlWithCode = URL(string: "ksrauth2://authenticate?code=a1b2c3")

XCTAssertNil(AppEnvironment.current.currentUser)
XCTAssertNil(AppEnvironment.current.apiService.oauthToken)

// The redirect makes two calls - the first is for token exchange, the second fetches the current user.
let exchangeResponse = OAuthTokenExchangeResponse(token: "test_token")
let expectedErrorMessage = "Unable to load user."
let userError = ErrorEnvelope(
errorMessages: [expectedErrorMessage],
ksrCode: .UnknownCode,
httpCode: 403,
exception: nil
)
let mockService = MockService(fetchUserSelfError: userError, tokenExchangeResponse: exchangeResponse)

withEnvironment(apiService: mockService) {
verifyRedirectAsync(redirectURL: urlWithCode, error: nil, verifier: "test_verifier") { result in
if case let .failure(errorMessage: errorMessage) = result {
XCTAssertNil(AppEnvironment.current.currentUser)
XCTAssertNil(AppEnvironment.current.apiService.oauthToken)

XCTAssertEqual(errorMessage, expectedErrorMessage)
} else {
XCTFail("Expected call to fail")
}
}
}
}
}

0 comments on commit 03df52c

Please sign in to comment.