package com.hubspot.jinjava.lib.filter; import static org.assertj.core.api.Assertions.assertThat; import java.util.HashMap; import java.util.Map; import org.apache.commons.lang3.StringUtils; import org.junit.Before; import org.junit.Test; import com.hubspot.jinjava.Jinjava; public class UniqueFilterTest { Jinjava jinjava; @Before public void setup() { jinjava = new Jinjava(); } @Test public void itDoesntFilterWhenNoDuplicateItemsInSeq() { assertThat(render(1, 2, 3)).isEqualTo("123"); } @Test public void itFiltersDuplicatesFromSeq() { assertThat(render(1, 4, 3, 2, 3, 1, 4, 2, 6, 7, 8)).isEqualTo("1432678"); } @Test public void itFiltersDuplicatesFromSeqByAttr() { assertThat(render("name", new MyClass("a"), new MyClass("b"), new MyClass("a"), new MyClass("c"))) .isEqualTo("[Name:a][Name:b][Name:c]"); } String render(Object... items) { return render("", items); } String render(String attr, Object... items) { Map<String, Object> context = new HashMap<>(); context.put("iterable", items); String attrExtra = ""; if (StringUtils.isNotBlank(attr)) { attrExtra = "(attr='" + attr + "')"; } return jinjava.render("{% for item in iterable|unique" + attrExtra + " %}{{ item }}{% endfor %}", context); } public static class MyClass { private final String name; public MyClass(String name) { this.name = name; } public String getName() { return name; } @Override public String toString() { return "[Name:" + name + "]"; } } }