/**
* Copyright (C) 2013-2015 all@code-story.net
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License
*/
package net.codestory.http.routes;
import net.codestory.http.testhelpers.AbstractProdWebServerTest;
import org.junit.Test;
public class RoutePrecedenceTest extends AbstractProdWebServerTest {
@Test
public void override_static_file_with_route() {
configure(routes -> routes
.get("/", "PRIORITY")
);
get("/").should().contain("PRIORITY");
}
@Test
public void routes_can_be_overriden() {
configure(routes -> routes
.get("/", "FIRST")
.get("/", "SECOND")
);
get("/").should().contain("SECOND");
}
@Test
public void multiple_routes_same_uri() {
configure(routes -> routes
.url("/").
get(() -> "Index GET").
post(() -> "Index POST")
.url("/action").
get(() -> "Action GET").
post(() -> "Action POST")
);
get("/").should().contain("Index GET");
post("/").should().contain("Index POST");
get("/action").should().contain("Action GET");
post("/action").should().contain("Action POST");
}
@Test
public void fixed_route_comes_first() {
configure(routes -> routes
.get("/foo", "One")
.get("/:param", (context, param) -> "Two")
);
get("/foo").should().contain("One");
get("/bar").should().contain("Two");
}
@Test
public void fixed_routes_comes_first_ignore_insertion_order() {
configure(routes -> routes
.get("/:param", (context, param) -> "One")
.get("/foo", "Two")
);
get("/foo").should().contain("Two");
get("/bar").should().contain("One");
}
@Test
public void catch_all_is_always_last() {
configure(routes -> routes
.get("/:param", (context, param) -> "One")
.get("/foo", "Two")
.any((context) -> "last")
.anyGet((context) -> "antepenultimate")
);
get("/foo").should().contain("Two");
get("/bar").should().contain("One");
get("/catch/all/get").should().contain("antepenultimate");
post("/catch/all").should().contain("last");
put("/catch/all").should().contain("last");
}
}