amplify-swift/AmplifyPlugins/Auth/Tests/AuthHostApp/AuthIntegrationTests/AuthEventTests/AuthEventIntegrationTests.s...

186 lines
6.1 KiB
Swift

//
// Copyright Amazon.com Inc. or its affiliates.
// All Rights Reserved.
//
// SPDX-License-Identifier: Apache-2.0
//
import XCTest
@testable import Amplify
import AWSCognitoAuthPlugin
class AuthEventIntegrationTests: AWSAuthBaseTest {
var unsubscribeToken: UnsubscribeToken!
override func setUp() async throws {
try await super.setUp()
AuthSessionHelper.clearSession()
}
override func tearDown() async throws {
try await super.tearDown()
AuthSessionHelper.clearSession()
}
/// Test hub event for successful signIn
/// of a valid user
///
/// - Given: A user registered in Cognito user pool
/// - When:
/// - I invoke Amplify.Auth.signIn with the username and password
/// - Then:
/// - I should get a completed signIn flow event.
///
func testSuccessfulSignInEvent() async throws {
let username = "integTest\(UUID().uuidString)"
let password = "P123@\(UUID().uuidString)"
let signInExpectation = asyncExpectation(description: "SignIn event should be fired")
unsubscribeToken = Amplify.Hub.listen(to: .auth) { payload in
switch payload.eventName {
case HubPayload.EventName.Auth.signedIn:
Task {
await signInExpectation.fulfill()
}
default:
break
}
}
_ = try await AuthSignInHelper.registerAndSignInUser(
username: username,
password: password,
email: defaultTestEmail)
await waitForExpectations([signInExpectation], timeout: networkTimeout)
}
/// Test hub event for successful signOut of a valid user
///
/// - Given: A user registered in Cognito user pool
/// - When:
/// - I invoke Amplify.Auth.signOut with the username and password
/// - Then:
/// - I should get a completed signOut flow event.
///
func testSuccessfulSignOutEvent() async throws {
let username = "integTest\(UUID().uuidString)"
let password = "P123@\(UUID().uuidString)"
let signOutExpectation = asyncExpectation(description: "SignOut event should be fired")
unsubscribeToken = Amplify.Hub.listen(to: .auth) { payload in
switch payload.eventName {
case HubPayload.EventName.Auth.signedOut:
Task {
await signOutExpectation.fulfill()
}
default:
break
}
}
_ = try await AuthSignInHelper.registerAndSignInUser(
username: username,
password: password,
email: defaultTestEmail)
_ = await Amplify.Auth.signOut()
await waitForExpectations([signOutExpectation], timeout: networkTimeout)
}
/// Test hub event for session expired of a valid user
///
/// - Given: A user registered in Cognito user pool
/// - When:
/// - I invoke Amplify.Auth.fetchAuthSession
/// - Then:
/// - I should get a session expired flow event.
///
func testSessionExpiredEvent() async throws {
throw XCTSkip("TODO: fix this test. We need to find a way to mock credential store")
let username = "integTest\(UUID().uuidString)"
let password = "P123@\(UUID().uuidString)"
let signInExpectation = asyncExpectation(description: "SignIn event should be fired")
let sessionExpiredExpectation = asyncExpectation(description: "Session expired event should be fired")
unsubscribeToken = Amplify.Hub.listen(to: .auth) { payload in
switch payload.eventName {
case HubPayload.EventName.Auth.signedIn:
Task {
await signInExpectation.fulfill()
}
case HubPayload.EventName.Auth.sessionExpired:
Task {
await sessionExpiredExpectation.fulfill()
}
default:
break
}
}
do {
_ = try await AuthSignInHelper.registerAndSignInUser(
username: username,
password: password,
email: defaultTestEmail)
} catch {
_ = try await Amplify.Auth.fetchAuthSession()
AuthSessionHelper.invalidateSession(with: self.amplifyConfiguration)
_ = try await Amplify.Auth.fetchAuthSession()
}
await waitForExpectations( [signInExpectation, sessionExpiredExpectation], timeout: networkTimeout)
}
/// Test hub event for successful deletion of a valid user
///
/// - Given: A user registered in Cognito user pool
/// - When:
/// - I invoke Amplify.Auth.deleteUser
/// - Then:
/// - I should get successful deleteUser flow event
///
func testSuccessfulDeletedUserEvent() async throws {
let username = "integTest\(UUID().uuidString)"
let password = "P123@\(UUID().uuidString)"
let signInExpectation = asyncExpectation(description: "SignIn operation should complete")
let deletedUserExpectation = asyncExpectation(description: "UserDeleted event should be fired")
unsubscribeToken = Amplify.Hub.listen(to: .auth) { payload in
switch payload.eventName {
case HubPayload.EventName.Auth.signedIn:
Task {
await signInExpectation.fulfill()
}
case HubPayload.EventName.Auth.userDeleted:
Task {
await deletedUserExpectation.fulfill()
}
default:
break
}
}
_ = try await AuthSignInHelper.registerAndSignInUser(
username: username,
password: password,
email: defaultTestEmail)
await waitForExpectations( [signInExpectation], timeout: networkTimeout)
do {
try await Amplify.Auth.deleteUser()
print("Success deleteUser")
} catch {
XCTFail("deleteUser should not fail - \(error)")
}
await waitForExpectations( [deletedUserExpectation], timeout: networkTimeout)
}
}