package org.jooby.internal.hbs; import static org.easymock.EasyMock.expect; import static org.junit.Assert.assertEquals; import java.util.Collections; import java.util.HashSet; import java.util.Map; import java.util.Map.Entry; import java.util.Optional; import java.util.Set; import org.jooby.Request; import org.jooby.test.MockUnit; import org.junit.Test; import com.github.jknack.handlebars.ValueResolver; public class RequestValueResolverTest { @Test public void resolveProperty() throws Exception { new MockUnit(Request.class) .expect(unit -> { Request Request = unit.get(Request.class); expect(Request.ifGet("prop")).andReturn(Optional.of("x")); }) .run(unit -> { assertEquals("x", new RequestValueResolver().resolve(unit.get(Request.class), "prop")); }); } @Test public void resolveMissingProperty() throws Exception { new MockUnit(Request.class) .expect(unit -> { Request Request = unit.get(Request.class); expect(Request.ifGet("prop")).andReturn(Optional.empty()); }) .run( unit -> { assertEquals(ValueResolver.UNRESOLVED, new RequestValueResolver().resolve(unit.get(Request.class), "prop")); }); } @Test public void skipNoRequest() throws Exception { new MockUnit(Request.class) .run( unit -> { assertEquals(ValueResolver.UNRESOLVED, new RequestValueResolver().resolve(new Object(), "prop")); }); } @Test public void resolveContext() throws Exception { new MockUnit(Request.class) .run(unit -> { assertEquals(unit.get(Request.class), new RequestValueResolver().resolve(unit.get(Request.class))); }); } @Test public void resolveNoRequest() throws Exception { new MockUnit() .run(unit -> { assertEquals(ValueResolver.UNRESOLVED, new RequestValueResolver().resolve(new Object())); }); } @SuppressWarnings("unchecked") @Test public void propertySet() throws Exception { Set<Entry<String, Object>> entries = new HashSet<>(); new MockUnit(Request.class) .expect(unit -> { Request Request = unit.get(Request.class); Map<String, Object> attributes = unit.mock(Map.class); expect(Request.attributes()).andReturn(attributes); expect(attributes.entrySet()).andReturn(entries); }) .run(unit -> { assertEquals(entries, new RequestValueResolver().propertySet(unit.get(Request.class))); }); } @Test public void propertySetAnything() throws Exception { new MockUnit(Request.class) .run(unit -> { assertEquals(Collections.emptySet(), new RequestValueResolver().propertySet(new Object())); }); } }