package component.customisation;
import com.flextrade.jfixture.JFixture;
import com.flextrade.jfixture.SpecimenSupplier;
import com.flextrade.jfixture.customisation.InstanceFactoryCustomisation;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import testtypes.TypeWithProperties;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertNull;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
public class TestInstanceFactoryCustomisation {
@Mock
private SpecimenSupplier<Integer> mockFactoryBuilder;
@Before
public void initialise() {
MockitoAnnotations.initMocks(this);
}
@Test
public void calls_factory_builder_create_method_each_time_that_type_is_requested() {
JFixture fixture = new JFixture();
fixture.customise(new InstanceFactoryCustomisation<Integer>(Integer.class, mockFactoryBuilder));
fixture.create(Integer.class);
fixture.create(Integer.class);
verify(mockFactoryBuilder, times(2)).create();
}
@Test
public void never_calls_factory_builder_create_method_if_request_type_does_not_match() {
JFixture fixture = new JFixture();
fixture.customise(new InstanceFactoryCustomisation<Integer>(Integer.class, mockFactoryBuilder));
fixture.create(String.class);
verify(mockFactoryBuilder, times(0)).create();
}
@Test
public void does_not_auto_populate_properties_of_instance() {
final TypeWithProperties instance = new TypeWithProperties();
JFixture fixture = new JFixture();
fixture.customise(new InstanceFactoryCustomisation<TypeWithProperties>(TypeWithProperties.class,
new SpecimenSupplier<TypeWithProperties>() {
@Override
public TypeWithProperties create() {
return instance;
}
}));
TypeWithProperties specimen = fixture.create(TypeWithProperties.class);
assertNull(specimen.getSymbol());
assertEquals(0, specimen.getSize());
}
}