package br.com.caelum.calopsita.infra.interceptor;
import static org.hamcrest.Matchers.instanceOf;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
import java.util.Collections;
import javax.servlet.http.HttpServletRequest;
import org.jmock.Expectations;
import org.jmock.Mockery;
import org.junit.Before;
import org.junit.Test;
import br.com.caelum.calopsita.model.DefaultParameters;
import br.com.caelum.calopsita.model.Menu;
import br.com.caelum.calopsita.model.Parameters;
import br.com.caelum.calopsita.model.PluginConfig;
import br.com.caelum.vraptor.core.InterceptorStack;
import br.com.caelum.vraptor.util.test.MockResult;
public class MenuInterceptorTest {
private Mockery mockery;
private MockResult result;
private HttpServletRequest request;
private PluginConfig config;
private MenuInterceptor interceptor;
@Before
public void setUp() throws Exception {
mockery = new Mockery();
result = new MockResult();
request = mockery.mock(HttpServletRequest.class);
config = mockery.mock(PluginConfig.class);
interceptor = new MenuInterceptor(new DefaultParameters(result), result, request, Collections.singleton(config));
}
@Test
public void shouldIncludeConfigOnMenu() throws Exception {
shouldAskPluginToRegisterMenus();
whenInterceptOccurs();
shouldIncludeMenuOnResult();
mockery.assertIsSatisfied();
}
private void whenInterceptOccurs() {
interceptor.intercept(mockery.mock(InterceptorStack.class), null, null);
}
private void shouldIncludeMenuOnResult() {
assertThat(result.included("menu"), is(instanceOf(Menu.class)));
}
private void shouldAskPluginToRegisterMenus() {
mockery.checking(new Expectations() {
{
one(config).includeMenus(with(any(Menu.class)), with(any(Parameters.class)));
ignoring(anything());
}
});
}
}