### Question:
EidasAwaitingCycle3DataStateController extends AbstractAwaitingCycle3DataStateController<EidasAttributeQueryRequestDto, EidasAwaitingCycle3DataState> implements StateController, ResponseProcessingStateController, ErrorResponsePreparedStateController { @Override public void handleCycle3DataSubmitted(final String principalIpAddressAsSeenByHub) { getHubEventLogger().logCycle3DataObtained( getState().getSessionId(), getState().getRequestIssuerEntityId(), getState().getSessionExpiryTimestamp(), getState().getRequestId(), principalIpAddressAsSeenByHub ); EidasCycle3MatchRequestSentState eidasCycle3MatchRequestSentState = new EidasCycle3MatchRequestSentState( getState().getRequestId(), getState().getRequestIssuerEntityId(), getState().getSessionExpiryTimestamp(), getState().getAssertionConsumerServiceUri(), getState().getSessionId(), getState().getTransactionSupportsEidas(), getState().getIdentityProviderEntityId(), getState().getRelayState().orElse(null), getState().getLevelOfAssurance(), getState().getMatchingServiceEntityId(), getState().getEncryptedIdentityAssertion(), getState().getPersistentId(), getState().getForceAuthentication().orElse(null), getState().getCountrySignedResponseContainer().orElse(null) ); getStateTransitionAction().transitionTo(eidasCycle3MatchRequestSentState); } EidasAwaitingCycle3DataStateController(
        final EidasAwaitingCycle3DataState state,
        final HubEventLogger hubEventLogger,
        final StateTransitionAction stateTransitionAction,
        final TransactionsConfigProxy transactionsConfigProxy,
        final ResponseFromHubFactory responseFromHubFactory,
        final PolicyConfiguration policyConfiguration,
        final AssertionRestrictionsFactory assertionRestrictionsFactory,
        final MatchingServiceConfigProxy matchingServiceConfigProxy); @Override EidasAttributeQueryRequestDto createAttributeQuery(final Cycle3Dataset cycle3Dataset); @Override void handleCycle3DataSubmitted(final String principalIpAddressAsSeenByHub);  }### Answer:
@Test public void shouldTransitionToEidasCycle3MatchRequestSentState() { final String principalIpAddressAsSeenByHub = "principalIpAddressAsSeenByHub"; doNothing().when(hubEventLogger).logCycle3DataObtained( state.getSessionId(), state.getRequestIssuerEntityId(), state.getSessionExpiryTimestamp(), state.getRequestId(), principalIpAddressAsSeenByHub ); final EidasCycle3MatchRequestSentState expectedState = new EidasCycle3MatchRequestSentState( state.getRequestId(), state.getRequestIssuerEntityId(), state.getSessionExpiryTimestamp(), state.getAssertionConsumerServiceUri(), state.getSessionId(), state.getTransactionSupportsEidas(), state.getIdentityProviderEntityId(), state.getRelayState().orElse(null), state.getLevelOfAssurance(), state.getMatchingServiceEntityId(), state.getEncryptedIdentityAssertion(), state.getPersistentId(), state.getForceAuthentication().orElse(null), state.getCountrySignedResponseContainer().orElse(null) ); controller.handleCycle3DataSubmitted(principalIpAddressAsSeenByHub); verify(stateTransitionAction).transitionTo(expectedState); }