/**
*
*/
package org.minnal.utils.route;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertNull;
import static org.testng.Assert.assertTrue;
import java.util.Arrays;
import java.util.Map;
import org.testng.annotations.Test;
/**
* @author ganeshs
*
*/
public class RoutePatternTest {
@Test(expectedExceptions=IllegalArgumentException.class)
public void shouldNotAllowPathNotStartingWithSlash() {
new RoutePattern("orders/1/order_items/1");
}
@Test
public void shouldGetRouteElements() {
RoutePattern pattern = new RoutePattern("/orders/{order_id}/order_items");
assertEquals(pattern.getElements().size(), 3);
assertEquals(pattern.getElements().get(0).getName(), "orders");
assertFalse(pattern.getElements().get(0).isParameter());
assertTrue(pattern.getElements().get(1).isParameter());
}
@Test
public void shouldAllowPathPatternWithoutParameters() {
new RoutePattern("/orders/1/order_items/1");
new RoutePattern("/Orders/1/order-items/1");
}
@Test
public void shouldAllowPathPatternWithParameters() {
new RoutePattern("/orders/{order_id}/order_items/{id}");
}
@Test(expectedExceptions=IllegalArgumentException.class)
public void shouldNotAllowPathPatternWithEmptyParameters() {
new RoutePattern("/orders/{order_id}/order_items/{}");
}
@Test(expectedExceptions=IllegalArgumentException.class)
public void shouldNotAllowParametersWithSpecialCharacters() {
new RoutePattern("/orders/{/order_items}/id");
}
@Test(expectedExceptions=IllegalArgumentException.class)
public void shouldNotAllowParametersWithIncompleteBraces() {
new RoutePattern("/orders/{order_id/order_items/{id}");
}
@Test
public void shouldFetchParameterNames() {
RoutePattern pattern = new RoutePattern("/orders/{order_id}/order_items/{id}");
assertNotNull(pattern.getParameterNames());
assertEquals(pattern.getParameterNames(), Arrays.asList("order_id", "id"));
}
@Test(expectedExceptions=IllegalArgumentException.class)
public void shouldAllowPathWithDuplicateParameters() {
new RoutePattern("/orders/{id}/order_items/{id}");
}
@Test
public void shouldMatchAPathWithAlphaNumericParamsToPattern() {
RoutePattern pattern = new RoutePattern("/orders/{order_id}/order_items/{id}");
assertTrue(pattern.matches("/orders/code1/order_items/1code"));
}
@Test
public void shouldMatchAPathWithSpecialCharacterParamsToPattern() {
RoutePattern pattern = new RoutePattern("/orders/{order_id}/order_items/{id}");
assertTrue(pattern.matches("/orders/order_1/order_items/order-item-1"));
}
@Test
public void shouldGetParameterMapForAValidPath() {
RoutePattern pattern = new RoutePattern("/orders/{order_id}/order_items/{id}");
Map<String, String> params = pattern.match("/orders/1/order_items/124");
assertNotNull(params);
assertEquals(params.get("order_id"), "1");
assertEquals(params.get("id"), "124");
}
@Test
public void shouldNotGetParameterMapForAnInvalidPath() {
RoutePattern pattern = new RoutePattern("/orders/{order_id}/order_items/{id}");
Map<String, String> params = pattern.match("/orders/order_items/124");
assertNull(params);
}
@Test
public void shouldGetEmptyParameterMapForAPathWithoutParameters() {
RoutePattern pattern = new RoutePattern("/orders/1/order_items/124");
Map<String, String> params = pattern.match("/orders/1/order_items/124");
assertNotNull(params);
assertTrue(params.isEmpty());
}
@Test
public void shouldMatchUrlEncodedString() {
RoutePattern pattern = new RoutePattern("/orders/{order_id}");
Map<String, String> params = pattern.match("/orders/1234%2F1");
assertEquals(params.get("order_id"), "1234/1");
}
}