//
// Copyright Amazon.com Inc. or its affiliates.
// All Rights Reserved.
//
// SPDX-License-Identifier: Apache-2.0
//

import XCTest
import Amplify

@testable import AWSCognitoAuthPlugin

typealias FetchAuthSessionStateSequence = StateSequence<FetchAuthSessionState, FetchAuthSessionEvent>

extension FetchAuthSessionStateSequence {
    init(oldState: MyState,
         event: MyEvent,
         expected: MyState
    ) {
        self.resolver = FetchAuthSessionState.Resolver().logging().eraseToAnyResolver()
        self.oldState = oldState
        self.event = event
        self.expected = expected
    }
}

class FetchAuthSessionStateResolverTests: XCTestCase {

    func testValidFetchAuthSessionStateSequences() throws {
//        let cognitoSession = AWSAuthCognitoSession.testData

        let validSequences: [FetchAuthSessionStateSequence] = [
//            StateSequence(oldState: .initializingFetchAuthSession,
//                          event: FetchAuthSessionEvent(eventType: .fetchIdentity(cognitoSession)),
//                          expected: .fetchingIdentity(FetchIdentityState.configuring)),
//            StateSequence(oldState: .initializingFetchAuthSession,
//                          event: FetchAuthSessionEvent(eventType: .fetchUserPoolTokens(cognitoSession)),
//                          expected: .fetchingUserPoolTokens(FetchUserPoolTokensState.configuring)),
//            StateSequence(oldState: .fetchingUserPoolTokens(FetchUserPoolTokensState.configuring),
//                          event: FetchAuthSessionEvent(eventType: .fetchIdentity(cognitoSession)),
//                          expected: .fetchingIdentity(FetchIdentityState.configuring)),
//            StateSequence(oldState: .fetchingIdentity(FetchIdentityState.configuring),
//                          event: FetchAuthSessionEvent(eventType: .fetchAWSCredentials(cognitoSession)),
//                          expected: .fetchingAWSCredentials(FetchAWSCredentialsState.configuring)),
//            StateSequence(oldState: .fetchingAWSCredentials(FetchAWSCredentialsState.fetched),
//                          event: FetchAuthSessionEvent(eventType: .fetchedAuthSession(cognitoSession)),
//                          expected: .sessionEstablished)
        ]

        for sequence in validSequences {
            sequence.assertResolvesToExpected()
        }
    }

}