package com.google.sitebricks.routing;
import com.google.common.collect.ImmutableMap;
import com.google.inject.util.Providers;
import com.google.sitebricks.At;
import com.google.sitebricks.headless.Request;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import static org.easymock.EasyMock.createMock;
import static org.easymock.EasyMock.createNiceMock;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.replay;
/**
* @author dhanji@gmail.com (Dhanji R. Prasanna)
*/
public class PageBasedRedirectTest {
private PageBasedRedirect redirect;
@At("/:product/list/:id")
public static class ProductIdList {
}
@At("/product/list/id")
public static class StaticPage {
}
public static class NonPage {
}
@BeforeMethod
public void pre() {
redirect = new PageBasedRedirect();
Request requestMock = createNiceMock(Request.class);
redirect.setRequestProvider(Providers.of(requestMock));
replay(requestMock);
}
@Test
public void fillInUriTemplate() throws Exception {
String uri = redirect.to(ProductIdList.class, ImmutableMap.of(
"product", "Indie Game",
"id", "Super Meat Boy"));
assert "/Indie+Game/list/Super+Meat+Boy".equals(uri) : uri;
}
@Test
public void staticUri() throws Exception {
String uri = redirect.to(StaticPage.class, ImmutableMap.of(
"product", "Indie Game",
"id", "Super Meat Boy"));
assert "/product/list/id".equals(uri) : uri;
assert "/product/list/id".equals(redirect.to(StaticPage.class)) : uri;
}
@Test
public void staticUriContextualized() throws Exception {
Request requestMock = createMock(Request.class);
expect(requestMock.context()).andReturn("/bricks").anyTimes();
redirect.setRequestProvider(Providers.of(requestMock));
replay(requestMock);
String uri = redirect.to(StaticPage.class, ImmutableMap.of(
"product", "Indie Game",
"id", "Super Meat Boy"));
assert "/bricks/product/list/id".equals(uri) : uri;
assert "/bricks/product/list/id".equals(redirect.to(StaticPage.class)) : uri;
}
@Test
public void fillInUriTemplateContextualized() throws Exception {
Request requestMock = createMock(Request.class);
expect(requestMock.context()).andReturn("/bricks").anyTimes();
redirect.setRequestProvider(Providers.of(requestMock));
replay(requestMock);
String uri = redirect.to(ProductIdList.class, ImmutableMap.of(
"product", "Indie Game",
"id", "Super Meat Boy"));
assert "/bricks/Indie+Game/list/Super+Meat+Boy".equals(uri) : uri;
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void badParameters() throws Exception {
String uri = redirect.to(ProductIdList.class, ImmutableMap.of(
"id", "Super Meat Boy"));
assert "/Indie+Game/list/Super+Meat+Boy".equals(uri) : uri;
}
}