Skip to content

Commit d57e844

Browse files
committed
feat(Auth): Add unit tests for TOTP (#3046)
* feat(Auth): Adding TOTP support in Amplify Auth category * feat(Auth): Adding TOTP related models to AWSCognitoPlugin * feat(Auth): Adding TOTP service behaviour * feat(Auth): Adding TOTP tasks and requests to AWSAuthCognitoPlugin * feat(Auth): Adding TOTP state machine actions * feat(Auth): Adding TOTP states, events, data models and resolvers * feat(Auth): Add unit tests for TOTP * feat(Auth): TOTP Unit test changes
1 parent 759ce39 commit d57e844

26 files changed

+4293
-14
lines changed

AmplifyPlugins/Auth/Sources/AWSCognitoAuthPlugin/AWSCognitoAuthPlugin+Configure.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import Amplify
1111
import AWSCognitoIdentity
1212
import AWSCognitoIdentityProvider
1313
import AWSPluginsCore
14-
1514
import ClientRuntime
1615

1716
extension AWSCognitoAuthPlugin {

AmplifyPlugins/Auth/Tests/AWSCognitoAuthPluginUnitTests/ActionTests/VerifySignInChallenge/VerifySignInChallengeTests.swift

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,11 @@ class VerifySignInChallengeTests: XCTestCase {
1818
username: "usernameMock",
1919
session: "mockSession",
2020
parameters: [:])
21-
let mockConfirmEvent = ConfirmSignInEventData(answer: "1233",
22-
attributes: [:],
23-
metadata: [:])
21+
let mockConfirmEvent = ConfirmSignInEventData(
22+
answer: "1233",
23+
attributes: [:],
24+
metadata: [:],
25+
friendlyDeviceName: nil)
2426

2527
/// Test if valid input are given the service call is made
2628
///

AmplifyPlugins/Auth/Tests/AWSCognitoAuthPluginUnitTests/HubEventTests/AuthHubEventHandlerTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,7 @@ class AuthHubEventHandlerTests: XCTestCase {
314314
private func configurePluginForConfirmSignInEvent() {
315315
let initialState = AuthState.configured(
316316
AuthenticationState.signingIn(.resolvingChallenge(
317-
.waitingForAnswer(.testData, .apiBased(.userSRP)),
317+
.waitingForAnswer(.testData(), .apiBased(.userSRP)),
318318
.smsMfa,
319319
.apiBased(.userSRP))),
320320
AuthorizationState.sessionEstablished(.testData))

AmplifyPlugins/Auth/Tests/AWSCognitoAuthPluginUnitTests/ResolverTests/SRPSignInState/SRPTestData.swift

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -107,13 +107,32 @@ extension RespondToAuthChallengeOutputResponse {
107107
challengeParameters: [:],
108108
session: "session")
109109
}
110+
111+
static func testData(
112+
challenge: CognitoIdentityProviderClientTypes.ChallengeNameType = .smsMfa,
113+
challengeParameters: [String: String] = [:]) -> RespondToAuthChallengeOutputResponse {
114+
return RespondToAuthChallengeOutputResponse(
115+
authenticationResult: nil,
116+
challengeName: challenge,
117+
challengeParameters: challengeParameters,
118+
session: "session")
119+
}
120+
110121
}
111122

112123
extension RespondToAuthChallenge {
113-
static let testData = RespondToAuthChallenge(challenge: .smsMfa,
114-
username: "username",
115-
session: "session",
116-
parameters: [:])
124+
125+
static func testData(
126+
challenge: CognitoIdentityProviderClientTypes.ChallengeNameType = .smsMfa,
127+
username: String = "username",
128+
session: String = "session",
129+
parameters: [String: String] = [:]) -> RespondToAuthChallenge {
130+
RespondToAuthChallenge(
131+
challenge: challenge,
132+
username: username,
133+
session: session,
134+
parameters: parameters)
135+
}
117136
}
118137

119138
extension SignInEvent {

AmplifyPlugins/Auth/Tests/AWSCognitoAuthPluginUnitTests/Support/DefaultConfig.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ enum Defaults {
3030
"UserAgent": "aws-amplify/cli",
3131
"Version": "0.1.0",
3232
"IdentityManager": [
33-
"Default": []
33+
"Default": [String: String]()
3434
],
3535
"CredentialsProvider": [
3636
"CognitoIdentity": [

AmplifyPlugins/Auth/Tests/AWSCognitoAuthPluginUnitTests/Support/MockIdentityProvider.swift

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,15 @@ struct MockIdentityProvider: CognitoUserPoolBehavior {
6868
typealias MockConfirmDeviceResponse = (ConfirmDeviceInput) async throws
6969
-> ConfirmDeviceOutputResponse
7070

71+
typealias MockSetUserMFAPreferenceResponse = (SetUserMFAPreferenceInput) async throws
72+
-> SetUserMFAPreferenceOutputResponse
73+
74+
typealias MockAssociateSoftwareTokenResponse = (AssociateSoftwareTokenInput) async throws
75+
-> AssociateSoftwareTokenOutputResponse
76+
77+
typealias MockVerifySoftwareTokenResponse = (VerifySoftwareTokenInput) async throws
78+
-> VerifySoftwareTokenOutputResponse
79+
7180
let mockSignUpResponse: MockSignUpResponse?
7281
let mockRevokeTokenResponse: MockRevokeTokenResponse?
7382
let mockInitiateAuthResponse: MockInitiateAuthResponse?
@@ -87,6 +96,9 @@ struct MockIdentityProvider: CognitoUserPoolBehavior {
8796
let mockRememberDeviceResponse: MockRememberDeviceResponse?
8897
let mockForgetDeviceResponse: MockForgetDeviceResponse?
8998
let mockConfirmDeviceResponse: MockConfirmDeviceResponse?
99+
let mockSetUserMFAPreferenceResponse: MockSetUserMFAPreferenceResponse?
100+
let mockAssociateSoftwareTokenResponse: MockAssociateSoftwareTokenResponse?
101+
let mockVerifySoftwareTokenResponse: MockVerifySoftwareTokenResponse?
90102

91103
init(
92104
mockSignUpResponse: MockSignUpResponse? = nil,
@@ -107,7 +119,10 @@ struct MockIdentityProvider: CognitoUserPoolBehavior {
107119
mockListDevicesOutputResponse: MockListDevicesOutputResponse? = nil,
108120
mockRememberDeviceResponse: MockRememberDeviceResponse? = nil,
109121
mockForgetDeviceResponse: MockForgetDeviceResponse? = nil,
110-
mockConfirmDeviceResponse: MockConfirmDeviceResponse? = nil
122+
mockConfirmDeviceResponse: MockConfirmDeviceResponse? = nil,
123+
mockSetUserMFAPreferenceResponse: MockSetUserMFAPreferenceResponse? = nil,
124+
mockAssociateSoftwareTokenResponse: MockAssociateSoftwareTokenResponse? = nil,
125+
mockVerifySoftwareTokenResponse: MockVerifySoftwareTokenResponse? = nil
111126
) {
112127
self.mockSignUpResponse = mockSignUpResponse
113128
self.mockRevokeTokenResponse = mockRevokeTokenResponse
@@ -128,6 +143,9 @@ struct MockIdentityProvider: CognitoUserPoolBehavior {
128143
self.mockRememberDeviceResponse = mockRememberDeviceResponse
129144
self.mockForgetDeviceResponse = mockForgetDeviceResponse
130145
self.mockConfirmDeviceResponse = mockConfirmDeviceResponse
146+
self.mockSetUserMFAPreferenceResponse = mockSetUserMFAPreferenceResponse
147+
self.mockAssociateSoftwareTokenResponse = mockAssociateSoftwareTokenResponse
148+
self.mockVerifySoftwareTokenResponse = mockVerifySoftwareTokenResponse
131149
}
132150

133151
/// Throws InitiateAuthOutputError
@@ -213,4 +231,16 @@ struct MockIdentityProvider: CognitoUserPoolBehavior {
213231
func confirmDevice(input: ConfirmDeviceInput) async throws -> ConfirmDeviceOutputResponse {
214232
return try await mockConfirmDeviceResponse!(input)
215233
}
234+
235+
func associateSoftwareToken(input: AWSCognitoIdentityProvider.AssociateSoftwareTokenInput) async throws -> AWSCognitoIdentityProvider.AssociateSoftwareTokenOutputResponse {
236+
return try await mockAssociateSoftwareTokenResponse!(input)
237+
}
238+
239+
func verifySoftwareToken(input: AWSCognitoIdentityProvider.VerifySoftwareTokenInput) async throws -> AWSCognitoIdentityProvider.VerifySoftwareTokenOutputResponse {
240+
return try await mockVerifySoftwareTokenResponse!(input)
241+
}
242+
243+
func setUserMFAPreference(input: SetUserMFAPreferenceInput) async throws -> SetUserMFAPreferenceOutputResponse {
244+
return try await mockSetUserMFAPreferenceResponse!(input)
245+
}
216246
}

AmplifyPlugins/Auth/Tests/AWSCognitoAuthPluginUnitTests/TaskTests/AuthorizationTests/AWSAuthFetchSignInSessionOperationTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -704,7 +704,7 @@ class AWSAuthFetchSignInSessionOperationTests: BaseAuthorizationTests {
704704
///
705705
func testSessionWhenWaitingConfirmSignIn() async throws {
706706
let signInMethod = SignInMethod.apiBased(.userSRP)
707-
let challenge = SignInChallengeState.waitingForAnswer(.testData, signInMethod)
707+
let challenge = SignInChallengeState.waitingForAnswer(.testData(), signInMethod)
708708
let initialState = AuthState.configured(
709709
AuthenticationState.signingIn(
710710
.resolvingChallenge(challenge, .smsMfa, signInMethod)),
File renamed without changes.
File renamed without changes.

0 commit comments

Comments
 (0)