package com.vtence.molecule.routing; import org.hamcrest.Matchers; import org.junit.Test; import java.util.Map; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.*; public class DynamicPathTest { @Test public void matchesIdenticalStaticPaths() { DynamicPath dynamicPath = new DynamicPath("/products"); assertThat("no match", dynamicPath.matches("/products")); } @Test public void rejectsDifferentStaticPaths() { DynamicPath dynamicPath = new DynamicPath("/products"); assertThat("match", !dynamicPath.matches("/items")); } @Test public void ignoresDynamicSegmentsWhenMatching() { DynamicPath dynamicPath = new DynamicPath("/products/:number/items/:id"); assertThat("no match", dynamicPath.matches("/products/LAB-1234/items/12345678")); } @Test public void expectsPathsWithSameNumberOfSegments() { DynamicPath dynamicPath = new DynamicPath("/products/:number/items/:id"); assertThat("match", !dynamicPath.matches("/products/LAB-1234")); } @Test public void staticPathsHaveNoBoundParameters() { DynamicPath dynamicPath = new DynamicPath("/products"); Map<String, String> boundParameters = dynamicPath.parametersBoundTo("/products"); assertThat("bound parameters values", boundParameters.values(), Matchers.<String>empty()); } @Test public void extractBoundParametersFromDynamicSegments() { DynamicPath dynamicPath = new DynamicPath("/products/:number/items/:id"); Map<String, String> boundParameters = dynamicPath.parametersBoundTo("/products/LAB-1234/items/12345678"); assertThat("bound parameters values", boundParameters.values(), hasSize(2)); assertThat("bound parameters", boundParameters, allOf(hasEntry("number", "LAB-1234"), hasEntry("id", "12345678"))); } }