package denominator; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import java.util.Arrays; import java.util.Collection; import java.util.LinkedHashMap; import java.util.Map; import denominator.mock.MockProvider; import static org.assertj.core.api.Assertions.assertThat; public class ProviderTest { @Rule public final ExpectedException thrown = ExpectedException.none(); @Test public void testDefaultProviderNameIsLowercase() { BareProvider provider = new BareProvider(); assertThat(provider.credentialTypeToParameterNames()).isEmpty(); } @Test public void testCredentialTypeToParameterNamesDefaultsToEmpty() { BareProvider provider = new BareProvider(); assertThat(provider.credentialTypeToParameterNames()).isEmpty(); } @Test public void testLowerCamelCredentialTypesAndValuesAreValid() { new ValidCredentialParametersProvider(); } @Test public void testIllegalArgumentWhenCredentialTypeIsntLowerCamel() { thrown.expect(IllegalArgumentException.class); thrown.expectMessage("please correct credential type STS_SESSION to lowerCamel case"); new InvalidCredentialKeyProvider(); } @Test public void testIllegalArgumentWhenCredentialParameterIsntLowerCamel() { thrown.expect(IllegalArgumentException.class); thrown.expectMessage( "please correct stsSession credential parameter access.key to lowerCamel case"); new InvalidCredentialParameterProvider(); } static class BareProvider extends BasicProvider { @dagger.Module(injects = DNSApiManager.class, includes = MockProvider.Module.class, complete = false) static class Module { } } static class ValidCredentialParametersProvider extends BasicProvider { @Override public Map<String, Collection<String>> credentialTypeToParameterNames() { Map<String, Collection<String>> options = new LinkedHashMap<String, Collection<String>>(); options.put("accessKey", Arrays.asList("accessKey", "secretKey")); options.put("stsSession", Arrays.asList("accessKey", "secretKey", "sessionToken")); return options; } @dagger.Module(injects = DNSApiManager.class, includes = MockProvider.Module.class, complete = false) static class Module { } } static class InvalidCredentialKeyProvider extends BasicProvider { @Override public Map<String, Collection<String>> credentialTypeToParameterNames() { Map<String, Collection<String>> options = new LinkedHashMap<String, Collection<String>>(); options.put("accessKey", Arrays.asList("accessKey", "secretKey")); options.put("STS_SESSION", Arrays.asList("accessKey", "secretKey", "sessionToken")); return options; } @dagger.Module(injects = DNSApiManager.class, includes = MockProvider.Module.class, complete = false) static class Module { } } static class InvalidCredentialParameterProvider extends BasicProvider { @Override public Map<String, Collection<String>> credentialTypeToParameterNames() { Map<String, Collection<String>> options = new LinkedHashMap<String, Collection<String>>(); options.put("accessKey", Arrays.asList("accessKey", "secretKey")); options.put("stsSession", Arrays.asList("access.key", "secret.key", "session.token")); return options; } @dagger.Module(injects = DNSApiManager.class, includes = MockProvider.Module.class, complete = false) static class Module { } } }