package pl.touk.sputnik.engine;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import pl.touk.sputnik.configuration.Configuration;
import pl.touk.sputnik.review.Review;
import pl.touk.sputnik.review.ReviewException;
import pl.touk.sputnik.review.ReviewProcessor;
import pl.touk.sputnik.review.ReviewResult;
import java.io.IOException;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.*;
@RunWith(MockitoJUnitRunner.class)
public class ReviewRunnerTest {
private static final String PROCESSOR_SOURCE_NAME = "Test";
@Mock
private Review reviewMock;
@Mock
private ReviewResult reviewResultMock;
@Mock
private ReviewProcessor reviewProcessorMock;
@Mock
private Configuration config;
@InjectMocks
private ReviewRunner reviewRunner;
@Before
public void setUp() {
when(reviewProcessorMock.getName()).thenReturn(PROCESSOR_SOURCE_NAME);
}
@Test
public void shouldAddReviewResult() {
when(reviewProcessorMock.process(reviewMock)).thenReturn(reviewResultMock);
reviewRunner.review(reviewProcessorMock);
verify(reviewMock).add(PROCESSOR_SOURCE_NAME, reviewResultMock);
}
@Test
public void shouldNotAddNullReview() {
when(reviewProcessorMock.process(reviewMock)).thenReturn(null);
reviewRunner.review(reviewProcessorMock);
verify(reviewMock, never()).add(eq(PROCESSOR_SOURCE_NAME), any(ReviewResult.class));
}
@Test
public void shouldAddReviewExceptionMessageAsAProblem() {
when(reviewProcessorMock.process(reviewMock)).thenThrow(new ReviewException("Exception message"));
reviewRunner.review(reviewProcessorMock);
verify(reviewMock).addProblem(PROCESSOR_SOURCE_NAME, "ReviewException: Exception message");
}
@Test
public void shouldReviewExceptionCauseMessageAsAProblem() {
IOException cause = new IOException("File not found exception");
when(reviewProcessorMock.process(reviewMock)).thenThrow(new ReviewException("Exception message", cause));
reviewRunner.review(reviewProcessorMock);
verify(reviewMock).addProblem(PROCESSOR_SOURCE_NAME, "IOException: File not found exception");
}
}