// ============================================================================
//
// 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 org.talend.mdm.repository.utils;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
import java.lang.reflect.Constructor;
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EObject;
import org.junit.Rule;
import org.junit.Test;
import org.mockito.Mockito;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.rule.PowerMockRule;
import org.talend.mdm.repository.model.mdmserverobject.MDMServerObject;
import org.talend.mdm.repository.model.mdmserverobject.MdmserverobjectFactory;
import org.talend.mdm.repository.model.mdmserverobject.WSMenuE;
import org.talend.mdm.repository.model.mdmserverobject.WSMenuEntryE;
import org.talend.mdm.repository.model.mdmserverobject.WSMenuMenuEntriesDescriptionsE;
import com.amalto.workbench.models.TreeObject;
import com.amalto.workbench.webservices.WSMenu;
import com.amalto.workbench.webservices.WSMenuEntry;
import com.amalto.workbench.webservices.WSMenuMenuEntriesDescriptions;
@PrepareForTest({ Bean2EObjUtil.class, System.class, IOUtil.class, EMFClassUtil.class, Logger.class })
public class Bean2EObjUtilTest {
@Rule
public PowerMockRule powerMockRule = new PowerMockRule();
@Test
public void testPrivateConstructor() throws ClassNotFoundException {
Class<?> utilClass = Class.forName(Bean2EObjUtil.class.getCanonicalName());
Constructor<?>[] constructors = utilClass.getConstructors();
assertNotNull(constructors);
assertEquals(1, constructors.length);
assertFalse(constructors[0].isAccessible());
}
@Test
public void testGetInstance() {
Bean2EObjUtil util = Bean2EObjUtil.getInstance();
util = Bean2EObjUtil.getInstance();
assertNotNull(util);
}
/**
* Test method for {@link Bean2EObjUtil#registerClassMap(java.lang.Class)}.
*
* @throws Exception
*/
@Test
public void testRegisterClassMap() throws Exception {
Bean2EObjUtil util = Bean2EObjUtil.getInstance();
Bean2EObjUtil spyUtil = PowerMockito.spy(util);
spyUtil.registerClassMap(WSMenu.class);
assertNotNull(spyUtil.classMap);
assertNotNull(spyUtil.classMap.get(WSMenu.class));
}
/**
* Test method for {@link Bean2EObjUtil#convertFromBean2EObj(java.lang.Object)}.
*/
@Test
public void testConvertFromBean2EObj() {
WSMenu menu = new WSMenu();
initBean(menu);
Bean2EObjUtil util = Bean2EObjUtil.getInstance();
util.registerClassMap(WSMenu.class);
EObject eObject = util.convertFromBean2EObj(menu, null);
assertNotNull(eObject);
WSMenuE menuE = (WSMenuE) eObject;
//
assertEquals(menu.getName(), menuE.getName());
assertEquals(menu.getDescription(), menuE.getDescription());
//
List<WSMenuEntry> menuEntries = menu.getMenuEntries();
EList<WSMenuEntryE> menuEntriesE = menuE.getMenuEntries();
for (int i = 0; i < menuEntries.size(); i++) {
checkMenuEntry(menuEntries.get(i), menuEntriesE.get(i));
}
}
private void initBean(WSMenu menu) {
menu.setDescription("this is a description"); //$NON-NLS-1$
menu.setName("menuA"); //$NON-NLS-1$
//
List<WSMenuEntry> menuEntries = new ArrayList<WSMenuEntry>();
WSMenuEntry menuEntry = new WSMenuEntry();
menuEntry.setApplication("application A"); //$NON-NLS-1$
menuEntry.setContext("contextA"); //$NON-NLS-1$
menuEntry.setIcon("icon A"); //$NON-NLS-1$
menuEntry.setId("id A"); //$NON-NLS-1$
WSMenuMenuEntriesDescriptions ds = new WSMenuMenuEntriesDescriptions();
ds.setLabel("label A"); //$NON-NLS-1$
ds.setLanguage("En"); //$NON-NLS-1$
menuEntry.getDescriptions().add(ds);
menuEntries.add(menuEntry);
//
menuEntry = new WSMenuEntry();
menuEntry.setApplication("application B"); //$NON-NLS-1$
menuEntry.setContext("contextB"); //$NON-NLS-1$
menuEntry.setIcon("icon B"); //$NON-NLS-1$
menuEntry.setId("id B"); //$NON-NLS-1$
menuEntries.add(menuEntry);
//
menu.getMenuEntries().add(menuEntry);
}
private void checkMenuEntry(WSMenuEntry entry, WSMenuEntryE entryE) {
assertEquals(entry.getApplication(), entryE.getApplication());
assertEquals(entry.getContext(), entryE.getContext());
assertEquals(entry.getIcon(), entryE.getIcon());
assertEquals(entry.getId(), entryE.getId());
List<WSMenuMenuEntriesDescriptions> ds = entry.getDescriptions();
EList<WSMenuMenuEntriesDescriptionsE> des = entryE.getDescriptions();
if (ds != null) {
for (int i = 0; i < ds.size(); i++) {
checkDesc(ds.get(i), des.get(i));
}
}
}
private void checkDesc(WSMenuMenuEntriesDescriptions ds, WSMenuMenuEntriesDescriptionsE des) {
assertEquals(ds.getLabel(), des.getLabel());
assertEquals(ds.getLanguage(), des.getLanguage());
}
@Test
public void testConvertFromEObj2Bean() {
WSMenuE menuE = MdmserverobjectFactory.eINSTANCE.createWSMenuE();
initEObject(menuE);
//
Bean2EObjUtil util = Bean2EObjUtil.getInstance();
util.registerClassMap(WSMenu.class);
WSMenu menu = (WSMenu) util.convertFromEObj2Bean(menuE);
assertNotNull(menu);
//
assertEquals(menu.getName(), menuE.getName());
assertEquals(menu.getDescription(), menuE.getDescription());
List<WSMenuEntry> menuEntries = menu.getMenuEntries();
EList<WSMenuEntryE> menuEntriesE = menuE.getMenuEntries();
for (int i = 0; i < menuEntries.size(); i++) {
checkMenuEntry(menuEntries.get(i), menuEntriesE.get(i));
}
}
private void initEObject(WSMenuE menuE) {
menuE.setDescription("this is a description"); //$NON-NLS-1$
menuE.setName("menuA"); //$NON-NLS-1$
menuE.setSystem(false);
menuE.getMenuEntries();
//
WSMenuEntryE wsMenuEntry = MdmserverobjectFactory.eINSTANCE.createWSMenuEntryE();
wsMenuEntry.setApplication("application A"); //$NON-NLS-1$
wsMenuEntry.setContext("contextA"); //$NON-NLS-1$
wsMenuEntry.setIcon("icon A"); //$NON-NLS-1$
wsMenuEntry.setId("id A"); //$NON-NLS-1$
menuE.getMenuEntries().add(wsMenuEntry);
//
wsMenuEntry = MdmserverobjectFactory.eINSTANCE.createWSMenuEntryE();
wsMenuEntry.setApplication("application B"); //$NON-NLS-1$
wsMenuEntry.setContext("contextB"); //$NON-NLS-1$
wsMenuEntry.setIcon("icon B"); //$NON-NLS-1$
// wsMenuEntry.setId("id B");
menuE.getMenuEntries().add(wsMenuEntry);
//
WSMenuMenuEntriesDescriptionsE ds = MdmserverobjectFactory.eINSTANCE.createWSMenuMenuEntriesDescriptionsE();
ds.setLabel("Label C"); //$NON-NLS-1$
ds.setLanguage("En"); //$NON-NLS-1$
wsMenuEntry.getDescriptions().add(ds);
}
/**
* test wrapEObjWithTreeObject with two input parameters
*/
@Test
public void testWrapEObjWithTreeObject2Args() {
EObject eobj = null;
Object wsObj = null;
Bean2EObjUtil util = Bean2EObjUtil.getInstance();
TreeObject treeObject = util.wrapEObjWithTreeObject(eobj, wsObj);
assertNull(treeObject);
MDMServerObject mdmServerObject = PowerMockito.mock(MDMServerObject.class);
when(mdmServerObject.getName()).thenReturn("name");
when(mdmServerObject.getType()).thenReturn(2);
eobj = mdmServerObject;
treeObject = util.wrapEObjWithTreeObject(eobj, wsObj);
assertNotNull(treeObject);
Mockito.verify(mdmServerObject, Mockito.atLeastOnce()).getName();
Mockito.verify(mdmServerObject, Mockito.atLeastOnce()).getType();
assertEquals("name", treeObject.getName());
assertEquals(2, treeObject.getType());
}
/**
* test wrapEObjWithTreeObject with one input parameter
*/
@Test
public void testWrapEObjWithTreeObject1Args() {
EObject eobj = null;
Bean2EObjUtil util = Bean2EObjUtil.getInstance();
TreeObject treeObject = util.wrapEObjWithTreeObject(eobj);
assertNull(treeObject);
MDMServerObject mdmServerObject = PowerMockito.mock(MDMServerObject.class);
when(mdmServerObject.getName()).thenReturn("name");
when(mdmServerObject.getType()).thenReturn(2);
eobj = mdmServerObject;
treeObject = util.wrapEObjWithTreeObject(eobj);
assertNotNull(treeObject);
Mockito.verify(mdmServerObject, Mockito.atLeastOnce()).getName();
Mockito.verify(mdmServerObject, Mockito.atLeastOnce()).getType();
assertEquals("name", treeObject.getName());
assertEquals(2, treeObject.getType());
}
}