// ============================================================================ // // 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.dq.indicators; import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import static org.powermock.api.support.membermodification.MemberMatcher.method; import static org.powermock.api.support.membermodification.MemberModifier.stub; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.util.List; import java.util.ResourceBundle; import org.eclipse.core.runtime.IPath; import org.eclipse.emf.common.util.BasicEList; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.common.util.EMap; 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.commons.utils.StringUtils; import org.talend.core.language.ECodeLanguage; import org.talend.core.language.LanguageManager; import org.talend.core.model.metadata.builder.connection.DelimitedFileConnection; import org.talend.core.model.metadata.builder.connection.Escape; import org.talend.core.model.metadata.builder.connection.MetadataColumn; import org.talend.core.model.metadata.builder.connection.MetadataTable; import org.talend.core.model.metadata.builder.database.JavaSqlFactory; import org.talend.cwm.db.connection.ConnectionUtils; import org.talend.cwm.helper.ColumnHelper; import org.talend.cwm.management.i18n.Messages; import org.talend.dataquality.analysis.Analysis; import org.talend.dataquality.analysis.AnalysisContext; import org.talend.dataquality.analysis.AnalysisResult; import org.talend.dataquality.analysis.AnalyzedDataSet; import org.talend.dataquality.indicators.Indicator; import org.talend.dq.helper.ParameterUtil; import org.talend.utils.sugars.ReturnCode; import orgomg.cwm.objectmodel.core.ModelElement; /** * DOC msjian class global comment. Detailled comment */ @PrepareForTest({ LanguageManager.class, ConnectionUtils.class, ResourceBundle.class, Messages.class, ConnectionUtils.class, LanguageManager.class, ParameterUtil.class, StringUtils.class, ColumnHelper.class, JavaSqlFactory.class }) public class ColumnSetIndicatorEvaluatorTest { public static String empty = ""; //$NON-NLS-1$ public static String realFile = "text.txt"; //$NON-NLS-1$ public static String realFieldSeparator = ";"; //$NON-NLS-1$ public static String realEncoding = "US-ASCII"; //$NON-NLS-1$ public static String context_fd1_File = "context.fd1_File"; //$NON-NLS-1$ public static String context_fd1_FieldSeparator = "context.fd1_FieldSeparator"; //$NON-NLS-1$ public static String context_fd1_Encoding = "context.fd1_Encoding"; //$NON-NLS-1$ public static int realHeading = 1; public static String zero = "0"; //$NON-NLS-1$ public static String context_fd1_Header = "context.fd1_Header"; //$NON-NLS-1$ public static String context_fd1_RowSeparator = "context.fd1_RowSeparator"; //$NON-NLS-1$ public static String realRowSeparator = "\n"; //$NON-NLS-1$ @Rule public PowerMockRule powerMockRule = new PowerMockRule(); /** * Test method for {@link org.talend.dq.indicators.ColumnSetIndicatorEvaluator#executeSqlQuery(String)} . */ @Test public void testExecuteSqlQuery_file() throws Exception { Analysis analysis = mock(Analysis.class); stub(method(DelimitedFileIndicatorEvaluator.class, "handleByARow")); //$NON-NLS-1$ stub(method(DelimitedFileIndicatorEvaluator.class, "addResultToIndicatorToRowMap", Indicator.class, EMap.class)); //$NON-NLS-1$ AnalysisContext context = mock(AnalysisContext.class); when(analysis.getContext()).thenReturn(context); DelimitedFileConnection deliFileConn = mock(DelimitedFileConnection.class); when(context.getConnection()).thenReturn(deliFileConn); when(deliFileConn.isContextMode()).thenReturn(true); when(deliFileConn.getFilePath()).thenReturn(context_fd1_File); when(deliFileConn.getFieldSeparatorValue()).thenReturn(context_fd1_FieldSeparator); when(deliFileConn.getEncoding()).thenReturn(context_fd1_Encoding); IPath iPath = mock(IPath.class); File file = new File(realFile); BufferedWriter output = new BufferedWriter(new FileWriter(file)); String str = "id;Cocust(Tests);owner_id\n" + "1;yellow;3301\n" + "2;blue;3302\n" + "4;red;3307\n" + "5;white;4563\n" + "6;pink2;457883\n" + "7;blank;231233\n"; output.write(str); output.close(); when(iPath.toFile()).thenReturn(file); assertTrue(file.exists()); PowerMockito.mockStatic(JavaSqlFactory.class); when(JavaSqlFactory.getURL(deliFileConn)).thenReturn(realFile); when(JavaSqlFactory.getFieldSeparatorValue(deliFileConn)).thenReturn(realFieldSeparator); when(JavaSqlFactory.getEncoding(deliFileConn)).thenReturn(realEncoding); PowerMockito.mockStatic(ResourceBundle.class); ResourceBundle bundle = mock(ResourceBundle.class); when(ResourceBundle.getBundle("Messages")).thenReturn(bundle); //$NON-NLS-1$ PowerMockito.mockStatic(Messages.class); when(Messages.getString(anyString())).thenReturn("testString"); //$NON-NLS-1$ AnalysisResult results = mock(AnalysisResult.class); when(analysis.getResults()).thenReturn(results); EMap<Indicator, AnalyzedDataSet> indicToRowMap = mock(EMap.class); when(results.getIndicToRowMap()).thenReturn(indicToRowMap); when(deliFileConn.getHeaderValue()).thenReturn(context_fd1_Header); when(deliFileConn.getFooterValue()).thenReturn(zero); when(deliFileConn.getLimitValue()).thenReturn(zero); when(deliFileConn.getEscapeType()).thenReturn(Escape.DELIMITED); when(deliFileConn.getRowSeparatorValue()).thenReturn(context_fd1_RowSeparator); when(deliFileConn.isSplitRecord()).thenReturn(false); when(deliFileConn.isRemoveEmptyRow()).thenReturn(false); when(JavaSqlFactory.getHeadValue(deliFileConn)).thenReturn(realHeading); when(JavaSqlFactory.getRowSeparatorValue(deliFileConn)).thenReturn(realRowSeparator); PowerMockito.mockStatic(LanguageManager.class); when(LanguageManager.getCurrentLanguage()).thenReturn(ECodeLanguage.JAVA); PowerMockito.mockStatic(ParameterUtil.class); when(ParameterUtil.trimParameter(realFile)).thenReturn(realFile); when(ParameterUtil.trimParameter(realEncoding)).thenReturn(realEncoding); PowerMockito.mockStatic(StringUtils.class); when(StringUtils.loadConvert(realFieldSeparator, ECodeLanguage.JAVA.getName())).thenReturn(realFieldSeparator); when(ParameterUtil.trimParameter(realFieldSeparator)).thenReturn(realFieldSeparator); when(StringUtils.loadConvert(realRowSeparator, ECodeLanguage.JAVA.getName())).thenReturn(realRowSeparator); when(ParameterUtil.trimParameter(realRowSeparator)).thenReturn(realRowSeparator); List<ModelElement> columnElementList = new BasicEList<ModelElement>(); List<MetadataColumn> columnElementList2 = new BasicEList<MetadataColumn>(); MetadataColumn mc0 = mock(MetadataColumn.class); MetadataColumn mc1 = mock(MetadataColumn.class); MetadataColumn mc2 = mock(MetadataColumn.class); columnElementList.add(mc0); columnElementList.add(mc1); columnElementList.add(mc2); columnElementList2.add(mc0); columnElementList2.add(mc1); columnElementList2.add(mc2); EList<ModelElement> eLs = (EList<ModelElement>) columnElementList; when(context.getAnalysedElements()).thenReturn(eLs); PowerMockito.mockStatic(ColumnHelper.class); MetadataTable mTable = mock(MetadataTable.class); when(mTable.getColumns()).thenReturn((EList<MetadataColumn>) columnElementList2); when(ColumnHelper.getColumnOwnerAsMetadataTable(mc0)).thenReturn(mTable); when(ColumnHelper.getColumnOwnerAsMetadataTable(mc1)).thenReturn(mTable); when(ColumnHelper.getColumnOwnerAsMetadataTable(mc2)).thenReturn(mTable); ColumnSetIndicatorEvaluator evaluator = new ColumnSetIndicatorEvaluator(analysis); ColumnSetIndicatorEvaluator spyEvaluator = Mockito.spy(evaluator); Mockito.doReturn(true).when(spyEvaluator).continueRun(); ReturnCode rc = spyEvaluator.executeSqlQuery(empty); assertTrue(rc.isOk()); } }