package com.hubspot.jinjava.lib.filter;
import static org.assertj.core.api.Assertions.assertThat;
import java.nio.charset.StandardCharsets;
import java.util.Map;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
import org.junit.Before;
import org.junit.Test;
import com.google.common.base.Throwables;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
import com.google.common.io.Resources;
import com.hubspot.jinjava.Jinjava;
public class BatchFilterTest {
Jinjava jinjava;
@Before
public void setup() {
jinjava = new Jinjava();
}
@Test
public void batchFilterNoBackfill() {
Map<String, Object> context = ImmutableMap.of("items", (Object) Lists.newArrayList(
"1", "2", "3", "4", "5", "6"));
Document dom = Jsoup.parseBodyFragment(render("batch-filter", context));
assertThat(dom.select("tr")).hasSize(2);
Elements trs = dom.select("tr");
assertThat(trs.get(0).select("td")).hasSize(3);
assertThat(trs.get(0).select("td").get(0).text()).isEqualTo("1");
assertThat(trs.get(0).select("td").get(1).text()).isEqualTo("2");
assertThat(trs.get(0).select("td").get(2).text()).isEqualTo("3");
assertThat(trs.get(1).select("td")).hasSize(3);
assertThat(trs.get(1).select("td").get(0).text()).isEqualTo("4");
assertThat(trs.get(1).select("td").get(1).text()).isEqualTo("5");
assertThat(trs.get(1).select("td").get(2).text()).isEqualTo("6");
}
@Test
public void batchFilterFillMissing() {
Map<String, Object> context = ImmutableMap.of("items", (Object) Lists.newArrayList(
"1", "2", "3", "4"));
Document dom = Jsoup.parseBodyFragment(render("batch-filter", context));
assertThat(dom.select("tr")).hasSize(2);
Elements trs = dom.select("tr");
assertThat(trs.get(0).select("td")).hasSize(3);
assertThat(trs.get(0).select("td").get(0).text()).isEqualTo("1");
assertThat(trs.get(0).select("td").get(1).text()).isEqualTo("2");
assertThat(trs.get(0).select("td").get(2).text()).isEqualTo("3");
assertThat(trs.get(1).select("td")).hasSize(3);
assertThat(trs.get(1).select("td").get(0).text()).isEqualTo("4");
assertThat(trs.get(1).select("td").get(1).text()).isEqualTo("foo");
assertThat(trs.get(1).select("td").get(2).text()).isEqualTo("foo");
}
private String render(String template, Map<String, Object> context) {
try {
return jinjava.render(Resources.toString(Resources.getResource(String.format("filter/%s.jinja", template)), StandardCharsets.UTF_8), context);
} catch (Exception e) {
throw Throwables.propagate(e);
}
}
}