Get a list of provider states fixtures for an interaction with their parameters.
    Raises an UnsupportedProviderStateError on the first provider state in an interaction
    that isn't supported by the provider.

def _provider_state_fixtures_with_params(
        provider_state_fixture_by_descriptor: Dict[str, ProviderStateFixture],
        provider_states: Tuple[ProviderState, ...]
) -> List[Tuple[ProviderStateFixture, Dict]]:
    """Get a list of provider states fixtures for an interaction with their parameters.
    Raises an UnsupportedProviderStateError on the first provider state in an interaction
    that isn't supported by the provider.
    """
    provider_state_fixtures_with_params: List[Tuple[ProviderStateFixture, Dict]] = []
    for provider_state in provider_states:
        provider_state_fixture = provider_state_fixture_by_descriptor.get(provider_state.descriptor)
        if not provider_state_fixture:
            raise UnsupportedProviderStateError(
                f'Missing expected provider state: {provider_state}'
            )
        if provider_state.params:
            fixture_params = _pluck_parameter_names(provider_state_fixture)
            if not frozenset(provider_state.params.keys()) == fixture_params:
                raise UnsupportedProviderStateError(
                    'Expected provider state params dont match those of '
                    + f'provider. Expected: {provider_state}. Actual: {fixture_params}.'
                )
        provider_state_fixtures_with_params.append(
            (provider_state_fixture, provider_state.params or {})
        )

    return provider_state_fixtures_with_params