package fr.devoxx.sentimental.infra.adapter; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import io.dropwizard.testing.junit.ResourceTestRule; import org.junit.Before; import org.junit.ClassRule; import org.junit.Test; import fr.devoxx.sentimental.domain.Sentiment; import fr.devoxx.sentimental.domain.SentimentAnalysis; public class SentimentalResourceTest { private static final SentimentAnalysis analyzer = mock(SentimentAnalysis.class); @ClassRule public static final ResourceTestRule resources = ResourceTestRule.builder() .addResource(new SentimentalResource(analyzer)).build(); private final SentimentReport report = new SentimentReport("Kitten", "HAPPY"); @Before public void setup() { when(analyzer.sentimentOf(eq("Kitten"))).thenReturn(Sentiment.HAPPY); // we have to reset the mock after each test because of the // @ClassRule, or use a @Rule as mentioned below. //reset(analyzer); } @Test public void testSentimentAnalysis() { assertThat(resources.client().target("/sentiment-analysis?sentence=Kitten").request().get(SentimentReport.class)) .isEqualTo(report); verify(analyzer).sentimentOf("Kitten"); } }