amplify-swift/AmplifyPlugins/Auth/AWSCognitoAuthPluginTests/HubEventTests/AuthHubEventHandlerTests.swift

136 lines
5.2 KiB
Swift

//
// Copyright Amazon.com Inc. or its affiliates.
// All Rights Reserved.
//
// SPDX-License-Identifier: Apache-2.0
//
import XCTest
@testable import Amplify
@testable import AWSCognitoAuthPlugin
class AuthHubEventHandlerTests: XCTestCase {
var authHandler: AuthHubEventHandler!
override func setUpWithError() throws {
try Amplify.configure(AmplifyConfiguration())
authHandler = AuthHubEventHandler()
}
override func tearDownWithError() throws {
Amplify.reset()
authHandler = nil
}
/// Test whether HubEvent emits a signedIn event for normal signIn operation
///
/// - Given: A listener to hub events
/// - When:
/// - I mock a succesful sign in operation event
/// - Then:
/// - I should receive a signedIn hub event
///
func testSignedInHubEvent() {
let hubEventExpectation = expectation(description: "Should receive the hub event")
_ = Amplify.Hub.listen(to: .auth) { payload in
switch payload.eventName {
case HubPayload.EventName.Auth.signedIn:
hubEventExpectation.fulfill()
default:
break
}
}
mockSuccessfulSignedInEvent()
wait(for: [hubEventExpectation], timeout: 10)
}
/// Test whether HubEvent emits a signedIn event for webUI signIn
///
/// - Given: A listener to hub events
/// - When:
/// - I mock a succesful webui signIn operation event
/// - Then:
/// - I should receive a signedIn hub event
///
func testWebUISignedInHubEvent() {
_ = AuthHubEventHandler()
let hubEventExpectation = expectation(description: "Should receive the hub event")
_ = Amplify.Hub.listen(to: .auth) { payload in
switch payload.eventName {
case HubPayload.EventName.Auth.signedIn:
hubEventExpectation.fulfill()
default:
break
}
}
mockSuccessfulWebUISignedInEvent()
wait(for: [hubEventExpectation], timeout: 10)
}
/// Test whether HubEvent emits a signedIn event for social provider signIn
///
/// - Given: A listener to hub events
/// - When:
/// - I mock a succesful social provider webui signIn operation event
/// - Then:
/// - I should receive a signedIn hub event
///
func testSocialWebUISignedInHubEvent() {
_ = AuthHubEventHandler()
let hubEventExpectation = expectation(description: "Should receive the hub event")
_ = Amplify.Hub.listen(to: .auth) { payload in
switch payload.eventName {
case HubPayload.EventName.Auth.signedIn:
hubEventExpectation.fulfill()
default:
break
}
}
mockSuccessfulSocialWebUISignedInEvent()
wait(for: [hubEventExpectation], timeout: 10)
}
private func mockSuccessfulSocialWebUISignedInEvent() {
let mockResult = AuthSignInResult(nextStep: .done)
let mockEvent = AWSAuthSocialWebUISignInOperation.OperationResult.success(mockResult)
let mockRequest = AuthWebUISignInRequest(presentationAnchor: UIWindow(),
authProvider: .amazon,
options: AuthWebUISignInRequest.Options())
let mockContext = AmplifyOperationContext(operationId: UUID(), request: mockRequest)
let mockPayload = HubPayload(eventName: HubPayload.EventName.Auth.socialWebUISignInAPI,
context: mockContext,
data: mockEvent)
Amplify.Hub.dispatch(to: .auth, payload: mockPayload)
}
private func mockSuccessfulWebUISignedInEvent() {
let mockResult = AuthSignInResult(nextStep: .done)
let mockEvent = AWSAuthWebUISignInOperation.OperationResult.success(mockResult)
let mockRequest = AuthWebUISignInRequest(presentationAnchor: UIWindow(),
options: AuthWebUISignInRequest.Options())
let mockContext = AmplifyOperationContext(operationId: UUID(), request: mockRequest)
let mockPayload = HubPayload(eventName: HubPayload.EventName.Auth.webUISignInAPI,
context: mockContext,
data: mockEvent)
Amplify.Hub.dispatch(to: .auth, payload: mockPayload)
}
private func mockSuccessfulSignedInEvent() {
let mockResult = AuthSignInResult(nextStep: .done)
let mockEvent = AWSAuthSignInOperation.OperationResult.success(mockResult)
let mockRequest = AuthSignInRequest(username: "username",
password: "password",
options: AuthSignInRequest.Options())
let mockContext = AmplifyOperationContext(operationId: UUID(), request: mockRequest)
let mockPayload = HubPayload(eventName: HubPayload.EventName.Auth.signInAPI,
context: mockContext,
data: mockEvent)
Amplify.Hub.dispatch(to: .auth, payload: mockPayload)
}
}