package pl.touk.sputnik.engine; import com.google.common.collect.ImmutableMap; import org.junit.Test; import pl.touk.sputnik.configuration.CliOption; import pl.touk.sputnik.configuration.Configuration; import pl.touk.sputnik.configuration.ConfigurationSetup; import pl.touk.sputnik.configuration.GeneralOption; import pl.touk.sputnik.engine.visitor.AfterReviewVisitor; import pl.touk.sputnik.engine.visitor.FilterOutTestFilesVisitor; import pl.touk.sputnik.engine.visitor.LimitCommentVisitor; import pl.touk.sputnik.engine.visitor.RegexFilterFilesVisitor; import pl.touk.sputnik.engine.visitor.SummaryMessageVisitor; import pl.touk.sputnik.engine.visitor.score.NoScore; import pl.touk.sputnik.engine.visitor.score.ScoreAlwaysPass; import pl.touk.sputnik.engine.visitor.score.ScorePassIfEmpty; import pl.touk.sputnik.engine.visitor.score.ScorePassIfNoErrors; import java.util.Collections; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.data.MapEntry.entry; public class VisitorBuilderTest { @Test public void shouldNotBuildBeforeVisitors() { Configuration config = new ConfigurationSetup().setUp(Collections.<String, String>emptyMap()); assertThat(new VisitorBuilder().buildBeforeReviewVisitors(config)).isEmpty(); } @Test public void shouldNotBuildDisabledBeforeVisitors() { Configuration config = new ConfigurationSetup().setUp(ImmutableMap.of( GeneralOption.PROCESS_TEST_FILES.getKey(), "true" )); assertThat(new VisitorBuilder().buildBeforeReviewVisitors(config)).isEmpty(); } @Test public void shouldBuildBeforeVisitors() { Configuration config = new ConfigurationSetup().setUp(ImmutableMap.of( GeneralOption.PROCESS_TEST_FILES.getKey(), "false" )); assertThat(new VisitorBuilder().buildBeforeReviewVisitors(config)) .hasSize(1) .extracting("class") .containsExactly(FilterOutTestFilesVisitor.class); } @Test public void shouldAddRegexFilterToBeforeVisitorsWhenConfigured() { Configuration config = new ConfigurationSetup().setUp(ImmutableMap.of( CliOption.FILE_REGEX.getKey(), "^myModule/.+" )); assertThat(new VisitorBuilder().buildBeforeReviewVisitors(config)) .hasSize(1) .extracting("class") .containsExactly(RegexFilterFilesVisitor.class); } @Test public void shouldBuildAfterVisitors() { Configuration config = new ConfigurationSetup().setUp(Collections.<String, String>emptyMap()); assertThat(new VisitorBuilder().buildAfterReviewVisitors(config)) .hasSize(2) .extracting("class") .containsExactly(SummaryMessageVisitor.class, ScoreAlwaysPass.class); } @Test public void shouldNotBuildDisabledAfterVisitors() { Configuration config = new ConfigurationSetup().setUp(ImmutableMap.of( GeneralOption.MAX_NUMBER_OF_COMMENTS.getKey(), "0" )); assertThat(new VisitorBuilder().buildAfterReviewVisitors(config)) .hasSize(2) .extracting("class") .containsExactly(SummaryMessageVisitor.class, ScoreAlwaysPass.class); } @Test public void shouldBuildFilterOutCommentVisitor() { Configuration config = new ConfigurationSetup().setUp(ImmutableMap.of( GeneralOption.MAX_NUMBER_OF_COMMENTS.getKey(), "50" )); assertThat(new VisitorBuilder().buildAfterReviewVisitors(config)) .hasSize(3) .extracting("class") .containsExactly(SummaryMessageVisitor.class, LimitCommentVisitor.class, ScoreAlwaysPass.class); } @Test public void shouldBuildNoScoreVisitor() { Configuration config = new ConfigurationSetup().setUp(ImmutableMap.of( GeneralOption.SCORE_STRATEGY.getKey(), "NOscore" )); assertThat(new VisitorBuilder().buildAfterReviewVisitors(config)) .hasSize(2) .extracting("class") .containsExactly(SummaryMessageVisitor.class, NoScore.class); } @Test public void shouldBuildScoreAlwaysPassVisitor() { Configuration config = new ConfigurationSetup().setUp(ImmutableMap.of( GeneralOption.SCORE_STRATEGY.getKey(), "scoreAlwaysPass", GeneralOption.SCORE_PASSING_KEY.getKey(), "Verified", GeneralOption.SCORE_PASSING_VALUE.getKey(), "2" )); List<AfterReviewVisitor> afterReviewVisitors = new VisitorBuilder().buildAfterReviewVisitors(config); assertThat(afterReviewVisitors) .hasSize(2) .extracting("class") .containsExactly(SummaryMessageVisitor.class, ScoreAlwaysPass.class); assertThat(((ScoreAlwaysPass) afterReviewVisitors.get(1)).getPassingScore()).containsOnly(entry("Verified", (short) 2)); } @Test public void shouldBuildScorePassIfEmptyVisitor() { Configuration config = new ConfigurationSetup().setUp(ImmutableMap.of( GeneralOption.SCORE_STRATEGY.getKey(), "SCOREPASSIFEMPTY", GeneralOption.SCORE_PASSING_KEY.getKey(), "Verified", GeneralOption.SCORE_PASSING_VALUE.getKey(), "3", GeneralOption.SCORE_FAILING_KEY.getKey(), "Verified", GeneralOption.SCORE_FAILING_VALUE.getKey(), "-3" )); List<AfterReviewVisitor> afterReviewVisitors = new VisitorBuilder().buildAfterReviewVisitors(config); assertThat(afterReviewVisitors) .hasSize(2) .extracting("class") .containsExactly(SummaryMessageVisitor.class, ScorePassIfEmpty.class); assertThat(((ScorePassIfEmpty) afterReviewVisitors.get(1)).getPassingScore()).containsOnly(entry("Verified", (short) 3)); assertThat(((ScorePassIfEmpty) afterReviewVisitors.get(1)).getFailingScore()).containsOnly(entry("Verified", (short) -3)); } @Test public void shouldBuildScorePassIfNoErrorsVisitor() { Configuration config = new ConfigurationSetup().setUp(ImmutableMap.of( GeneralOption.SCORE_STRATEGY.getKey(), "SCOREPassIfNoErrors", GeneralOption.SCORE_PASSING_KEY.getKey(), "Code-Review", GeneralOption.SCORE_PASSING_VALUE.getKey(), "1", GeneralOption.SCORE_FAILING_KEY.getKey(), "Code-Review", GeneralOption.SCORE_FAILING_VALUE.getKey(), "-2" )); List<AfterReviewVisitor> afterReviewVisitors = new VisitorBuilder().buildAfterReviewVisitors(config); assertThat(afterReviewVisitors) .hasSize(2) .extracting("class") .containsExactly(SummaryMessageVisitor.class, ScorePassIfNoErrors.class); assertThat(((ScorePassIfNoErrors) afterReviewVisitors.get(1)).getPassingScore()).containsOnly(entry("Code-Review", (short) 1)); assertThat(((ScorePassIfNoErrors) afterReviewVisitors.get(1)).getFailingScore()).containsOnly(entry("Code-Review", (short) -2)); } @Test public void shouldBuildDefaultScoreAlwaysPassIfStrategyIsUnknown() { Configuration config = new ConfigurationSetup().setUp(ImmutableMap.of( GeneralOption.SCORE_STRATEGY.getKey(), "mySimpleStrategy" )); List<AfterReviewVisitor> afterReviewVisitors = new VisitorBuilder().buildAfterReviewVisitors(config); assertThat(afterReviewVisitors) .hasSize(2) .extracting("class") .containsExactly(SummaryMessageVisitor.class, ScoreAlwaysPass.class); assertThat(((ScoreAlwaysPass) afterReviewVisitors.get(1)).getPassingScore()).containsOnly(entry("Code-Review", (short) 1)); } }