package org.jooby.internal.hbs;
import static org.easymock.EasyMock.expect;
import static org.junit.Assert.assertEquals;
import java.util.Collections;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Optional;
import java.util.Set;
import org.jooby.Mutant;
import org.jooby.Session;
import org.jooby.test.MockUnit;
import org.junit.Test;
import com.github.jknack.handlebars.ValueResolver;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Maps;
public class SessionValueResolverTest {
@Test
public void resolveProperty() throws Exception {
new MockUnit(Session.class)
.expect(unit -> {
Session session = unit.get(Session.class);
Mutant v = unit.mock(Mutant.class);
expect(v.toOptional()).andReturn(Optional.of("x"));
expect(session.get("prop")).andReturn(v);
})
.run(unit -> {
assertEquals("x", new SessionValueResolver().resolve(unit.get(Session.class), "prop"));
});
}
@Test
public void resolveMissingProperty() throws Exception {
new MockUnit(Session.class)
.expect(unit -> {
Session session = unit.get(Session.class);
Mutant v = unit.mock(Mutant.class);
expect(v.toOptional()).andReturn(Optional.empty());
expect(session.get("prop")).andReturn(v);
})
.run(
unit -> {
assertEquals(ValueResolver.UNRESOLVED,
new SessionValueResolver().resolve(unit.get(Session.class), "prop"));
});
}
@Test
public void skipSession() throws Exception {
new MockUnit(Session.class)
.run(
unit -> {
assertEquals(ValueResolver.UNRESOLVED,
new SessionValueResolver().resolve(new Object(), "prop"));
});
}
@Test
public void resolveContext() throws Exception {
new MockUnit(Session.class)
.run(unit -> {
assertEquals(unit.get(Session.class),
new SessionValueResolver().resolve(unit.get(Session.class)));
});
}
@Test
public void resolveNoSession() throws Exception {
new MockUnit()
.run(unit -> {
assertEquals(ValueResolver.UNRESOLVED,
new SessionValueResolver().resolve(new Object()));
});
}
@Test
public void propertySet() throws Exception {
Map<String, String> attributes = ImmutableMap.of("k", "v");
Set<Entry<String, Object>> entries = ImmutableSet.of(Maps.immutableEntry("k", "v"));
new MockUnit(Session.class)
.expect(unit -> {
Session Rsession = unit.get(Session.class);
expect(Rsession.attributes()).andReturn(attributes);
})
.run(unit -> {
assertEquals(entries,
new SessionValueResolver().propertySet(unit.get(Session.class)));
});
}
@Test
public void propertySetAnything() throws Exception {
new MockUnit(Session.class)
.run(unit -> {
assertEquals(Collections.emptySet(),
new SessionValueResolver().propertySet(new Object()));
});
}
}