/*
* Copyright 2015 Collective, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
* implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
package com.collective.celos.ci.testing.fixtures.compare;
import com.collective.celos.ci.testing.fixtures.create.FixObjectCreator;
import com.collective.celos.ci.testing.structure.fixobject.FixTable;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import junit.framework.Assert;
import org.junit.Test;
import java.util.List;
import java.util.Map;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
/**
* Created by akonopko on 13.02.15.
*/
public class FixTableComparerTest {
@Test
public void testSuccess() throws Exception {
FixObjectCreator<FixTable> expectedDataCreator = mock(FixObjectCreator.class);
FixObjectCreator<FixTable> actualDataCreator = mock(FixObjectCreator.class);
boolean columnNamesOrdered = true;
FixTableComparer comparer = new FixTableComparer(expectedDataCreator, actualDataCreator, columnNamesOrdered, true);
FixTable table1 = generateFixTable();
FixTable table2 = generateFixTable();
doReturn(table1).when(expectedDataCreator).create(null);
doReturn(table2).when(actualDataCreator).create(null);
FixObjectCompareResult result = comparer.check(null);
Assert.assertEquals(FixObjectCompareResult.Status.SUCCESS, result.getStatus());
}
@Test
public void testSuccessDiffRowOrder() throws Exception {
FixObjectCreator<FixTable> expectedDataCreator = mock(FixObjectCreator.class);
FixObjectCreator<FixTable> actualDataCreator = mock(FixObjectCreator.class);
boolean columnNamesOrdered = true;
FixTableComparer comparer = new FixTableComparer(expectedDataCreator, actualDataCreator, columnNamesOrdered, false);
FixTable table1 = generateFixTable();
FixTable table2 = generateFixTableDiffRowOrder();
doReturn(table1).when(expectedDataCreator).create(null);
doReturn(table2).when(actualDataCreator).create(null);
FixObjectCompareResult result = comparer.check(null);
Assert.assertEquals(FixObjectCompareResult.Status.SUCCESS, result.getStatus());
}
@Test
public void testFailsDiffRowOrder() throws Exception {
FixObjectCreator<FixTable> expectedDataCreator = mock(FixObjectCreator.class);
FixObjectCreator<FixTable> actualDataCreator = mock(FixObjectCreator.class);
boolean columnNamesOrdered = true;
FixTableComparer comparer = new FixTableComparer(expectedDataCreator, actualDataCreator, columnNamesOrdered, false);
FixTable table1 = generateFixTable();
FixTable table2 = generateFixTableDiffData();
doReturn(table1).when(expectedDataCreator).create(null);
doReturn(table2).when(actualDataCreator).create(null);
doReturn("table1").when(expectedDataCreator).getDescription(null);
doReturn("table2").when(actualDataCreator).getDescription(null);
String message = "Diff:\n" +
"Actual [table2]:\n" +
"FixTable.FixRow[cells={col1=val11_, col2=val22_}] [1 times]\n" +
"FixTable.FixRow[cells={col1=val1_, col2=val2_}] [1 times]\n" +
"Expected [table1]:\n" +
"FixTable.FixRow[cells={col1=val1, col2=val2}] [1 times]\n" +
"FixTable.FixRow[cells={col1=val11, col2=val22}] [1 times]\n";
FixObjectCompareResult result = comparer.check(null);
Assert.assertEquals(FixObjectCompareResult.Status.FAIL, result.getStatus());
Assert.assertEquals(message, result.generateDescription());
}
@Test
public void testFailDifferentCells() throws Exception {
FixObjectCreator<FixTable> expectedDataCreator = mock(FixObjectCreator.class);
FixObjectCreator<FixTable> actualDataCreator = mock(FixObjectCreator.class);
boolean columnNamesOrdered = true;
FixTableComparer comparer = new FixTableComparer(expectedDataCreator, actualDataCreator, columnNamesOrdered, true);
FixTable table1 = generateFixTable();
FixTable table2 = generateFixTableDiffData();
doReturn(table1).when(expectedDataCreator).create(null);
doReturn(table2).when(actualDataCreator).create(null);
FixObjectCompareResult result = comparer.check(null);
Assert.assertEquals(FixObjectCompareResult.Status.FAIL, result.getStatus());
String expected = "Row #0 : Cells in expected data set: [col1=val1, col2=val2], cells in actual data set: [col1=val1_, col2=val2_]\n" +
"Row #1 : Cells in expected data set: [col1=val11, col2=val22], cells in actual data set: [col1=val11_, col2=val22_]\n";
Assert.assertEquals(expected, result.generateDescription());
}
@Test
public void testFailDifferentCells2() throws Exception {
FixObjectCreator<FixTable> expectedDataCreator = mock(FixObjectCreator.class);
FixObjectCreator<FixTable> actualDataCreator = mock(FixObjectCreator.class);
boolean columnNamesOrdered = true;
FixTableComparer comparer = new FixTableComparer(expectedDataCreator, actualDataCreator, columnNamesOrdered, true);
FixTable table1 = generateFixTable();
FixTable table2 = generateFixTableDiffData();
doReturn(table1).when(expectedDataCreator).create(null);
doReturn(table2).when(actualDataCreator).create(null);
FixObjectCompareResult result = comparer.check(null);
Assert.assertEquals(FixObjectCompareResult.Status.FAIL, result.getStatus());
String expected = "Row #0 : Cells in expected data set: [col1=val1, col2=val2], cells in actual data set: [col1=val1_, col2=val2_]\n" +
"Row #1 : Cells in expected data set: [col1=val11, col2=val22], cells in actual data set: [col1=val11_, col2=val22_]\n";
Assert.assertEquals(expected, result.generateDescription());
}
@Test
public void testFailsColumnOrder() throws Exception {
FixObjectCreator<FixTable> expectedDataCreator = mock(FixObjectCreator.class);
FixObjectCreator<FixTable> actualDataCreator = mock(FixObjectCreator.class);
boolean columnNamesOrdered = true;
FixTableComparer comparer = new FixTableComparer(expectedDataCreator, actualDataCreator, columnNamesOrdered, true);
FixTable table1 = generateFixTable();
FixTable table2 = generateFixTableDifferentOrder();
doReturn(table1).when(expectedDataCreator).create(null);
doReturn(table2).when(actualDataCreator).create(null);
FixObjectCompareResult result = comparer.check(null);
Assert.assertEquals(FixObjectCompareResult.Status.FAIL, result.getStatus());
Assert.assertEquals("Column Names for expected and actual data set differed: expected [col1, col2] but was [col2, col1]\n", result.generateDescription());
}
@Test
public void testSuccessIgnoreColumnOrder() throws Exception {
FixObjectCreator<FixTable> expectedDataCreator = mock(FixObjectCreator.class);
FixObjectCreator<FixTable> actualDataCreator = mock(FixObjectCreator.class);
boolean columnNamesOrdered = false;
FixTableComparer comparer = new FixTableComparer(expectedDataCreator, actualDataCreator, columnNamesOrdered, true);
FixTable table1 = generateFixTable();
FixTable table2 = generateFixTableDifferentOrder();
doReturn(table1).when(expectedDataCreator).create(null);
doReturn(table2).when(actualDataCreator).create(null);
FixObjectCompareResult result = comparer.check(null);
Assert.assertEquals(FixObjectCompareResult.Status.SUCCESS, result.getStatus());
}
@Test
public void testFailsColumnNumber() throws Exception {
FixObjectCreator<FixTable> expectedDataCreator = mock(FixObjectCreator.class);
FixObjectCreator<FixTable> actualDataCreator = mock(FixObjectCreator.class);
boolean columnNamesOrdered = false;
FixTableComparer comparer = new FixTableComparer(expectedDataCreator, actualDataCreator, columnNamesOrdered, true);
FixTable table1 = generateFixTable();
FixTable table2 = generateFixTableMoreColumns();
doReturn(table1).when(expectedDataCreator).create(null);
doReturn(table2).when(actualDataCreator).create(null);
FixObjectCompareResult result = comparer.check(null);
Assert.assertEquals(FixObjectCompareResult.Status.FAIL, result.getStatus());
Assert.assertEquals("Column Names for expected and actual data set differed: expected [col1, col2] but was [col1, col2, col3]\n", result.generateDescription());
}
@Test
public void testFailsRowNumber() throws Exception {
FixObjectCreator<FixTable> expectedDataCreator = mock(FixObjectCreator.class);
FixObjectCreator<FixTable> actualDataCreator = mock(FixObjectCreator.class);
boolean columnNamesOrdered = false;
FixTableComparer comparer = new FixTableComparer(expectedDataCreator, actualDataCreator, columnNamesOrdered, true);
FixTable table1 = generateFixTable();
FixTable table2 = generateFixTableMoreRows();
doReturn(table1).when(expectedDataCreator).create(null);
doReturn(table2).when(actualDataCreator).create(null);
FixObjectCompareResult result = comparer.check(null);
Assert.assertEquals(FixObjectCompareResult.Status.FAIL, result.getStatus());
Assert.assertEquals("Data set size for expected and actual data set differed: expected has 2 while actual data has 3 rows\n", result.generateDescription());
}
private FixTable generateFixTable() {
List<FixTable.FixRow> fixRows = Lists.newArrayList();
Map<String, String> map = Maps.newHashMap();
map.put("col1", "val1");
map.put("col2", "val2");
Map<String, String> map2 = Maps.newHashMap();
map2.put("col1", "val11");
map2.put("col2", "val22");
FixTable.FixRow row1 = new FixTable.FixRow(map);
FixTable.FixRow row2 = new FixTable.FixRow(map2);
fixRows.add(row1);
fixRows.add(row2);
return new FixTable(Lists.newArrayList("col1", "col2"), fixRows);
}
private FixTable generateFixTableDiffRowOrder() {
List<FixTable.FixRow> fixRows = Lists.newArrayList();
Map<String, String> map = Maps.newHashMap();
map.put("col1", "val1");
map.put("col2", "val2");
Map<String, String> map2 = Maps.newHashMap();
map2.put("col1", "val11");
map2.put("col2", "val22");
FixTable.FixRow row1 = new FixTable.FixRow(map2);
FixTable.FixRow row2 = new FixTable.FixRow(map);
fixRows.add(row1);
fixRows.add(row2);
return new FixTable(Lists.newArrayList("col1", "col2"), fixRows);
}
private FixTable generateFixTableDiffData() {
List<FixTable.FixRow> fixRows = Lists.newArrayList();
Map<String, String> map = Maps.newHashMap();
map.put("col1", "val1_");
map.put("col2", "val2_");
Map<String, String> map2 = Maps.newHashMap();
map2.put("col1", "val11_");
map2.put("col2", "val22_");
FixTable.FixRow row1 = new FixTable.FixRow(map);
FixTable.FixRow row2 = new FixTable.FixRow(map2);
fixRows.add(row1);
fixRows.add(row2);
return new FixTable(Lists.newArrayList("col1", "col2"), fixRows);
}
private FixTable generateFixTableMoreRows() {
List<FixTable.FixRow> fixRows = Lists.newArrayList();
Map<String, String> map = Maps.newHashMap();
map.put("col1", "val1");
map.put("col2", "val2");
Map<String, String> map2 = Maps.newHashMap();
map2.put("col1", "val21");
map2.put("col2", "val22");
Map<String, String> map3 = Maps.newHashMap();
map3.put("col1", "val31");
map3.put("col2", "val32");
FixTable.FixRow row1 = new FixTable.FixRow(map);
FixTable.FixRow row2 = new FixTable.FixRow(map2);
FixTable.FixRow row3 = new FixTable.FixRow(map3);
fixRows.add(row1);
fixRows.add(row2);
fixRows.add(row3);
return new FixTable(Lists.newArrayList("col1", "col2"), fixRows);
}
private FixTable generateFixTableMoreColumns() {
List<FixTable.FixRow> fixRows = Lists.newArrayList();
Map<String, String> map = Maps.newHashMap();
map.put("col1", "val1");
map.put("col2", "val2");
map.put("col3", "val3");
Map<String, String> map2 = Maps.newHashMap();
map2.put("col1", "val11");
map2.put("col2", "val22");
map2.put("col3", "val22");
FixTable.FixRow row1 = new FixTable.FixRow(map);
FixTable.FixRow row2 = new FixTable.FixRow(map2);
fixRows.add(row1);
fixRows.add(row2);
return new FixTable(Lists.newArrayList("col1", "col2", "col3"), fixRows);
}
private FixTable generateFixTableDifferentOrder() {
List<FixTable.FixRow> fixRows = Lists.newArrayList();
Map<String, String> map = Maps.newHashMap();
map.put("col1", "val1");
map.put("col2", "val2");
Map<String, String> map2 = Maps.newHashMap();
map2.put("col1", "val11");
map2.put("col2", "val22");
FixTable.FixRow row1 = new FixTable.FixRow(map);
FixTable.FixRow row2 = new FixTable.FixRow(map2);
fixRows.add(row1);
fixRows.add(row2);
return new FixTable(Lists.newArrayList("col2", "col1"), fixRows);
}
}