173 lines
6.5 KiB
Swift
173 lines
6.5 KiB
Swift
//
|
|
// Copyright Amazon.com Inc. or its affiliates.
|
|
// All Rights Reserved.
|
|
//
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
//
|
|
|
|
import XCTest
|
|
|
|
import AWSCognitoIdentity
|
|
import Amplify
|
|
|
|
@testable import AWSCognitoAuthPlugin
|
|
|
|
class FetchAuthAWSCredentialsTests: XCTestCase {
|
|
|
|
func testNoEnvironment() async {
|
|
|
|
let expectation = expectation(description: "noAuthorizationEnvironment")
|
|
|
|
let action = FetchAuthAWSCredentials(loginsMap: [:], identityID: "identityID")
|
|
|
|
await action.execute(withDispatcher: MockDispatcher { event in
|
|
|
|
guard let event = event as? FetchAuthSessionEvent else {return}
|
|
|
|
if case let .throwError(error) = event.eventType {
|
|
XCTAssertNotNil(error)
|
|
XCTAssertEqual(error, .noIdentityPool)
|
|
expectation.fulfill()
|
|
}
|
|
}, environment: MockInvalidEnvironment())
|
|
await waitForExpectations(timeout: 0.1)
|
|
}
|
|
|
|
func testInvalidIdentitySuccessfullResponse() async {
|
|
|
|
let expectation = expectation(description: "fetchAWSCredentials")
|
|
let identityProviderFactory: BasicAuthorizationEnvironment.CognitoIdentityFactory = {
|
|
MockIdentity(mockGetCredentialsResponse: { _ in
|
|
return GetCredentialsForIdentityOutputResponse()
|
|
})
|
|
}
|
|
let authorizationEnvironment = BasicAuthorizationEnvironment(
|
|
identityPoolConfiguration: IdentityPoolConfigurationData.testData,
|
|
cognitoIdentityFactory: identityProviderFactory)
|
|
let authEnvironment = Defaults.makeDefaultAuthEnvironment(
|
|
authZEnvironment: authorizationEnvironment)
|
|
|
|
let action = FetchAuthAWSCredentials(loginsMap: [:], identityID: "identityID")
|
|
|
|
await action.execute(withDispatcher: MockDispatcher { event in
|
|
|
|
guard let event = event as? FetchAuthSessionEvent else { return }
|
|
|
|
if case let .throwError(error) = event.eventType {
|
|
XCTAssertNotNil(error)
|
|
XCTAssertEqual(error, .invalidIdentityID)
|
|
expectation.fulfill()
|
|
}
|
|
}, environment: authEnvironment)
|
|
|
|
await waitForExpectations(timeout: 0.1)
|
|
}
|
|
|
|
func testInvalidAWSCredentialSuccessfulResponse() async {
|
|
|
|
let expectation = expectation(description: "fetchAWSCredentials")
|
|
let identityProviderFactory: BasicAuthorizationEnvironment.CognitoIdentityFactory = {
|
|
MockIdentity(mockGetCredentialsResponse: { _ in
|
|
return GetCredentialsForIdentityOutputResponse(identityId: "identityId")
|
|
})
|
|
}
|
|
let authorizationEnvironment = BasicAuthorizationEnvironment(
|
|
identityPoolConfiguration: IdentityPoolConfigurationData.testData,
|
|
cognitoIdentityFactory: identityProviderFactory)
|
|
let authEnvironment = Defaults.makeDefaultAuthEnvironment(
|
|
authZEnvironment: authorizationEnvironment)
|
|
|
|
let action = FetchAuthAWSCredentials(loginsMap: [:], identityID: "identityID")
|
|
|
|
await action.execute(
|
|
withDispatcher: MockDispatcher { event in
|
|
|
|
guard let event = event as? FetchAuthSessionEvent else { return }
|
|
|
|
if case let .throwError(error) = event.eventType {
|
|
XCTAssertNotNil(error)
|
|
XCTAssertEqual(error, .invalidAWSCredentials)
|
|
expectation.fulfill()
|
|
}
|
|
},
|
|
environment: authEnvironment
|
|
)
|
|
|
|
await waitForExpectations(timeout: 0.1)
|
|
}
|
|
|
|
func testValidSuccessfulResponse() async {
|
|
|
|
let credentialValidExpectation = expectation(description: "awsCredentialsAreValid")
|
|
|
|
let expectedIdentityId = "newIdentityId"
|
|
let expectedSecretKey = "newSecretKey"
|
|
let expectedSessionToken = "newSessionToken"
|
|
let expectedAccessKey = "newAccessKey"
|
|
|
|
let identityProviderFactory: BasicAuthorizationEnvironment.CognitoIdentityFactory = {
|
|
MockIdentity(mockGetCredentialsResponse: { _ in
|
|
return GetCredentialsForIdentityOutputResponse(
|
|
credentials: CognitoIdentityClientTypes.Credentials(
|
|
accessKeyId: expectedAccessKey,
|
|
expiration: Date(),
|
|
secretKey: expectedSecretKey,
|
|
sessionToken: expectedSessionToken),
|
|
identityId: expectedIdentityId)
|
|
})
|
|
}
|
|
let authorizationEnvironment = BasicAuthorizationEnvironment(
|
|
identityPoolConfiguration: IdentityPoolConfigurationData.testData,
|
|
cognitoIdentityFactory: identityProviderFactory)
|
|
let authEnvironment = Defaults.makeDefaultAuthEnvironment(
|
|
authZEnvironment: authorizationEnvironment)
|
|
|
|
let action = FetchAuthAWSCredentials(loginsMap: [:], identityID: "identityID")
|
|
|
|
await action.execute(
|
|
withDispatcher: MockDispatcher { event in
|
|
|
|
if let event = event as? FetchAuthSessionEvent,
|
|
case .fetchedAWSCredentials = event.eventType {
|
|
credentialValidExpectation.fulfill()
|
|
}
|
|
},
|
|
environment: authEnvironment
|
|
)
|
|
await waitForExpectations(timeout: 0.1)
|
|
}
|
|
|
|
func testFailureResponse() async {
|
|
let expectation = expectation(description: "failureError")
|
|
let testError = NSError(domain: "testError", code: 0, userInfo: nil)
|
|
|
|
let identityProviderFactory: BasicAuthorizationEnvironment.CognitoIdentityFactory = {
|
|
MockIdentity(mockGetCredentialsResponse: { _ in
|
|
throw testError
|
|
})
|
|
}
|
|
let authorizationEnvironment = BasicAuthorizationEnvironment(
|
|
identityPoolConfiguration: IdentityPoolConfigurationData.testData,
|
|
cognitoIdentityFactory: identityProviderFactory)
|
|
let authEnvironment = Defaults.makeDefaultAuthEnvironment(
|
|
authZEnvironment: authorizationEnvironment)
|
|
|
|
let action = FetchAuthAWSCredentials(loginsMap: [:], identityID: "identityID")
|
|
|
|
await action.execute(
|
|
withDispatcher: MockDispatcher { event in
|
|
|
|
if let fetchAWSCredentialEvent = event as? FetchAuthSessionEvent,
|
|
case let .throwError(error) = fetchAWSCredentialEvent.eventType {
|
|
XCTAssertNotNil(error)
|
|
XCTAssertEqual(error, .service(testError))
|
|
expectation.fulfill()
|
|
}
|
|
},
|
|
environment: authEnvironment
|
|
)
|
|
await waitForExpectations(timeout: 0.1)
|
|
}
|
|
|
|
}
|