// ============================================================================
//
// 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.editor.preview.model.states.freq;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang.NumberUtils;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.talend.core.model.repository.ERepositoryObjectType;
import org.talend.core.model.repository.IRepositoryViewObject;
import org.talend.core.repository.model.ProxyRepositoryFactory;
import org.talend.dataprofiler.common.ui.editor.preview.CustomerDefaultCategoryDataset;
import org.talend.dataprofiler.core.helper.UnitTestBuildHelper;
import org.talend.dataprofiler.core.model.ModelElementIndicator;
import org.talend.dataprofiler.core.ui.editor.preview.ColumnIndicatorUnit;
import org.talend.dataprofiler.core.ui.editor.preview.IndicatorUnit;
import org.talend.dataprofiler.core.ui.utils.TOPChartUtils;
import org.talend.dataquality.indicators.BenfordLawFrequencyIndicator;
import org.talend.dataquality.indicators.IndicatorsFactory;
import org.talend.dataquality.properties.TDQIndicatorDefinitionItem;
import org.talend.dq.indicators.ext.FrequencyExt;
import org.talend.dq.nodes.indicator.type.IndicatorEnum;
/**
* DOC yyin class global comment. Detailled comment
*/
public class BenfordLawFrequencyStateTest {
private BenfordLawFrequencyState benState;
/**
* init the state.
*
* @throws java.lang.Exception
*/
@Before
public void setUp() throws Exception {
UnitTestBuildHelper.initProjectStructure();
List<IndicatorUnit> units = new ArrayList<IndicatorUnit>();
BenfordLawFrequencyIndicator benfordLawFrequencyIndicator = IndicatorsFactory.eINSTANCE
.createBenfordLawFrequencyIndicator();
List<IRepositoryViewObject> all = ProxyRepositoryFactory.getInstance().getAll(
ERepositoryObjectType.SYSTEM_INDICATORS_FRAUDDETECTION);
Assert.assertEquals(1, all.size());
IRepositoryViewObject iRepositoryViewObject = all.get(0);
Assert.assertNotNull(iRepositoryViewObject);
TDQIndicatorDefinitionItem benfordItem = (TDQIndicatorDefinitionItem) iRepositoryViewObject.getProperty().getItem();
benfordLawFrequencyIndicator.setIndicatorDefinition(benfordItem.getIndicatorDefinition());
ModelElementIndicator modelElementIndicator = UnitTestBuildHelper.createModelElementIndicator();
ColumnIndicatorUnit columnIndicatorUnit = new ColumnIndicatorUnit(IndicatorEnum.BenfordLawFrequencyIndicatorEnum,
benfordLawFrequencyIndicator, modelElementIndicator);
// IndicatorUnit unit = mock(IndicatorUnit.class);
units.add(columnIndicatorUnit);
for (int i = 0; i < 10; i++) {
benfordLawFrequencyIndicator.handle(i);
}
benState = new BenfordLawFrequencyState(units);
}
/**
* Test method for
* {@link org.talend.dataprofiler.core.ui.editor.preview.model.states.freq.BenfordLawFrequencyState#setValueToDataset(org.talend.dataprofiler.core.ui.editor.preview.model.dataset.CustomerDefaultCategoryDataset, org.talend.dq.indicators.ext.FrequencyExt, java.lang.String)}
* .
*
*/
@Test
public void testSetValueToDataset() {
CustomerDefaultCategoryDataset customerdataset = new CustomerDefaultCategoryDataset();
FrequencyExt fre = new FrequencyExt();
fre.setKey(2);
fre.setValue(3l);
fre.setFrequency(0.33);
benState.setValueToDataset(customerdataset, fre, "2"); //$NON-NLS-1$
Number n = TOPChartUtils.getInstance().getValue(customerdataset.getDataset(), 0, 0);
Assert.assertEquals(0.33, n);
}
/**
* Test method for
* {@link org.talend.dataprofiler.core.ui.editor.preview.model.states.freq.BenfordLawFrequencyState#sortIndicator(org.talend.dq.indicators.ext.FrequencyExt[])}
* . just test normal cases: contains 1~9
*/
@SuppressWarnings("deprecation")
@Test
public void testSortIndicator() {
FrequencyExt[] frequencyExt = new FrequencyExt[9];
Long value = 100l;
for (int i = 0; i < 9; i++) {
frequencyExt[i] = new FrequencyExt();
frequencyExt[i].setKey(i + 1);
frequencyExt[i].setValue(value);
if (i > 4) {
value = value * 2;
} else {
value = value / 2;
}
}
benState.sortIndicator(frequencyExt);
for (int i = 0; i < 8; i++) {
// Assert.assertTrue(frequencyExt[i].getValue() > frequencyExt[i + 1].getValue());
Assert.assertTrue(NumberUtils.stringToInt(frequencyExt[i].getKey().toString()) < NumberUtils
.stringToInt(frequencyExt[i + 1].getKey().toString()));
}
}
/**
* test for : when there are some missing numbers, it should be added
*
* @Test public void testSortIndicator_2() { FrequencyExt[] freExt = new FrequencyExt[7]; Long value = 100l; for
* (int i = 0; i < 7; i++) { freExt[i] = new FrequencyExt(); freExt[i].setKey(i + 1); freExt[i].setValue(value);
*
* if (i > 4) { value = value * 2; } else { value = value / 2; } } benState.sortIndicator(freExt);
*
* Assert.assertEquals(9, freExt.length); Assert.assertTrue(0L == freExt[7].getValue()); Assert.assertTrue(0L ==
* freExt[8].getValue()); }
*/
}