package fr.gouv.vitam.metadata.core;
import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.collections4.map.HashedMap;
import org.junit.Test;
import com.fasterxml.jackson.databind.node.ObjectNode;
import fr.gouv.vitam.common.exception.InvalidParseOperationException;
import fr.gouv.vitam.common.json.JsonHandler;
public class UnitNodeTest {
private static final String AU2_ID = "AU2";
private static final String AU1_ID = "AU1";
private static final String AU5_ID = "AU5";
private static final String AU3_ID = "AU3";
private static final String AU4_ID = "AU4";
private final static String AU1_MGT = "{" +
" \"StorageRule\" : {" +
" \"Rule\" : \"R1\"," +
" \"FinalAction\" : \"RestrictedAccess\"," +
" \"StartDate\" : \"01/01/2017\"," +
" \"EndDate\" : \"01/01/2019\"" +
" }," +
" \"AccessRule\" : {" +
" \"Rule\" : \"R2\"," +
" \"FinalAction\" : \"RestrictedAccess\"," +
" \"StartDate\" : \"01/01/2017\"," +
" \"EndDate\" : \"01/01/2019\"" +
" }" +
" }";
private final static String AU5_MGT = "{" +
" \"DissiminationRule\" : {" +
" \"Rule\" : \"R1\"" +
" }" +
" }";
private final static String AU3_MGT = "{" +
" \"AccessRule\" : {" +
" \"Rule\" : \"R2\"," +
" \"FinalAction\" : \"AU3Access\"," +
" \"EndDate\" : \"01/01/2019\"" +
" }" +
" }";
private ObjectNode node = JsonHandler.createObjectNode();
private List<String> emptyParent = new ArrayList<String>();
private List<String> upAU2 = new ArrayList<String>();
private List<String> upAU3 = new ArrayList<String>();
private List<String> upAU4 = new ArrayList<String>();
@Test
public void testTree() throws InvalidParseOperationException {
// Test case
// AU1 -> AU2 -> AU3 -> AU4
// AU1 -> AU2 -> AU4
// AU5 -> AU3 -> AU4
upAU2.add(AU1_ID);
upAU3.add(AU2_ID);
upAU3.add(AU5_ID);
upAU4.add(AU3_ID);
upAU4.add(AU2_ID);
UnitSimplified AU1 = new UnitSimplified(AU1_ID, (ObjectNode) JsonHandler.getFromString(AU1_MGT), emptyParent);
UnitSimplified AU5 = new UnitSimplified(AU5_ID, (ObjectNode) JsonHandler.getFromString(AU5_MGT), emptyParent);
UnitSimplified AU2 = new UnitSimplified(AU2_ID, node, upAU2);
UnitSimplified AU3 = new UnitSimplified(AU3_ID, (ObjectNode) JsonHandler.getFromString(AU3_MGT), upAU3);
UnitSimplified AU4 = new UnitSimplified(AU4_ID, node, upAU4);
Map<String, UnitSimplified> parentMap = new HashedMap<>();
parentMap.put(AU1_ID, AU1);
parentMap.put(AU5_ID, AU5);
parentMap.put(AU2_ID, AU2);
parentMap.put(AU3_ID, AU3);
Map<String, UnitNode> allUnitNode = new HashMap<String, UnitNode>();
UnitNode treeAU4 = new UnitNode(AU4);
Set<String> rootList = new HashSet<>();
treeAU4.buildAncestors(parentMap, allUnitNode, rootList);
assertEquals(rootList.size(), 2);
assertEquals(allUnitNode.size(), 5);
UnitNode treeAU3FromAllUnitNode = allUnitNode.get(AU3_ID);
UnitNode treeAU3FromAU4 = treeAU4.getDirectParent().get(AU3_ID);
UnitNode treeAU2FromAllUnitNode = allUnitNode.get(AU2_ID);
UnitNode treeAU2FromAU4 = treeAU4.getDirectParent().get(AU2_ID);
assertEquals(treeAU3FromAU4, treeAU3FromAllUnitNode);
assertEquals(treeAU2FromAU4, treeAU2FromAllUnitNode);
}
}