package org.zalando.baigan.context;
import com.google.common.collect.ImmutableSet;
import org.hamcrest.Matchers;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import org.zalando.baigan.model.Configuration;
import org.zalando.baigan.proxy.handler.ContextAwareConfigurationMethodInvocationHandler;
import org.zalando.baigan.service.ConditionsProcessor;
import org.zalando.baigan.service.ConfigurationRepository;
import java.lang.reflect.Method;
import java.util.Optional;
import static org.junit.Assert.assertThat;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
enum State {
SHIPPING, SHIPPED, DELIVERED
}
interface Express {
State stateDefault();
int maxDeliveryDays();
}
/**
* @author mchand
*/
@RunWith(JUnit4.class)
public class MethodInvocationHandlerTest {
@Test
public void testEnumValue() throws Throwable {
final ConfigurationRepository repo = mock(ConfigurationRepository.class);
final Configuration<String> configuration = new Configuration<>(
"express.state.default", "This is a test configuration object.",
ImmutableSet.of(), "SHIPPING");
when(repo.get(anyString())).thenReturn(Optional.of(configuration));
final ContextProviderRetriever retriever = mock(
ContextProviderRetriever.class,
org.mockito.Answers.RETURNS_SMART_NULLS.toString());
ContextAwareConfigurationMethodInvocationHandler handler = new ContextAwareConfigurationMethodInvocationHandler(
() -> repo, ConditionsProcessor::new, () -> retriever);
Method method = Express.class.getMethod("stateDefault");
Object object = handler.invoke("", method, new String[]{});
assertThat(object, Matchers.equalTo(State.SHIPPING));
}
@Test
public void testPrimitiveType() throws Throwable {
final ConfigurationRepository repo = mock(ConfigurationRepository.class);
final Configuration<String> configuration = new Configuration<>(
"express.max.delivery.days",
"This is a test configuration object.", ImmutableSet.of(), "3");
when(repo.get(anyString())).thenReturn(Optional.of(configuration));
final ContextProviderRetriever retriever = mock(
ContextProviderRetriever.class,
org.mockito.Answers.RETURNS_SMART_NULLS.toString());
ContextAwareConfigurationMethodInvocationHandler handler = new ContextAwareConfigurationMethodInvocationHandler(
() -> repo, ConditionsProcessor::new, () -> retriever);
Method method = Express.class.getMethod("maxDeliveryDays");
Object object = handler.invoke("", method, new String[]{});
assertThat(object, Matchers.equalTo(3));
}
}