package component.behaviours; import com.flextrade.jfixture.JFixture; import com.flextrade.jfixture.behaviours.intercept.InterceptBehaviour; import com.flextrade.jfixture.utility.Interceptor; import org.junit.Test; import java.util.UUID; import java.util.concurrent.atomic.AtomicInteger; import static junit.framework.TestCase.assertEquals; public class TestInterceptingSpecimen { @Test public void specimen_can_be_intercepted_and_modified() { final String overriddenId = UUID.randomUUID().toString(); JFixture fixture = new JFixture(); fixture.behaviours().add(new InterceptBehaviour<Order>(Order.class, new Interceptor<Order>() { @Override public void intercept(Order instance) { instance.setId(overriddenId); } })); Order order = fixture.create(Order.class); assertEquals(overriddenId, order.getId()); } @Test public void specimen_can_be_intercepted_fluently_and_modified() { final String overriddenId = UUID.randomUUID().toString(); JFixture fixture = new JFixture(); fixture.customise().intercept(Order.class, new Interceptor<Order>() { @Override public void intercept(Order instance) { instance.setId(overriddenId); } }); Order order = fixture.create(Order.class); assertEquals(overriddenId, order.getId()); } @Test public void specimen_is_only_intercepted_once() { final AtomicInteger interceptionCount = new AtomicInteger(0); JFixture fixture = new JFixture(); fixture.customise().intercept(Order.class, new Interceptor<Order>() { @Override public void intercept(Order instance) { interceptionCount.incrementAndGet(); } }); fixture.create(Order.class); assertEquals(1, interceptionCount.get()); } @Test public void null_specimen_is_ignored() { JFixture fixture = new JFixture(); fixture.customise().sameInstance(Order.class, null); fixture.customise().intercept(Order.class, new Interceptor<Order>() { @Override public void intercept(Order instance) { throw new RuntimeException("Specimen was erroneously intercepted"); } }); fixture.create(Order.class); } public static class Order { private String id; private int size; public String getId() { return id; } public void setId(String id) { this.id = id; } public int getSize() { return size; } public void setSize(int size) { this.size = size; } } }