// ============================================================================
//
// 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.cwm.compare.factory;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.talend.commons.exception.PersistenceException;
import org.talend.core.model.general.Project;
import org.talend.core.model.metadata.builder.connection.Connection;
import org.talend.core.model.metadata.builder.connection.ConnectionFactory;
import org.talend.core.model.properties.DatabaseConnectionItem;
import org.talend.core.model.properties.Property;
import org.talend.core.model.repository.ERepositoryObjectType;
import org.talend.core.model.repository.IRepositoryViewObject;
import org.talend.core.model.repository.RepositoryViewObject;
import org.talend.core.repository.model.ProxyRepositoryFactory;
import org.talend.core.repository.model.repositoryObject.MetadataCatalogRepositoryObject;
import org.talend.cwm.compare.UnitTestBuildHelper;
import org.talend.cwm.compare.factory.comparisonlevel.CatalogSchemaComparisonLevel;
import org.talend.cwm.compare.factory.comparisonlevel.DataProviderComparisonLevel;
import org.talend.cwm.compare.factory.comparisonlevel.RepositoryObjectComparisonLevel;
import org.talend.cwm.compare.factory.comparisonlevel.TableViewComparisonLevel;
import org.talend.cwm.helper.CatalogHelper;
import org.talend.cwm.helper.ConnectionHelper;
import org.talend.dq.helper.PropertyHelper;
import org.talend.dq.nodes.AnalysisFolderRepNode;
import org.talend.dq.nodes.DBColumnFolderRepNode;
import org.talend.dq.nodes.DBConnectionRepNode;
import org.talend.dq.nodes.DBTableFolderRepNode;
import org.talend.dq.nodes.DBTableRepNode;
import org.talend.dq.nodes.DBViewFolderRepNode;
import org.talend.dq.nodes.factory.DQRepNodeCreateFactory;
import org.talend.repository.ProjectManager;
import org.talend.repository.model.IRepositoryNode.ENodeType;
import org.talend.repository.model.RepositoryNode;
import orgomg.cwm.resource.relational.Catalog;
/**
* DOC yyin class global comment. Detailled comment
*/
public class TestComparisonLevelFactoryTest {
ProxyRepositoryFactory factory = ProxyRepositoryFactory.getInstance();
DatabaseConnectionItem databaseConnectionItem = null;
/*
* (non-Javadoc)
*
* @see junit.framework.TestCase#setUp()
*/
@Before
public void setUp() throws Exception {
UnitTestBuildHelper.initProjectStructure();
}
/*
* (non-Javadoc)
*
* @see junit.framework.TestCase#tearDown()
*/
@After
public void tearDown() throws Exception {
}
/**
* Test method for
* {@link org.talend.cwm.compare.factory.ComparisonLevelFactory#creatComparisonLevel(java.lang.Object)}. test for
* the type of : db connectin rep node
*/
@Test
public void testCreatComparisonLevelObject_1() {
Property property = PropertyHelper.createTDQItemProperty();
IRepositoryViewObject viewObj = new RepositoryViewObject(property);
DBConnectionRepNode node = new DBConnectionRepNode(viewObj, null, null, null);
IComparisonLevel level = ComparisonLevelFactory.creatComparisonLevel(node);
Assert.assertTrue(level instanceof RepositoryObjectComparisonLevel);
}
/**
* Test method for
* {@link org.talend.cwm.compare.factory.ComparisonLevelFactory#creatComparisonLevel(java.lang.Object)}. test for
* the type of : table folder rep node
*/
@Test
public void testCreatComparisonLevelObject_2() {
RepositoryNode dbCatalogRepNode = createCatalogRepNode();
DBTableFolderRepNode dbTableFolderRepNode = new DBTableFolderRepNode(null, dbCatalogRepNode, null, null);
IComparisonLevel level = ComparisonLevelFactory.creatComparisonLevel(dbTableFolderRepNode);
Assert.assertTrue(level instanceof CatalogSchemaComparisonLevel);
}
/**
* Test method for
* {@link org.talend.cwm.compare.factory.ComparisonLevelFactory#creatComparisonLevel(java.lang.Object)}. test for
* the type of : db view rep node
*/
@Test
public void testCreatComparisonLevelObject_3() {
//
RepositoryNode dbCatalogRepNode = createCatalogRepNode();
DBViewFolderRepNode node = new DBViewFolderRepNode(null, dbCatalogRepNode, null, null);
IComparisonLevel level = ComparisonLevelFactory.creatComparisonLevel(node);
Assert.assertTrue(level instanceof CatalogSchemaComparisonLevel);
}
/**
* Test method for
* {@link org.talend.cwm.compare.factory.ComparisonLevelFactory#creatComparisonLevel(java.lang.Object)}. test for
* the type of : rep node
*/
@Test
public void testCreatComparisonLevelObject_5() {
RepositoryNode dbCatalogRepNode = createCatalogRepNode();
DBTableRepNode dbTableRepNode = new DBTableRepNode(null, dbCatalogRepNode, ENodeType.TDQ_REPOSITORY_ELEMENT, null);
DBColumnFolderRepNode node = new DBColumnFolderRepNode(null, dbTableRepNode, null, null);
IComparisonLevel level = ComparisonLevelFactory.creatComparisonLevel(node);
Assert.assertTrue(level instanceof TableViewComparisonLevel);
}
/**
* Test method for
* {@link org.talend.cwm.compare.factory.ComparisonLevelFactory#creatComparisonLevel(java.lang.Object)}. test for
* the type of : rep node
*/
@Test
public void testCreatComparisonLevelObject_6() {
Connection connection = ConnectionFactory.eINSTANCE.createConnection();
IComparisonLevel level = ComparisonLevelFactory.creatComparisonLevel(connection);
Assert.assertTrue(level instanceof DataProviderComparisonLevel);
}
/**
* Test method for
* {@link org.talend.cwm.compare.factory.ComparisonLevelFactory#creatComparisonLevel(java.lang.Object)}. test for
* the type of : null
*/
@Test
public void testCreatComparisonLevelObject_7() {
IComparisonLevel level = ComparisonLevelFactory.creatComparisonLevel(null);
Assert.assertNull(level);
}
// other type
@Test
public void testCreatComparisonLevelObject_8() {
Project tProject = ProjectManager.getInstance().getCurrentProject();
if (tProject != null && tProject.getEmfProject() != null && tProject.getAuthor() != null) {
IRepositoryViewObject viewObject = UnitTestBuildHelper.buildRepositoryViewObjectSystemFolder(
tProject.getEmfProject(), tProject.getAuthor(), ERepositoryObjectType.TDQ_ANALYSIS_ELEMENT);
RepositoryNode node = new RepositoryNode(viewObject, null, ENodeType.SYSTEM_FOLDER);
viewObject.setRepositoryNode(node);
AnalysisFolderRepNode AnalysisFolderRepNode = new AnalysisFolderRepNode(viewObject, null, ENodeType.SYSTEM_FOLDER,
tProject);
IComparisonLevel level = ComparisonLevelFactory.creatComparisonLevel(AnalysisFolderRepNode);
Assert.assertNull(level);
}
}
private RepositoryNode createCatalogRepNode() {
IRepositoryViewObject lastVersion = null;
databaseConnectionItem = UnitTestBuildHelper.createDatabaseConnectionItem("testCompareLevelConnection", null, false); //$NON-NLS-1$
Assert.assertNotNull(databaseConnectionItem);
Assert.assertNotNull(databaseConnectionItem.getProperty());
String propertyID = databaseConnectionItem.getProperty().getId();
Catalog createCatalog = createCatalog("catalog1"); //$NON-NLS-1$
try {
lastVersion = factory.getLastVersion(propertyID);
lastVersion = new MetadataCatalogRepositoryObject(lastVersion, createCatalog);
} catch (PersistenceException e) {
Assert.fail(e.getMessage());
}
// ~connection data
// ~FileConnection
// create DFColumnFolderRepNode
Assert.assertFalse(lastVersion == null);
RepositoryNode dbCatalogRepNode = DQRepNodeCreateFactory.createDBCatalogRepNode(lastVersion, null,
ENodeType.TDQ_REPOSITORY_ELEMENT, null);
return dbCatalogRepNode;
}
private Catalog createCatalog(String catalogName) {
Connection connection = databaseConnectionItem.getConnection();
Catalog createCatalog = CatalogHelper.createCatalog(catalogName);
ConnectionHelper.addCatalog(createCatalog, connection);
return createCatalog;
}
}