### Question:
IdpSelectedStateController implements ErrorResponsePreparedStateController, IdpSelectingStateController, AuthnRequestCapableController, RestartJourneyStateController { @Override public void transitionToSessionStartedState() { final SessionStartedState sessionStartedState = createSessionStartedState(); stateTransitionAction.transitionTo(sessionStartedState); hubEventLogger.logSessionMovedToStartStateEvent(sessionStartedState); } IdpSelectedStateController(
            final IdpSelectedState state,
            final HubEventLogger hubEventLogger,
            final StateTransitionAction stateTransitionAction,
            final IdentityProvidersConfigProxy identityProvidersConfigProxy,
            final TransactionsConfigProxy transactionsConfigProxy,
            final ResponseFromHubFactory responseFromHubFactory,
            final PolicyConfiguration policyConfiguration,
            final AssertionRestrictionsFactory assertionRestrictionsFactory,
            final MatchingServiceConfigProxy matchingServiceConfigProxy); AuthnRequestFromHub getRequestFromHub(); void handleNoAuthenticationContextResponseFromIdp(AuthenticationErrorResponse authenticationErrorResponse); void handlePausedRegistrationResponseFromIdp(String requestIssuerEntityId, String principalIdAsSeenByHub, Optional<LevelOfAssurance> responseLoa, String analyticsSessionId, String journeyType); void handleAuthenticationFailedResponseFromIdp(AuthenticationErrorResponse authenticationErrorResponse); void handleRequesterErrorResponseFromIdp(RequesterErrorResponse requesterErrorResponseDto); void handleMatchingJourneySuccessResponseFromIdp(SuccessFromIdp successFromIdp); void handleNonMatchingJourneySuccessResponseFromIdp(SuccessFromIdp successFromIdp); void handleFraudResponseFromIdp(FraudFromIdp fraudFromIdp); AttributeQueryRequestDto createAttributeQuery(SuccessFromIdp successFromIdp); @Override ResponseFromHub getErrorResponse(); boolean isRegistrationContext(); String getMatchingServiceEntityId(); boolean isMatchingJourney(); @Override void handleIdpSelected(String idpEntityId, String principalIpAddress, boolean registering, LevelOfAssurance requestedLoa, String analyticsSessionId, String journeyType, String abTestVariant); @Override String getRequestIssuerId(); @Override AuthnRequestSignInProcess getSignInProcessDetails(); @Override void transitionToSessionStartedState();  }### Answer:
@Test public void shouldTransitionToSessionStartedStateAndLogEvent() { controller.transitionToSessionStartedState(); ArgumentCaptor<SessionStartedState> capturedState = ArgumentCaptor.forClass(SessionStartedState.class); verify(stateTransitionAction, times(1)).transitionTo(capturedState.capture()); verify(hubEventLogger, times(1)).logSessionMovedToStartStateEvent(capturedState.getValue()); assertThat(capturedState.getValue().getSessionId()).isEqualTo(idpSelectedState.getSessionId()); assertThat(capturedState.getValue().getRequestIssuerEntityId()).isEqualTo(idpSelectedState.getRequestIssuerEntityId()); assertThat(capturedState.getValue().getForceAuthentication()).isEqualTo(idpSelectedState.getForceAuthentication()); }