com.urswolfer.gerrit.client.rest.http.changes.FileApiRestClientTest.java Source code

Java tutorial

Introduction

Here is the source code for com.urswolfer.gerrit.client.rest.http.changes.FileApiRestClientTest.java

Source

/*
 * Copyright 2013-2014 Urs Wolfer
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.urswolfer.gerrit.client.rest.http.changes;

import com.google.common.base.Function;
import com.google.common.truth.Truth;
import com.google.gerrit.extensions.client.DiffPreferencesInfo.Whitespace;
import com.google.gerrit.extensions.common.DiffInfo;
import com.google.gerrit.extensions.restapi.BinaryResult;
import com.google.gerrit.extensions.restapi.RestApiException;
import com.google.gerrit.extensions.restapi.Url;
import com.google.gson.JsonElement;
import com.urswolfer.gerrit.client.rest.http.GerritRestClient;
import com.urswolfer.gerrit.client.rest.http.common.GerritRestClientBuilder;
import org.apache.commons.codec.binary.Base64;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.message.BasicHeader;
import org.easymock.EasyMock;
import org.testng.annotations.Test;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;

/**
 * @author Thomas Forrer
 */
public class FileApiRestClientTest {

    private static final String FILE_CONTENT = "some new changes";
    private static final String FILE_PATH = "gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl.java";

    private RevisionApiRestClient revisionApiRestClient;

    @Test
    public void testContent() throws Exception {
        String requestUrl = getBaseRequestUrl() + "/content";
        String base64String = Base64.encodeBase64String(FILE_CONTENT.getBytes("UTF-8"));
        HttpResponse httpResponse = EasyMock.createMock(HttpResponse.class);
        HttpEntity httpEntity = EasyMock.createMock(HttpEntity.class);
        EasyMock.expect(httpEntity.getContent())
                .andStubReturn(new ByteArrayInputStream(base64String.getBytes("UTF-8")));
        EasyMock.expect(httpResponse.getEntity()).andStubReturn(httpEntity);
        EasyMock.expect(httpResponse.getFirstHeader("X-FYI-Content-Encoding"))
                .andStubReturn(new BasicHeader("X-FYI-Content-Type", "base64"));
        EasyMock.expect(httpResponse.getFirstHeader("X-FYI-Content-Type"))
                .andStubReturn(new BasicHeader("X-FYI-Content-Type", "text/plain"));
        EasyMock.replay(httpEntity, httpResponse);

        setupServices();

        GerritRestClient gerritRestClient = new GerritRestClientBuilder()
                .expectRequest(requestUrl, null, GerritRestClient.HttpVerb.GET, httpResponse).get();

        FileApiRestClient fileApiRestClient = new FileApiRestClient(gerritRestClient, revisionApiRestClient, null,
                FILE_PATH);
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        BinaryResult binaryResult = fileApiRestClient.content();
        try {
            binaryResult.writeTo(byteArrayOutputStream);
            String actualContent = new String(Base64.decodeBase64(byteArrayOutputStream.toString()));

            Truth.assertThat(actualContent).isEqualTo(FILE_CONTENT);
            Truth.assertThat(binaryResult.isBase64()).isTrue();
            Truth.assertThat(binaryResult.getContentType()).isEqualTo("text/plain");
            EasyMock.verify(gerritRestClient);
        } finally {
            binaryResult.close();
            byteArrayOutputStream.close();
        }
    }

    @Test
    public void testDiff() throws Exception {
        String requestUrl = getBaseRequestUrl() + "/diff";
        testDiff(new Function<FileApiRestClient, Void>() {
            @Override
            public Void apply(FileApiRestClient fileApiRestClient) {
                try {
                    fileApiRestClient.diff();
                } catch (RestApiException e) {
                    throw new RuntimeException(e);
                }
                return null;
            }
        }, requestUrl);
    }

    @Test
    public void testDiffWithBase() throws Exception {
        final String base = "2";
        String requestUrl = getBaseRequestUrl() + "/diff?base=" + base;
        testDiff(new Function<FileApiRestClient, Void>() {
            @Override
            public Void apply(FileApiRestClient fileApiRestClient) {
                try {
                    fileApiRestClient.diff(base);
                } catch (RestApiException e) {
                    throw new RuntimeException(e);
                }
                return null;
            }
        }, requestUrl);
    }

    @Test
    public void testDiffRequest() throws Exception {
        final Integer context = 10;
        String requestUrl = getBaseRequestUrl() + "/diff?context=" + context;
        testDiff(new Function<FileApiRestClient, Void>() {
            @Override
            public Void apply(FileApiRestClient fileApiRestClient) {
                try {
                    fileApiRestClient.diffRequest().withContext(context).get();
                } catch (RestApiException e) {
                    throw new RuntimeException(e);
                }
                return null;
            }
        }, requestUrl);

        final boolean intraline = true;
        requestUrl += "&intraline=" + Boolean.toString(intraline);
        testDiff(new Function<FileApiRestClient, Void>() {
            @Override
            public Void apply(FileApiRestClient fileApiRestClient) {
                try {
                    fileApiRestClient.diffRequest().withContext(context).withIntraline(intraline).get();
                } catch (RestApiException e) {
                    throw new RuntimeException(e);
                }
                return null;
            }
        }, requestUrl);

        final Whitespace whitespace = Whitespace.IGNORE_ALL;
        requestUrl += "&whitespace=" + whitespace.name();
        testDiff(new Function<FileApiRestClient, Void>() {
            @Override
            public Void apply(FileApiRestClient fileApiRestClient) {
                try {
                    fileApiRestClient.diffRequest().withContext(context).withIntraline(intraline)
                            .withWhitespace(whitespace).get();
                } catch (RestApiException e) {
                    throw new RuntimeException(e);
                }
                return null;
            }
        }, requestUrl);
    }

    private void testDiff(Function<FileApiRestClient, Void> method, String expectedRequestUrl) throws Exception {
        JsonElement jsonElement = EasyMock.createMock(JsonElement.class);
        DiffInfo diffInfo = EasyMock.createMock(DiffInfo.class);

        DiffInfoParser diffInfoParser = EasyMock.createMock(DiffInfoParser.class);
        EasyMock.expect(diffInfoParser.parseDiffInfo(jsonElement)).andReturn(diffInfo).once();
        EasyMock.replay(diffInfoParser);

        setupServices();
        GerritRestClient gerritRestClient = new GerritRestClientBuilder().expectGet(expectedRequestUrl, jsonElement)
                .get();

        FileApiRestClient fileApiRestClient = new FileApiRestClient(gerritRestClient, revisionApiRestClient,
                diffInfoParser, FILE_PATH);
        method.apply(fileApiRestClient);

        EasyMock.verify(gerritRestClient, diffInfoParser);
    }

    private String getBaseRequestUrl() {
        String filePathEncoded = Url.encode(FILE_PATH);
        return "/changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/revisions/1/files/"
                + filePathEncoded;
    }

    public void setupServices() {
        revisionApiRestClient = EasyMock.createMock(RevisionApiRestClient.class);
        EasyMock.expect(revisionApiRestClient.getRequestPath())
                .andReturn("/changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/revisions/1")
                .once();
        EasyMock.replay(revisionApiRestClient);
    }
}