package com.thoughtworks.winstonwolfe.validators;
import com.thoughtworks.winstonwolfe.datasource.DataSource;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import java.util.ArrayList;
import java.util.List;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class ExactMatchValidatorTest {
@Rule
public ExpectedException expectedException = ExpectedException.none();
@Test
public void shouldReturnASuccessfulValidationResult() throws Exception {
DataSource expected = mock(DataSource.class);
DataSource actual = mock(DataSource.class);
when(actual.getData()).thenReturn("<tag>WE ARE THE SAME</tag>");
when(expected.getData()).thenReturn("<tag>WE ARE THE SAME</tag>");
ExactMatchValidator validator = new ExactMatchValidator(expected);
ValidationResults results = validator.validateAgainst(actual);
List<String> successMessages = new ArrayList<String>();
successMessages.add("The response met expectations");
assertThat(results.getSuccessMessages(), is(successMessages));
}
@Test
public void shouldReturnASuccessfulValidationResultForSimilarXML() throws Exception {
DataSource expected = mock(DataSource.class);
DataSource actual = mock(DataSource.class);
when(actual.getData()).thenReturn("<root><tag1>WE ARE</tag1><tag2>SIMILAR</tag2></root>");
when(expected.getData()).thenReturn("<root><tag2>SIMILAR</tag2><tag1>WE ARE</tag1></root>");
ExactMatchValidator validator = new ExactMatchValidator(expected);
ValidationResults results = validator.validateAgainst(actual);
List<String> successMessages = new ArrayList<String>();
successMessages.add("The response met expectations");
assertThat(results.getSuccessMessages(), is(successMessages));
}
@Test
public void shouldReturnASuccessfulValidationResultIgnoringWhitespace() throws Exception {
DataSource expected = mock(DataSource.class);
DataSource actual = mock(DataSource.class);
when(actual.getData()).thenReturn("<root>\n<tag1>WE ARE</tag1> \n <tag2>SIMILAR</tag2></root>");
when(expected.getData()).thenReturn("<root><tag2>SIMILAR</tag2><tag1>WE ARE</tag1></root>");
ExactMatchValidator validator = new ExactMatchValidator(expected);
ValidationResults results = validator.validateAgainst(actual);
List<String> successMessages = new ArrayList<String>();
successMessages.add("The response met expectations");
assertThat(results.getSuccessMessages(), is(successMessages));
}
@Test
public void shouldReturnAFailedValidationResult() throws Exception {
DataSource expected = mock(DataSource.class);
DataSource actual = mock(DataSource.class);
when(actual.getData()).thenReturn("<tag>I ARE ACTUAL</tag>");
when(expected.getData()).thenReturn("<tag>I ARE EXPECTED</tag>");
ExactMatchValidator validator = new ExactMatchValidator(expected);
ValidationResults results = validator.validateAgainst(actual);
List<String> failureMessages = new ArrayList<String>();
failureMessages.add(String.format("The expected response did not match the actual response.\n[different] Expected text value 'I ARE ACTUAL' but was 'I ARE EXPECTED' - comparing <tag ...>I ARE ACTUAL</tag> at /tag[1]/text()[1] to <tag ...>I ARE EXPECTED</tag> at /tag[1]/text()[1]\n"));
assertThat(results.getFailureMessages(), is(failureMessages));
}
}