Package dbfit.diff

Source Code of dbfit.diff.DataTableDiffTest

package dbfit.diff;

import static dbfit.util.DiffTestUtils.*;
import static dbfit.test.matchers.HasMatchStatus.*;

import dbfit.util.DataTable;
import dbfit.util.DataRow;
import dbfit.util.MatchResult;
import dbfit.util.DiffListenerAdapter;
import dbfit.util.DiffHandler;
import dbfit.util.RowStructure;
import dbfit.util.MatchStatus;
import static dbfit.util.MatchStatus.*;

import org.junit.Test;
import org.junit.Before;
import org.junit.runner.RunWith;
import static org.junit.Assert.assertThat;
import static org.hamcrest.Matchers.*;

import org.mockito.runners.MockitoJUnitRunner;
import org.mockito.Mock;
import org.mockito.Captor;
import org.mockito.ArgumentCaptor;
import static org.mockito.Mockito.*;

import static java.util.Arrays.asList;

@RunWith(MockitoJUnitRunner.class)
public class DataTableDiffTest {

    private RowStructure rowStructure = new RowStructure(
            new String[] { "n", "2n" }, /* names */
            new boolean[] { true, false } /* keys */
        );

    @Mock private DiffHandler handler;
    @Mock DataRowDiff childDiff;
    @Mock MatchResult<DataTable, DataTable> mockRequest;
    @Captor ArgumentCaptor<MatchResult<DataRow, DataRow>> rowResultCaptor;
    @Captor ArgumentCaptor<MatchResult<DataTable, DataTable>> tabResultCaptor;
    @Captor ArgumentCaptor<DataRow> arg1Captor;
    @Captor ArgumentCaptor<DataRow> arg2Captor;

    private DataTableDiff diff;

    DataRow r1 = createRow(1, 2);
    DataRow r2 = createRow(2, 4);
    DataRow r3 = createRow(3, 6);
    DataRow r4 = createRow(4, 8);
    DataRow r5 = createRow(5, 10);
    DataRow b2 = createRow(2, 44);

    @Before
    public void prepare() {
        diff = new DataTableDiff(rowStructure);
        diff.addListener(new DiffListenerAdapter(handler));
        when(mockRequest.getObject1()).thenReturn(createDt(r1));
        when(mockRequest.getObject2()).thenReturn(createDt(r1));
    }

    @Test
    public void shouldInvokeDiffPerEachChildRow() {
        diff = new DataTableDiff(rowStructure, childDiff);

        diff.diff(createDt(r1, r2, r3), createDt(r1, b2, r4));

        verify(childDiff, times(4)).diff(
                arg1Captor.capture(), arg2Captor.capture());

        assertThat(arg1Captor.getAllValues(), contains(r1, r2, r3, null));
        assertThat(arg2Captor.getAllValues(), contains(r1, b2, null, r4));
    }

    @Test
    public void shouldEmitExceptionsAsEvents() {
        diff = new DataTableDiff(rowStructure, childDiff);
        Exception ex = new RuntimeException("Cruel World!");
        doThrow(ex).when(childDiff).diff(anyDataRow(), anyDataRow());

        diff.diff(mockRequest);

        verify(mockRequest).setException(ex);
    }

    @Test
    public void testMismatchWithRightWrongSurplusAndMissing() {
        diff.diff(createDt(r1, r2, r3), createDt(r1, b2, r4));
        verifyRowStatuses(SUCCESS, WRONG, MISSING, SURPLUS);
    }

    @Test
    public void shouldEmitSummaryTableEventOnMismatchingDiff() {
        diff.diff(createDt(r1, r2, r3), createDt(r1, b2, r4));
        verifyTabStatus(WRONG);
    }

    @Test
    public void shouldEmitSummaryTableEventOnMatchingDiff() {
        diff.diff(createDt(r1, r2, r3), createDt(r3, r1, r2));
        verifyTabStatus(SUCCESS);
    }

    @Test
    public void testSingleWrongRow() {
        diff.diff(createDt(r2), createDt(b2));
        verifyRowStatuses(WRONG);
    }

    private void verifyRowStatuses(MatchStatus... expectedStatuses) {
        verify(handler, times(expectedStatuses.length)).endRow(
                rowResultCaptor.capture());

        assertThat(statusesOf(rowResultCaptor.getAllValues()),
                equalTo(asList(expectedStatuses)));
    }

    private void verifyTabStatus(MatchStatus expectedStatus) {
        verify(handler).endTable(tabResultCaptor.capture());
        assertThat(tabResultCaptor.getValue(), hasMatchStatus(expectedStatus));
    }

    private DataRow createRow(Integer... items) {
        return createDataRowBuilder(rowStructure).createRow(items);
    }

    private DataTable createDt(DataRow... rows) {
        return createDataTable(rowStructure, rows);
    }

    private DataRow anyDataRow() {
        return org.mockito.Matchers.any(DataRow.class);
    }
}
TOP

Related Classes of dbfit.diff.DataTableDiffTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.