package org.magenta.core.injection; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.lang.reflect.Field; import org.junit.Test; import org.magenta.DataSpecification; import org.magenta.Fixture; import org.magenta.SimpleDataSpecification; import org.magenta.annotations.InjectDataSpecification; import com.google.common.base.Suppliers; public class DataSpecificationFieldHandlerTest { @InjectDataSpecification private DataSpecification dataSpecification; @Test public void shouldInjectTheDataSpecification() throws NoSuchFieldException, SecurityException{ //setup fixtures int EXPECTED_NUMBER_OF_ITEMS = 1234; DataSpecification expected = SimpleDataSpecification.create().defaultNumberOfItems(EXPECTED_NUMBER_OF_ITEMS); Fixture mock = mock(Fixture.class); when(mock.getSpecification()).thenReturn(expected); Field f = this.getClass().getDeclaredField("dataSpecification"); DataSpecificationFieldHandler sut = new DataSpecificationFieldHandler(); //exercise sut boolean handled = sut.handle(f, this, Suppliers.ofInstance(mock)); //verify outcome assertThat(handled).overridingErrorMessage("The field 'dataSpecification' of this test class was expected to be handled").isTrue(); assertThat(dataSpecification).overridingErrorMessage("No DataSpecification injected into field 'dataSpecification'").isNotNull(); assertThat(dataSpecification.getDefaultNumberOfItems()).isEqualTo(EXPECTED_NUMBER_OF_ITEMS); } }