package com.noelherrick.micra.tests;
import com.noelherrick.urlrouter.*;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
public class UrlRoutingTests {
private MicraTestRequest simpleRequest(String url)
{
return new MicraTestRequest(url);
}
@Test
public void testBasicRoute ()
{
UrlRouter<String> router = new UrlRouter<String>();
StringRoute<String> route = new StringRoute<String>("/foo", "right!");
router.addRoute(route);
Match<String> match = router.route(simpleRequest("/foo"));
assertEquals("right!", match.handler);
match = router.route(simpleRequest("/foo/"));
assertEquals("right!", match.handler);
}
@Test
public void testBasicRouteWithTrueCondition ()
{
UrlRouter<String> router = new UrlRouter<String>();
StringRoute<String> route = new StringRoute<String>("/foo", "right!", (req) -> req.getParameter("User-Agent").equals("IE"));
router.addRoute(route);
MicraTestRequest testRequest = simpleRequest("/foo");
testRequest.parameters.put("User-Agent","IE");
Match<String> match = router.route(testRequest);
assertEquals("right!", match.handler);
}
@Test
public void testBasicRouteWithFalseCondition ()
{
UrlRouter<String> router = new UrlRouter<String>();
StringRoute<String> route = new StringRoute<String>("/foo", "right!", (req) -> req.getParameter("User-Agent").equals("Firefox"));
router.addRoute(route);
MicraTestRequest testRequest = simpleRequest("/foo");
testRequest.parameters.put("User-Agent","IE");
Match<String> match = router.route(testRequest);
assertNull(match);
}
@Test
public void testBasicWithTrailingSlashRoute ()
{
UrlRouter<String> router = new UrlRouter<String>();
Route<String> route = new StringRoute<String>("/foo/","right!" );
router.addRoute(route);
Match<String> match = router.route(simpleRequest("/foo/"));
assertEquals("right!", match.handler);
match = router.route(simpleRequest("/foo"));
assertEquals("right!", match.handler);
}
@Test
public void testBasicRouteWithTwo ()
{
UrlRouter<String> router = new UrlRouter<String>();
Route<String> route = new StringRoute<String>("/foo/bar", "right!");
router.addRoute(route);
Match<String> match = router.route(simpleRequest("/foo/bar"));
assertEquals("right!", match.handler);
}
@Test
public void testNoRoute ()
{
UrlRouter<String> router = new UrlRouter<String>();
Route<String> route = new StringRoute<String>("/foo/bar", null);
router.addRoute(route);
Match<String> match = router.route(simpleRequest("/foo/bar1"));
assertNull(match);
}
@Test
public void testParameterRoute ()
{
UrlRouter<String> router = new UrlRouter<String>();
Route<String> route = new StringRoute<String>("/foo/{bar}", "right!");
router.addRoute(route);
Match<String> match = router.route(simpleRequest("/foo/thing"));
assertEquals("right!", match.handler);
assertEquals("thing", match.parameters.get("bar"));
}
@Test
public void testMultipleParameterRoute ()
{
UrlRouter<String> router = new UrlRouter<String>();
Route<String> route = new StringRoute<String>("/foo/{bar}/{zip}/{zap}", "right!");
router.addRoute(route);
Match<String> match = router.route(simpleRequest("/foo/thing1/thing2/thing3"));
assertEquals("right!", match.handler);
assertEquals("thing1", match.parameters.get("bar"));
assertEquals("thing2", match.parameters.get("zip"));
assertEquals("thing3", match.parameters.get("zap"));
}
@Test
public void testSandwhichedParameterRoute ()
{
UrlRouter<String> router = new UrlRouter<String>();
Route<String> route = new StringRoute<String>("/foo/{bar}/bat", "right!");
router.addRoute(route);
Match<String> match = router.route(simpleRequest("/foo/thing/bat"));
assertEquals("right!", match.handler);
assertEquals("thing", match.parameters.get("bar"));
}
@Test
public void testParameterWithRegexRoute ()
{
UrlRouter<String> router = new UrlRouter<String>();
Route<String> route = new StringRoute<String>("/foo/{bar:[0-9]*}", "right!");
router.addRoute(route);
Match<String> match = router.route(simpleRequest("/foo/911"));
assertEquals("right!", match.handler);
assertEquals("911", match.parameters.get("bar"));
}
@Test
public void testRootRoute ()
{
UrlRouter<String> router = new UrlRouter<String>();
Route<String> route = new StringRoute<String>("/", "right!");
router.addRoute(route);
Match<String> match = router.route(simpleRequest("/"));
assertEquals("right!", match.handler);
}
@Test
public void testLambdaRoute ()
{
UrlRouter<String> router = new UrlRouter<String>();
Route<String> route = new LambdaRoute<String>((req) -> req.getUrl().equals("/"), "right!");
router.addRoute(route);
Match<String> match = router.route(simpleRequest("/"));
assertEquals("right!", match.handler);
}
@Test
public void testLambdaNoRoute ()
{
UrlRouter<String> router = new UrlRouter<String>();
Route<String> route = new LambdaRoute<String>((req) -> req.getUrl().equals("/"), "right!");
router.addRoute(route);
Match<String> match = router.route(simpleRequest("/cool"));
assertNull(match);
}
}