package com.github.nyrkovalex.ironadmin.core.servlet;
import com.github.nyrkovalex.ironadmin.core.TemplateResolver;
import com.github.nyrkovalex.ironadmin.core.pages.Page;
import com.github.nyrkovalex.ironadmin.core.pages.PageContext;
import com.github.nyrkovalex.ironadmin.core.pages.PageRegistry;
import com.github.nyrkovalex.ironadmin.core.pages.dummy.DummyAdminContext;
import com.github.nyrkovalex.ironadmin.core.pages.dummy.DummyFactory;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Optional;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
public class AdminDispatcherServletResponseTest extends AdminDispatcherServletTest {
@Mock private PageContext pageContext;
private AdminDispatcherServlet dispatcherServlet;
private HttpServletRequest req;
private HttpServletResponse res;
private PrintWriter writer;
@Override
@Before
public void setUp() throws Exception {
DummyFactory.reset();
super.setUp();
setAdminContextClass(DummyAdminContext.class);
dispatcherServlet = getDispatcherServlet();
buildRequest();
buildResponse();
}
private void buildResponse() throws IOException {
res = DummyFactory.getResponse();
writer = mock(PrintWriter.class);
when(res.getWriter()).thenReturn(writer);
}
private void buildRequest() {
req = DummyFactory.getRequest();
when(req.getServletPath()).thenReturn("/foo");
when(req.getAttribute(AdminDispatcherServlet.PAGE_CONTEXT_ATTR)).thenReturn(pageContext);
}
@Test
public void testShouldResolveTemplate() throws Exception {
dispatcherServlet.doGet(req, res);
TemplateResolver resolver = DummyFactory.getResolver();
verify(resolver).resolvePageTemplate("/foo", pageContext, writer);
}
@Test
public void testShouldAskForCorrectPageWIthLongPath() throws Exception {
PageRegistry registry = DummyFactory.getRegistry();
when(req.getRequestURI()).thenReturn("/foo/bar/some/stuff/here");
when(registry.pageFor("/bar")).thenReturn(Optional.<Page>empty());
dispatcherServlet.service(req, res);
verify(registry).pageFor("/bar");
}
@Test
public void testShouldAskForCorrectPageWithExactPath() throws Exception {
PageRegistry registry = DummyFactory.getRegistry();
when(req.getRequestURI()).thenReturn("/foo/bar");
when(registry.pageFor("/bar")).thenReturn(Optional.<Page>empty());
dispatcherServlet.service(req, res);
verify(registry).pageFor("/bar");
}
}