// ============================================================================ // // 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.dataprofiler.core.ui.action.provider; import static org.junit.Assert.*; import static org.mockito.Mockito.*; import java.util.List; import junit.framework.Assert; import org.eclipse.core.resources.IFolder; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.jface.viewers.TreeSelection; import org.eclipse.ui.actions.ActionContext; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.talend.commons.exception.PersistenceException; import org.talend.core.context.Context; import org.talend.core.context.RepositoryContext; import org.talend.core.database.EDatabaseTypeName; import org.talend.core.model.general.Project; import org.talend.core.model.metadata.builder.connection.ConnectionFactory; import org.talend.core.model.metadata.builder.connection.DatabaseConnection; import org.talend.core.model.properties.DatabaseConnectionItem; import org.talend.core.model.properties.ItemState; import org.talend.core.model.properties.PropertiesFactory; import org.talend.core.model.repository.ERepositoryObjectType; import org.talend.core.model.repository.IRepositoryViewObject; import org.talend.core.repository.model.ProxyRepositoryFactory; import org.talend.core.runtime.CoreRuntimePlugin; import org.talend.dataprofiler.core.helper.UnitTestBuildHelper; import org.talend.dataquality.analysis.Analysis; import org.talend.dataquality.analysis.AnalysisContext; import org.talend.dataquality.analysis.AnalysisFactory; import org.talend.dataquality.analysis.AnalysisParameters; import org.talend.dataquality.analysis.AnalysisResult; import org.talend.dataquality.analysis.ExecutionInformations; import org.talend.dataquality.indicators.CountsIndicator; import org.talend.dataquality.indicators.IndicatorsFactory; import org.talend.dataquality.indicators.definition.IndicatorDefinition; import org.talend.dataquality.properties.TDQAnalysisItem; import org.talend.dq.helper.PropertyHelper; import org.talend.dq.nodes.AnalysisRepNode; import org.talend.dq.nodes.DBConnectionRepNode; import org.talend.repository.localprovider.model.LocalRepositoryFactory; import org.talend.repository.model.IRepositoryNode.ENodeType; import org.talend.repository.model.RepositoryNode; /** * created by qiongli on 2012-9-18 Detailled comment * */ public class AbstractCommonActionProviderTest { private AbstractCommonActionProvider absCommonActionProvider = null; TreeSelection treeSel = null; private static LocalRepositoryFactory repositoryFactory; ProxyRepositoryFactory factory = ProxyRepositoryFactory.getInstance(); private static Project originalProject; /** * DOC qiongli Comment method "setUp". * * @throws java.lang.Exception */ @Before public void setUp() throws Exception { absCommonActionProvider = new AbstractCommonActionProvider(); ActionContext context = mock(ActionContext.class); treeSel = mock(TreeSelection.class); when(context.getSelection()).thenReturn(treeSel); absCommonActionProvider.setContext(context); UnitTestBuildHelper.initProjectStructure("testForDeleteActionTDQ"); //$NON-NLS-1$ } @BeforeClass public static void beforeAllTests() { Context ctx = CoreRuntimePlugin.getInstance().getContext(); RepositoryContext repositoryContext = (RepositoryContext) ctx.getProperty(Context.REPOSITORY_CONTEXT_KEY); if (repositoryContext != null) { originalProject = repositoryContext.getProject(); } repositoryFactory = new LocalRepositoryFactory(); } @AfterClass public static void afterAllTests() { repositoryFactory = null; if (originalProject != null) { Context ctx = CoreRuntimePlugin.getInstance().getContext(); RepositoryContext repositoryContext = (RepositoryContext) ctx.getProperty(Context.REPOSITORY_CONTEXT_KEY); repositoryContext.setProject(originalProject); } } /** * Test method for different type nodes(analysis node and report node) . */ @Test public void testisSelectionSameType_1() { RepositoryNode anaNode = createAnalysisNode("ana", null, false); //$NON-NLS-1$ setParentNode(anaNode, ERepositoryObjectType.TDQ_ANALYSIS_ELEMENT); RepositoryNode connectionNode = createConnectionNode("conn", null, false); //$NON-NLS-1$ setParentNode(connectionNode, ERepositoryObjectType.METADATA_CONNECTIONS); Object objs[] = new Object[2]; objs[0] = anaNode; objs[1] = connectionNode; when(treeSel.toArray()).thenReturn(objs); boolean flag = absCommonActionProvider.isSelectionSameType(); assertFalse(flag); } /** * Test method for the same type nodes(analysis nodes) . */ @Test public void testisSelectionSameType_2() { RepositoryNode anaNode = createAnalysisNode("ana", null, false); //$NON-NLS-1$ RepositoryNode anaNode2 = createAnalysisNode("ana2", null, false); //$NON-NLS-1$ setParentNode(anaNode, ERepositoryObjectType.TDQ_ANALYSIS_ELEMENT); setParentNode(anaNode2, ERepositoryObjectType.TDQ_ANALYSIS_ELEMENT); Object objs[] = new Object[2]; objs[0] = anaNode; objs[1] = anaNode2; when(treeSel.toArray()).thenReturn(objs); boolean flag = absCommonActionProvider.isSelectionSameType(); assertTrue(flag); } /** * Test method for a node is in recycle bin,another one is not in recycle bin . */ @Test public void testisSelectionSameType_3() { RepositoryNode anaNode = createAnalysisNode("ana", null, false); //$NON-NLS-1$ RepositoryNode anaNode_deleted = createAnalysisNode("ana2", null, true); //$NON-NLS-1$ setParentNode(anaNode, ERepositoryObjectType.TDQ_ANALYSIS_ELEMENT); setParentNode(anaNode, ERepositoryObjectType.TDQ_ANALYSIS_ELEMENT); Object objs[] = new Object[2]; objs[0] = anaNode; objs[1] = anaNode_deleted; when(treeSel.toArray()).thenReturn(objs); boolean flag = absCommonActionProvider.isSelectionSameType(); assertFalse(flag); } private RepositoryNode createConnectionNode(String name, IFolder folder, boolean isDelete) { IPath createPath = Path.EMPTY; if (folder != null) { createPath = new Path(folder.getFullPath().lastSegment()); } // connection DatabaseConnection createConnection = ConnectionFactory.eINSTANCE.createDatabaseConnection(); createConnection.setName(name); createConnection.setUsername("UserName"); //$NON-NLS-1$ createConnection.setRawPassword("Password"); //$NON-NLS-1$ createConnection.setURL("URL"); //$NON-NLS-1$ createConnection.setDatabaseType(EDatabaseTypeName.MYSQL.getXmlName()); createConnection.setContextMode(true); // ~connection DatabaseConnectionItem createDatabaseConnectionItem = PropertiesFactory.eINSTANCE.createDatabaseConnectionItem(); org.talend.core.model.properties.Property createDatabaseConnectionProperty = PropertiesFactory.eINSTANCE.createProperty(); createDatabaseConnectionProperty.setId(EcoreUtil.generateUUID()); createDatabaseConnectionProperty.setItem(createDatabaseConnectionItem); createDatabaseConnectionProperty.setLabel(createConnection.getName()); createDatabaseConnectionItem.setProperty(createDatabaseConnectionProperty); createDatabaseConnectionItem.setConnection(createConnection); ItemState createItemState = PropertiesFactory.eINSTANCE.createItemState(); createItemState.setDeleted(isDelete); createDatabaseConnectionItem.setState(createItemState); IRepositoryViewObject repViewObject = null; try { factory.create(createDatabaseConnectionItem, createPath, false); repViewObject = factory.getLastVersion(createDatabaseConnectionProperty.getId()); } catch (PersistenceException e) { Assert.fail(e.getMessage()); } RepositoryNode dbConnRepNode = new DBConnectionRepNode(repViewObject, null, ENodeType.TDQ_REPOSITORY_ELEMENT, null); return dbConnRepNode; } private RepositoryNode createAnalysisNode(String name, IFolder folder, boolean isDelete) { IPath createPath = Path.EMPTY; if (folder != null) { createPath = new Path(folder.getFullPath().lastSegment()); } // connection Analysis createAnalysis = AnalysisFactory.eINSTANCE.createAnalysis(); createAnalysis.setName(name); // ~connection TDQAnalysisItem createAnalysisItem = org.talend.dataquality.properties.PropertiesFactory.eINSTANCE .createTDQAnalysisItem(); org.talend.core.model.properties.Property createAnaProperty = PropertiesFactory.eINSTANCE.createProperty(); createAnaProperty.setId(EcoreUtil.generateUUID()); createAnaProperty.setItem(createAnalysisItem); createAnaProperty.setLabel(createAnalysis.getName()); createAnalysisItem.setProperty(createAnaProperty); createAnalysisItem.setAnalysis(createAnalysis); ItemState createItemState = PropertiesFactory.eINSTANCE.createItemState(); createItemState.setDeleted(isDelete); createAnalysisItem.setState(createItemState); // Indicator CountsIndicator createCountsIndicator = IndicatorsFactory.eINSTANCE.createCountsIndicator(); List<IRepositoryViewObject> all = null; IndicatorDefinition createIndicatorDefinition = null; try { all = factory.getAll(ERepositoryObjectType.TDQ_SYSTEM_INDICATORS); for (IRepositoryViewObject indicatorViewObject : all) { if (indicatorViewObject.getLabel().equalsIgnoreCase("ROW COUNT")) { //$NON-NLS-1$ createIndicatorDefinition = (IndicatorDefinition) PropertyHelper.getModelElement(indicatorViewObject .getProperty()); break; } } } catch (PersistenceException e1) { e1.printStackTrace(); Assert.fail(e1.getMessage()); } createCountsIndicator.setIndicatorDefinition(createIndicatorDefinition); AnalysisParameters createAnalysisParameters = AnalysisFactory.eINSTANCE.createAnalysisParameters(); AnalysisContext createAnalysisContext = AnalysisFactory.eINSTANCE.createAnalysisContext(); createAnalysis.setContext(createAnalysisContext); AnalysisResult createAnalysisResult = AnalysisFactory.eINSTANCE.createAnalysisResult(); ExecutionInformations createExecutionInformations = AnalysisFactory.eINSTANCE.createExecutionInformations(); createAnalysisResult.setResultMetadata(createExecutionInformations); createAnalysisResult.getIndicators().add(createCountsIndicator); createAnalysis.setResults(createAnalysisResult); createAnalysis.setParameters(createAnalysisParameters); IRepositoryViewObject repViewObject = null; try { factory.create(createAnalysisItem, createPath, false); repViewObject = factory.getLastVersion(createAnaProperty.getId()); } catch (PersistenceException e) { Assert.fail(e.getMessage()); } RepositoryNode anaRepNode = new AnalysisRepNode(repViewObject, null, ENodeType.TDQ_REPOSITORY_ELEMENT, null); // set the contentType for anaRepNode from its parentNode setParentNode(anaRepNode, ERepositoryObjectType.TDQ_ANALYSIS_ELEMENT); // ~ return anaRepNode; } private void setParentNode(RepositoryNode repNode, ERepositoryObjectType objType) { RepositoryNode parentNode = mock(RepositoryNode.class); when(parentNode.getContentType()).thenReturn(objType); repNode.setParent(parentNode); } }