package com.flextrade.jfixture.requests.enrichers; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import static junit.framework.Assert.assertSame; import static org.junit.Assert.assertNull; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; public class TestCompositeRequestEnricher { @Mock private RequestEnricher mockEnricherA; @Mock private RequestEnricher mockEnricherB; private CompositeRequestEnricher compositeEnricher; private final Object request = new Object(); @Before public void initialise() { MockitoAnnotations.initMocks(this); compositeEnricher = new CompositeRequestEnricher(this.mockEnricherA, this.mockEnricherB); } @Test public void first_enricher_returns_result_is_the_return_value() { Object enricherAResult = new Object(); when(mockEnricherA.enrich(this.request, null)).thenReturn(enricherAResult); Object result = compositeEnricher.enrich(this.request, null); assertSame(enricherAResult, result); } @Test public void first_enricher_returns_result_does_not_call_create_on_other_enrichers() { Object enricherAResult = new Object(); when(mockEnricherA.enrich(this.request, null)).thenReturn(enricherAResult); compositeEnricher.enrich(this.request, null); verify(mockEnricherB, never()).enrich(this.request, null); } @Test public void first_enricher_returns_null_returns_result_of_next_enricher_with_valid_request() { Object enricherBResult = new Object(); when(mockEnricherA.enrich(this.request, null)).thenReturn(null); when(mockEnricherB.enrich(this.request, null)).thenReturn(enricherBResult); Object result = compositeEnricher.enrich(this.request, null); assertSame(enricherBResult, result); } @Test public void no_enrichers_can_satisfy_request_returns_null() { when(mockEnricherA.enrich(this.request, null)).thenReturn(null); when(mockEnricherB.enrich(this.request, null)).thenReturn(null); Object result = compositeEnricher.enrich(this.request, null); assertNull(result); } }