// ============================================================================
//
// Copyright (C) 2006-2016 Talend Inc. - www.talend.com
//
// This source code is available under agreement available at
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
//
// You should have received a copy of the agreement
// along with this program; if not, write to Talend SA
// 9 rue Pages 92150 Suresnes, France
//
// ============================================================================
package com.amalto.workbench.dialogs.datacontainer;
import static org.junit.Assert.*;
import java.util.HashMap;
import java.util.Map;
import org.junit.Before;
import org.junit.Test;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import com.amalto.workbench.utils.Util;
/**
* created by liusongbo on 2014-1-24
*/
@SuppressWarnings("nls")
public class AutoIncrementHelperTest {
private String autoIncrementRecord = "";
@Before
public void setUp() throws Exception {
autoIncrementRecord = "<AutoIncrement>\r\n" + " <id>AutoIncrement</id>\r\n" + " <entry>\r\n"
+ " <key>[HEAD].Product.Store.Id</key>\r\n" + " <value>1</value>\r\n" + " </entry>\r\n" + " <entry>\r\n"
+ " <key>[HEAD].Product.Product.Id</key>\r\n" + " <value>2</value>\r\n" + " </entry>\r\n"
+ " <entry>\r\n" + " <key>[HEAD].TestModel.ModelA.Id</key>\r\n" + " <value>3</value>\r\n"
+ " </entry>\r\n" + "</AutoIncrement>\r\n" + "";
}
@Test
public void testGetCurrentValue() throws Exception {
assertNull(AutoIncrementHelper.getCurrentValue(null, null));
assertNull(AutoIncrementHelper.getCurrentValue("", new HashMap<String, String>()));
Map<String, String> entityToKeys = new HashMap<String, String>();
entityToKeys.put("Store", "[HEAD].Product.Store.Id");
entityToKeys.put("Product", "[HEAD].Product.Product.Id");
entityToKeys.put("ModelA", "[HEAD].TestModel.ModelA.Id");
entityToKeys.put("ProductFamily", "[HEAD].Product.ProductFamily.Id");
assertNull(AutoIncrementHelper.getCurrentValue(autoIncrementRecord, null));
assertNull(AutoIncrementHelper.getCurrentValue(autoIncrementRecord, new HashMap<String, String>()));
assertNull(AutoIncrementHelper.getCurrentValue(null, entityToKeys));
assertNull(AutoIncrementHelper.getCurrentValue("", entityToKeys));
Map<String, String> currentValues = AutoIncrementHelper.getCurrentValue(autoIncrementRecord, entityToKeys);
assertNotNull(currentValues);
assertTrue(currentValues.size() == 4);
assertEquals("1", currentValues.get("Store"));
assertEquals("2", currentValues.get("Product"));
assertEquals("3", currentValues.get("ModelA"));
assertEquals("0", currentValues.get("ProductFamily"));
}
@Test
public void testUpdateValue() throws Exception {
Map<String, String> keyToValues = new HashMap<String, String>();
keyToValues.put("[HEAD].Product.Store.Id", "3");
keyToValues.put("[HEAD].Product.Product.Id", "4");
keyToValues.put("[HEAD].Product.ProductFamily.Id", "5");
keyToValues.put("[HEAD].TestModel.ModelA.Id", "0");
String updatedValue = AutoIncrementHelper.updateValue(autoIncrementRecord, keyToValues);
assertNotNull(updatedValue);
String TAG_KEY = "key";
String TAG_VALUE = "value";
String TAG_ENTRY = "entry";
Document doc = Util.parse(updatedValue);
NodeList entries = doc.getElementsByTagName(TAG_ENTRY);
assertNotNull(entries);
assertTrue(entries.getLength() == 3);
Map<String, String> keyvalues = new HashMap<String, String>();
for (int i = 0; i < entries.getLength(); i++) {
Node item = entries.item(i);
NodeList childNodes = item.getChildNodes();
String key = null, value = null;
for (int j = 0; j < childNodes.getLength(); j++) {
String nodeName = childNodes.item(j).getNodeName();
if (nodeName.equals(TAG_KEY)) {
key = childNodes.item(j).getTextContent();
} else if (nodeName.equals(TAG_VALUE)) {
value = childNodes.item(j).getTextContent();
}
}
keyvalues.put(key, value);
}
assertEquals("3", keyvalues.get("[HEAD].Product.Store.Id"));
assertEquals("4", keyvalues.get("[HEAD].Product.Product.Id"));
assertEquals("5", keyvalues.get("[HEAD].Product.ProductFamily.Id"));
assertEquals(null, keyvalues.get("[HEAD].TestModel.ModelA.Id"));
}
}