186 lines
6.1 KiB
Swift
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)
|
|
}
|
|
}
|