package org.jooby;
import static org.easymock.EasyMock.expect;
import static org.junit.Assert.assertEquals;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.jooby.test.MockUnit;
import org.junit.Test;
public class RouteForwardingTest {
@Test
public void consumes() throws Exception {
List<MediaType> consumes = Arrays.asList(MediaType.js);
new MockUnit(Route.class)
.expect(unit -> {
Route route = unit.get(Route.class);
expect(route.consumes()).andReturn(consumes);
})
.run(unit -> {
assertEquals(consumes, new Route.Forwarding(unit.get(Route.class)).consumes());
});
}
@Test
public void produces() throws Exception {
List<MediaType> produces = Arrays.asList(MediaType.js);
new MockUnit(Route.class)
.expect(unit -> {
Route route = unit.get(Route.class);
expect(route.produces()).andReturn(produces);
})
.run(unit -> {
assertEquals(produces, new Route.Forwarding(unit.get(Route.class)).produces());
});
}
@Test
public void name() throws Exception {
new MockUnit(Route.class)
.expect(unit -> {
Route route = unit.get(Route.class);
expect(route.name()).andReturn("xXX");
})
.run(unit -> {
assertEquals("xXX", new Route.Forwarding(unit.get(Route.class)).name());
});
}
@Test
public void path() throws Exception {
new MockUnit(Route.class)
.expect(unit -> {
Route route = unit.get(Route.class);
expect(route.path()).andReturn("/xXX");
})
.run(unit -> {
assertEquals("/xXX", new Route.Forwarding(unit.get(Route.class)).path());
});
}
@Test
public void pattern() throws Exception {
new MockUnit(Route.class)
.expect(unit -> {
Route route = unit.get(Route.class);
expect(route.pattern()).andReturn("/**/*");
})
.run(unit -> {
assertEquals("/**/*", new Route.Forwarding(unit.get(Route.class)).pattern());
});
}
@Test
public void attributes() throws Exception {
Map<String, Object> attributes = new HashMap<>();
new MockUnit(Route.class)
.expect(unit -> {
Route route = unit.get(Route.class);
expect(route.attributes()).andReturn(attributes);
})
.run(unit -> {
assertEquals(attributes, new Route.Forwarding(unit.get(Route.class)).attributes());
});
}
@Test
public void attr() throws Exception {
new MockUnit(Route.class)
.expect(unit -> {
Route route = unit.get(Route.class);
expect(route.attr("foo")).andReturn("bar");
})
.run(unit -> {
assertEquals("bar", new Route.Forwarding(unit.get(Route.class)).attr("foo"));
});
}
@Test(expected = NullPointerException.class)
public void nullRoute() throws Exception {
new Route.Forwarding(null);
}
@Test
public void toStr() throws Exception {
new MockUnit(Route.class)
.run(unit -> {
assertEquals(unit.get(Route.class).toString(),
new Route.Forwarding(unit.get(Route.class)).toString());
});
}
@Test
public void verb() throws Exception {
new MockUnit(Route.class)
.expect(unit -> {
Route route = unit.get(Route.class);
expect(route.method()).andReturn("OPTIONS");
})
.run(unit -> {
assertEquals("OPTIONS", new Route.Forwarding(unit.get(Route.class)).method());
});
}
@Test
public void vars() throws Exception {
Map<Object, String> vars = new HashMap<>();
new MockUnit(Route.class)
.expect(unit -> {
Route route = unit.get(Route.class);
expect(route.vars()).andReturn(vars);
})
.run(unit -> {
assertEquals(vars, new Route.Forwarding(unit.get(Route.class)).vars());
});
}
@Test
public void glob() throws Exception {
new MockUnit(Route.class)
.expect(unit -> {
Route route = unit.get(Route.class);
expect(route.glob()).andReturn(true);
})
.run(unit -> {
assertEquals(true, new Route.Forwarding(unit.get(Route.class)).glob());
});
}
@Test
public void reverseMap() throws Exception {
Map<String, Object> vars = new HashMap<>();
new MockUnit(Route.class)
.expect(unit -> {
Route route = unit.get(Route.class);
expect(route.reverse(vars)).andReturn("/");
})
.run(unit -> {
assertEquals("/", new Route.Forwarding(unit.get(Route.class)).reverse(vars));
});
}
@Test
public void reverseVars() throws Exception {
Object[] vars = {};
new MockUnit(Route.class)
.expect(unit -> {
Route route = unit.get(Route.class);
expect(route.reverse(vars)).andReturn("/");
})
.run(unit -> {
assertEquals("/", new Route.Forwarding(unit.get(Route.class)).reverse(vars));
});
}
@Test
public void source() throws Exception {
new MockUnit(Route.class, Route.Source.class)
.expect(unit -> {
Route route = unit.get(Route.class);
expect(route.source()).andReturn(unit.get(Route.Source.class));
})
.run(unit -> {
assertEquals(unit.get(Route.Source.class),
new Route.Forwarding(unit.get(Route.class)).source());
});
}
@Test
public void print() throws Exception {
new MockUnit(Route.class, Route.Source.class)
.expect(unit -> {
Route route = unit.get(Route.class);
expect(route.print()).andReturn("x");
})
.run(unit -> {
assertEquals("x",
new Route.Forwarding(unit.get(Route.class)).print());
});
}
@Test
public void printWithIndent() throws Exception {
new MockUnit(Route.class, Route.Source.class)
.expect(unit -> {
Route route = unit.get(Route.class);
expect(route.print(6)).andReturn("x");
})
.run(unit -> {
assertEquals("x",
new Route.Forwarding(unit.get(Route.class)).print(6));
});
}
@Test
public void unwrap() throws Exception {
new MockUnit(Route.class)
.run(unit -> {
Route route = unit.get(Route.class);
assertEquals(route, Route.Forwarding.unwrap(new Route.Forwarding(route)));
// 2 level
assertEquals(route,
Route.Forwarding.unwrap(new Route.Forwarding(new Route.Forwarding(route))));
// 3 level
assertEquals(route, Route.Forwarding.unwrap(new Route.Forwarding(new Route.Forwarding(
new Route.Forwarding(route)))));
});
}
}