package org.magenta;
import static org.assertj.core.api.Assertions.assertThat;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.not;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import org.junit.Test;
import org.magenta.random.FluentRandom;
import org.mockito.Mockito;
public class DataSetKeyTest {
@Test
public void testMake() {
// setup fixture
String expectedQualifier = "any qualifier";
Class<String> expectedType = String.class;
// exercise SUT
DataKey<String> actual = DataKey.makeQualified(expectedQualifier, expectedType);
// verify outcome
assertThat(actual.getType(), equalTo(expectedType));
assertThat(actual.getQualifier(), equalTo(expectedQualifier));
// misc assertion
assertThat(actual,equalTo(actual));
assertThat(actual,not(equalTo(new Object())));
assertThat(actual,not(equalTo(null)));
assertThat(actual.toString()).contains(expectedQualifier);
assertThat(actual.toString()).contains(expectedType.getName());
}
@Test
public void testMakeDefault() {
// setup fixture
Class<String> expectedType = String.class;
// exercise SUT
DataKey<String> actual = DataKey.makeDefault(expectedType);
// verify outcome
assertThat(actual.getType()).isEqualTo(expectedType);
assertThat(actual.getQualifier()).isEqualTo(DataKey.DEFAULT_QUALIFIER);
assertThat(actual.isDefault()).isTrue();
}
@Test
public void testMakeEmtpyDataSet(){
// setup fixture
Class<String> type = String.class;
DataKey<String> sut = DataKey.makeDefault(type);
// exercise SUT
DataSet<String> actual = sut.asEmptyDataSet();
// verify outcome
assertThat(actual.isEmpty()).isTrue();
}
@Test
public void testEquals_same_type() {
// setup fixture
Class<String> type = String.class;
DataKey<String> ref1 = DataKey.makeDefault(type);
DataKey<String> ref2 = DataKey.makeDefault(type);
// exercise SUT and verify outcome
assertThat(ref1, equalTo(ref2));
assertThat(ref1.hashCode(), equalTo(ref2.hashCode()));
}
@Test
public void testEquals_same_type_same_qualifier() {
// setup fixture
Class<String> type = String.class;
Class<String> sameType = String.class;
String qualifier = "qualifier";
String sameQualifier = "qualifier";
DataKey<String> ref1 = DataKey.makeQualified(qualifier, type);
DataKey<String> ref2 = DataKey.makeQualified(sameQualifier, sameType);
// exercise SUT and verify outcome
assertThat(ref1, equalTo(ref2));
}
@Test
public void testEquals_same_type_different_qualifier() {
// setup fixture
Class<String> type = String.class;
Class<String> sameType = String.class;
String qualifier = "qualifier";
String differentQualifier = "different qualifier";
DataKey<String> ref1 = DataKey.makeQualified(qualifier, type);
DataKey<String> ref2 = DataKey.makeQualified(differentQualifier, sameType);
// exercise SUT and verify outcome
assertThat(ref1, not(equalTo(ref2)));
}
@SuppressWarnings("rawtypes")
@Test
public void testEquals_different_type_same_qualifier() {
// setup fixture
Class<String> type = String.class;
Class<Integer> differentType = Integer.class;
String qualifier = "qualifier";
String sameQualifier = "qualifier";
DataKey ref1 = DataKey.makeQualified(qualifier, type);
DataKey ref2 = DataKey.makeQualified(sameQualifier, differentType);
// exercise SUT and verify outcome
assertThat(ref1, not(equalTo(ref2)));
}
@Test
public void testAsDataSet_static(){
//setup fixtures
DataKey<String> sut = DataKey.makeDefault(String.class);
//exercise sut
QualifiedDataSet<String> actual=sut.datasetOf(FluentRandom.singleton(),"foo","bar");
//verify outcome
assertThat(actual.getKey()).isSameAs(sut);
assertThat(actual.list()).contains("foo","bar").hasSize(2);
}
@Test
public void testAsDataSet_DataDomain(){
//setup fixtures
DataKey<String> sut = DataKey.makeDefault(String.class);
Fixture<DataSpecification> domain=mock(Fixture.class);
DataSet<String> expected=mock(DataSet.class);
when(domain.dataset(Mockito.any(DataKey.class))).thenReturn(expected);
//exercise sut
DataSet<String> actual=sut.getDataSetFrom(domain);
//verify outcome
assertThat(actual).isEqualTo(expected);
verify(domain).dataset(sut);
}
}