package pl.touk.sputnik.connector.gerrit; import com.google.common.base.Charsets; import com.google.common.io.Resources; import com.google.common.collect.ImmutableMap; import static com.googlecode.catchexception.CatchException.catchException; import static com.googlecode.catchexception.CatchException.caughtException; import com.google.gerrit.extensions.api.GerritApi; import com.google.gerrit.extensions.api.changes.ChangeApi; import com.google.gerrit.extensions.api.changes.Changes; import com.google.gerrit.extensions.api.changes.RevisionApi; import com.google.gerrit.extensions.common.FileInfo; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gson.Gson; import com.google.gson.JsonElement; import com.google.gson.JsonParser; import com.urswolfer.gerrit.client.rest.http.changes.FileInfoParser; 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.configuration.ConfigurationBuilder; import pl.touk.sputnik.configuration.ConfigurationSetup; import pl.touk.sputnik.configuration.GeneralOptionNotSupportedException; import pl.touk.sputnik.connector.ConnectorFacade; import pl.touk.sputnik.connector.ConnectorFacadeFactory; import pl.touk.sputnik.connector.ConnectorType; import pl.touk.sputnik.review.ReviewFile; import java.io.IOException; import java.net.URISyntaxException; import java.util.List; import java.util.Map; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class GerritFacadeTest { @Mock private GerritApi gerritApi; @InjectMocks private GerritFacade gerritFacade; @Test public void shouldNotAllowCommentOnlyChangedLines() { // given Configuration config = new ConfigurationSetup().setUp(ImmutableMap.of( "cli.changeId", "abc", "cli.revisionId", "def", "global.commentOnlyChangedLines", Boolean.toString(true))); ConnectorFacadeFactory connectionFacade = new ConnectorFacadeFactory(); // when ConnectorFacade gerritFacade = connectionFacade.build(ConnectorType.GERRIT, config); catchException(gerritFacade).validate(config); // then assertThat(caughtException()).isInstanceOf(GeneralOptionNotSupportedException.class).hasMessage( "This connector does not support global.commentOnlyChangedLines"); } @Test public void shouldParseListFilesResponse() throws IOException, URISyntaxException, RestApiException { List<ReviewFile> reviewFiles = createGerritFacade().listFiles(); assertThat(reviewFiles).isNotEmpty(); } @Test public void shouldNotListDeletedFiles() throws IOException, URISyntaxException, RestApiException { List<ReviewFile> reviewFiles = createGerritFacade().listFiles(); assertThat(reviewFiles).hasSize(1); } private GerritFacade createGerritFacade() throws IOException, RestApiException { String listFilesJson = Resources.toString(Resources.getResource("json/gerrit-listfiles.json"), Charsets.UTF_8); JsonElement jsonElement = new JsonParser().parse(listFilesJson); Map<String, FileInfo> fileInfoMap = new FileInfoParser(new Gson()).parseFileInfos(jsonElement); Changes changes = mock(Changes.class); when(gerritApi.changes()).thenReturn(changes); ChangeApi changeApi = mock(ChangeApi.class); when(changes.id("changeId")).thenReturn(changeApi); RevisionApi revisionApi = mock(RevisionApi.class); when(changeApi.revision("revisionId")).thenReturn(revisionApi); when(revisionApi.files()).thenReturn(fileInfoMap); return new GerritFacade(gerritApi, new GerritPatchset("changeId", "revisionId")); } }