package jnpf.elnService.formula; import jnpf.elnEntity.formula.ElnTemplateFormulaBindingEntity; import org.junit.Test; import java.util.Arrays; import java.util.Collections; import java.util.LinkedHashMap; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; public class FormulaDependencyGraphTest { @Test public void returnsStableTopologicalOrderForFormulaChain() { ElnTemplateFormulaBindingEntity c = binding("c", "result-c", map("p", "result-b")); ElnTemplateFormulaBindingEntity a = binding("a", "result-a", Collections.emptyMap()); ElnTemplateFormulaBindingEntity b = binding("b", "result-b", map("p", "result-a")); FormulaDependencyGraph.Result result = new FormulaDependencyGraph() .validate(Arrays.asList(c, a, b)); assertTrue(result.isValid()); assertEquals(Arrays.asList("a", "b", "c"), result.getTopologicalOrder()); assertTrue(result.getCyclePath().isEmpty()); } @Test public void reportsCompleteCyclePathIncludingClosingNode() { ElnTemplateFormulaBindingEntity a = binding("a", "result-a", map("p", "result-c")); ElnTemplateFormulaBindingEntity b = binding("b", "result-b", map("p", "result-a")); ElnTemplateFormulaBindingEntity c = binding("c", "result-c", map("p", "result-b")); FormulaDependencyGraph.Result result = new FormulaDependencyGraph() .validate(Arrays.asList(c, b, a)); assertFalse(result.isValid()); assertEquals(Arrays.asList("a", "b", "c", "a"), result.getCyclePath()); } private static ElnTemplateFormulaBindingEntity binding(String id, String result, java.util.Map parameters) { ElnTemplateFormulaBindingEntity item = new ElnTemplateFormulaBindingEntity(); item.setId(id); item.setJieguoBangdingId(result); item.setBangdingZhuangtai("ACTIVE"); item.setCanshuYingshe(parameters); return item; } private static java.util.Map map(String key, String value) { java.util.Map result = new LinkedHashMap<>(); result.put(key, value); return result; } }