amplify-swift/AmplifyPlugins/API/AWSAPICategoryPluginTests/Configuration/AWSAPIEndpointInterceptorsT...

91 lines
3.9 KiB
Swift

//
// Copyright Amazon.com Inc. or its affiliates.
// All Rights Reserved.
//
// SPDX-License-Identifier: Apache-2.0
//
import XCTest
import Amplify
import AWSPluginsCore
@testable import AmplifyTestCommon
@testable import AWSAPICategoryPlugin
class AWSAPIEndpointInterceptorsTests: XCTestCase {
let endpointName = "endpointName"
let apiKey = "apiKey-123456789"
var config: AWSAuthorizationConfiguration?
override func setUpWithError() throws {
config = try AWSAuthorizationConfiguration.makeConfiguration(authType: .apiKey,
region: .USWest2,
apiKey: apiKey)
}
/// Given: an AWSAPIEndpointInterceptors
/// When: a new auth interceptor is added
/// Then: the interceptor is correctly stored
func testAddAuthInterceptor() throws {
var interceptorConfig = createAPIInterceptorConfig()
try interceptorConfig.addAuthInterceptorsToEndpoint(endpointType: .graphQL, authConfiguration: config!)
XCTAssertEqual(interceptorConfig.interceptors.count, 1)
}
/// Given: an AWSAPIEndpointInterceptors
/// When: a new multiple interceptors are added
/// Then: the interceptors are correctly associated to an endpoint
func testAddMutipleInterceptors() throws {
var interceptorConfig = createAPIInterceptorConfig()
try interceptorConfig.addAuthInterceptorsToEndpoint(endpointType: .graphQL, authConfiguration: config!)
interceptorConfig.addInterceptor(CustomInterceptor())
XCTAssertEqual(interceptorConfig.interceptors.count, 2)
}
func testaddMultipleAuthInterceptors() throws {
let apiKeyConfig = try AWSAuthorizationConfiguration.makeConfiguration(authType: .apiKey,
region: .USWest2,
apiKey: apiKey)
let awsIAMConfig = try AWSAuthorizationConfiguration.makeConfiguration(authType: .awsIAM,
region: .USWest2,
apiKey: apiKey)
let userPoolConfig = try AWSAuthorizationConfiguration.makeConfiguration(authType: .amazonCognitoUserPools,
region: .USWest2, apiKey: nil)
var interceptorConfig = createAPIInterceptorConfig()
try interceptorConfig.addAuthInterceptorsToEndpoint(endpointType: .graphQL,
authConfiguration: apiKeyConfig)
try interceptorConfig.addAuthInterceptorsToEndpoint(endpointType: .graphQL,
authConfiguration: awsIAMConfig)
try interceptorConfig.addAuthInterceptorsToEndpoint(endpointType: .graphQL,
authConfiguration: userPoolConfig)
XCTAssertEqual(interceptorConfig.interceptors.count, 3)
XCTAssertNotNil(interceptorConfig.interceptors[0] as? APIKeyURLRequestInterceptor)
XCTAssertNotNil(interceptorConfig.interceptors[1] as? IAMURLRequestInterceptor)
XCTAssertNotNil(interceptorConfig.interceptors[2] as? AuthTokenURLRequestInterceptor)
}
// MARK: - Test Helpers
func createAPIInterceptorConfig() -> AWSAPIEndpointInterceptors {
return AWSAPIEndpointInterceptors(
endpointName: endpointName,
apiAuthProviderFactory: APIAuthProviderFactory(),
authService: MockAWSAuthService())
}
struct CustomInterceptor: URLRequestInterceptor {
func intercept(_ request: URLRequest) throws -> URLRequest {
return request
}
}
}