amplify-swift/AmplifyPlugins/Auth/Tests/AWSCognitoAuthPluginUnitTests/ActionTests/FetchAuthSession/FetchAWSCredentials/FetchAuthAWSCredentialsTest...

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)
}
}