Package org.eclipse.orion.server.tests.servlets.git

Source Code of org.eclipse.orion.server.tests.servlets.git.GitStashTest

/*******************************************************************************
* Copyright (c) 2014 IBM Corporation and others
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.orion.server.tests.servlets.git;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

import org.eclipse.orion.internal.server.core.metastore.SimpleMetaStore;
import org.eclipse.orion.server.core.IOUtilities;
import org.eclipse.orion.server.core.ProtocolConstants;
import org.eclipse.orion.server.core.ServerStatus;
import org.eclipse.orion.server.git.GitConstants;
import org.eclipse.orion.server.tests.servlets.internal.DeleteMethodWebRequest;
import org.json.JSONObject;
import org.junit.Test;

import com.meterware.httpunit.GetMethodWebRequest;
import com.meterware.httpunit.PostMethodWebRequest;
import com.meterware.httpunit.PutMethodWebRequest;
import com.meterware.httpunit.WebRequest;

public class GitStashTest extends GitTest {

  @Test
  public void testEmptyStashList() throws Exception {
    String projectName = getMethodName();
    createWorkspace(SimpleMetaStore.DEFAULT_WORKSPACE_NAME);
    JSONObject project = createProjectOrLink(workspaceLocation, projectName, gitDir.toString());

    String stashLocation = getStashLocation(project);
    ServerStatus status = getStashList(stashLocation);
    assertTrue(status.isOK());

    JSONObject stash = status.getJsonData();
    assertTrue(stash.has(ProtocolConstants.KEY_CHILDREN));
    assertEquals(0, stash.getJSONArray(ProtocolConstants.KEY_CHILDREN).length());
  }

  @Test
  public void testStashListPagination() throws Exception {
    String projectName = getMethodName();
    createWorkspace(SimpleMetaStore.DEFAULT_WORKSPACE_NAME);
    JSONObject project = createProjectOrLink(workspaceLocation, projectName, gitDir.toString());
    String stashLocation = getStashLocation(project);

    int CHANGES = 12;
    int pageSize = 5;
    int k = CHANGES;

    while (k-- > 0) {
      JSONObject testTxt = getChild(project, "test.txt"); //$NON-NLS-1$
      modifyFile(testTxt, "change to stash " + String.valueOf(k)); //$NON-NLS-1$

      ServerStatus status = createStash(stashLocation);
      assertTrue(status.isOK());
    }

    ServerStatus status = getStashList(stashLocation, 1, pageSize);
    assertTrue(status.isOK());

    /* first page */
    JSONObject stash = status.getJsonData();
    assertTrue(stash.has(ProtocolConstants.KEY_CHILDREN));
    assertEquals(pageSize, stash.getJSONArray(ProtocolConstants.KEY_CHILDREN).length());
    assertTrue(stash.has(ProtocolConstants.KEY_NEXT_LOCATION));
    assertFalse(stash.has(ProtocolConstants.KEY_PREVIOUS_LOCATION));

    status = getStashList(stash.getString(ProtocolConstants.KEY_NEXT_LOCATION));
    assertTrue(status.isOK());

    /* second page */
    stash = status.getJsonData();
    assertTrue(stash.has(ProtocolConstants.KEY_CHILDREN));
    assertEquals(pageSize, stash.getJSONArray(ProtocolConstants.KEY_CHILDREN).length());
    assertTrue(stash.has(ProtocolConstants.KEY_NEXT_LOCATION));
    assertTrue(stash.has(ProtocolConstants.KEY_PREVIOUS_LOCATION));

    status = getStashList(stash.getString(ProtocolConstants.KEY_NEXT_LOCATION));
    assertTrue(status.isOK());

    /* third page */
    stash = status.getJsonData();
    assertTrue(stash.has(ProtocolConstants.KEY_CHILDREN));
    assertEquals((CHANGES - 2 * pageSize), stash.getJSONArray(ProtocolConstants.KEY_CHILDREN).length());
    assertFalse(stash.has(ProtocolConstants.KEY_NEXT_LOCATION));
    assertTrue(stash.has(ProtocolConstants.KEY_PREVIOUS_LOCATION));
  }

  @Test
  public void testStashCreateWithUntracked() throws Exception {
    String projectName = getMethodName();
    createWorkspace(SimpleMetaStore.DEFAULT_WORKSPACE_NAME);
    JSONObject project = createProjectOrLink(workspaceLocation, projectName, gitDir.toString());

    JSONObject testTxt = getChild(project, "test.txt"); //$NON-NLS-1$
    modifyFile(testTxt, "change to stash"); //$NON-NLS-1$

    String stashLocation = getStashLocation(project);
    ServerStatus status = getStashList(stashLocation);
    assertTrue(status.isOK());

    JSONObject stash = status.getJsonData();
    assertTrue(stash.has(ProtocolConstants.KEY_CHILDREN));
    assertEquals(0, stash.getJSONArray(ProtocolConstants.KEY_CHILDREN).length());

    status = createStash(stashLocation);
    assertTrue(status.isOK());

    status = getStashList(stashLocation);
    assertTrue(status.isOK());

    stash = status.getJsonData();
    assertTrue(stash.has(ProtocolConstants.KEY_CHILDREN));
    assertEquals(1, stash.getJSONArray(ProtocolConstants.KEY_CHILDREN).length());
  }

  @Test
  public void testStashCreateWithUntrackedAndIndex() throws Exception {
    String projectName = getMethodName();
    createWorkspace(SimpleMetaStore.DEFAULT_WORKSPACE_NAME);
    JSONObject project = createProjectOrLink(workspaceLocation, projectName, gitDir.toString());

    JSONObject testTxt = getChild(project, "test.txt"); //$NON-NLS-1$
    modifyFile(testTxt, "change to stash"); //$NON-NLS-1$

    /* stage folder.txt */
    JSONObject folder1 = getChild(project, "folder"); //$NON-NLS-1$
    JSONObject folderTxt = getChild(folder1, "folder.txt"); //$NON-NLS-1$
    modifyFile(folderTxt, "change to stash"); //$NON-NLS-1$
    addFile(folderTxt);

    String stashLocation = getStashLocation(project);
    ServerStatus status = getStashList(stashLocation);
    assertTrue(status.isOK());

    JSONObject stash = status.getJsonData();
    assertTrue(stash.has(ProtocolConstants.KEY_CHILDREN));
    assertEquals(0, stash.getJSONArray(ProtocolConstants.KEY_CHILDREN).length());

    status = createStash(stashLocation);
    assertTrue(status.isOK());

    status = getStashList(stashLocation);
    assertTrue(status.isOK());

    stash = status.getJsonData();
    assertTrue(stash.has(ProtocolConstants.KEY_CHILDREN));
    assertEquals(1, stash.getJSONArray(ProtocolConstants.KEY_CHILDREN).length());

    JSONObject stashChange = stash.getJSONArray(ProtocolConstants.KEY_CHILDREN).getJSONObject(0);
    assertTrue(stashChange.has(GitConstants.KEY_COMMIT_DIFFS));
    assertEquals(2, ((JSONObject) stashChange.get(GitConstants.KEY_COMMIT_DIFFS)).get("Length"));
  }

  @Test
  public void testStashApply() throws Exception {
    String projectName = getMethodName();
    createWorkspace(SimpleMetaStore.DEFAULT_WORKSPACE_NAME);
    JSONObject project = createProjectOrLink(workspaceLocation, projectName, gitDir.toString());

    JSONObject testTxt = getChild(project, "test.txt"); //$NON-NLS-1$
    modifyFile(testTxt, "change to stash"); //$NON-NLS-1$
    String beforeStash = getFileContent(testTxt);

    String stashLocation = getStashLocation(project);
    ServerStatus status = createStash(stashLocation);
    assertTrue(status.isOK());

    String afterStash = getFileContent(testTxt);
    assertFalse(beforeStash.equals(afterStash));

    status = getStashList(stashLocation);
    assertTrue(status.isOK());

    JSONObject stash = status.getJsonData();
    assertTrue(stash.has(ProtocolConstants.KEY_CHILDREN));
    assertEquals(1, stash.getJSONArray(ProtocolConstants.KEY_CHILDREN).length());

    JSONObject change = stash.getJSONArray(ProtocolConstants.KEY_CHILDREN).getJSONObject(0);
    assertTrue(change.has(GitConstants.KEY_STASH_APPLY_LOCATION));

    status = applyStash(change.getString(GitConstants.KEY_STASH_APPLY_LOCATION));
    assertTrue(status.isOK());

    status = getStashList(stashLocation);
    assertTrue(status.isOK());

    stash = status.getJsonData();
    assertTrue(stash.has(ProtocolConstants.KEY_CHILDREN));
    assertEquals(1, stash.getJSONArray(ProtocolConstants.KEY_CHILDREN).length());

    String afterApply = getFileContent(testTxt);
    assertTrue(beforeStash.equals(afterApply));
  }

  @Test
  public void testStashDrop() throws Exception {
    String projectName = getMethodName();
    createWorkspace(SimpleMetaStore.DEFAULT_WORKSPACE_NAME);
    JSONObject project = createProjectOrLink(workspaceLocation, projectName, gitDir.toString());

    JSONObject testTxt = getChild(project, "test.txt"); //$NON-NLS-1$
    modifyFile(testTxt, "change to stash"); //$NON-NLS-1$

    String stashLocation = getStashLocation(project);
    ServerStatus status = createStash(stashLocation);
    assertTrue(status.isOK());

    status = getStashList(stashLocation);
    assertTrue(status.isOK());

    JSONObject stash = status.getJsonData();
    assertTrue(stash.has(ProtocolConstants.KEY_CHILDREN));
    assertEquals(1, stash.getJSONArray(ProtocolConstants.KEY_CHILDREN).length());

    JSONObject change = stash.getJSONArray(ProtocolConstants.KEY_CHILDREN).getJSONObject(0);
    assertTrue(change.has(GitConstants.KEY_STASH_DROP_LOCATION));

    status = dropStash(change.getString(GitConstants.KEY_STASH_DROP_LOCATION));
    assertTrue(status.isOK());

    status = getStashList(stashLocation);
    assertTrue(status.isOK());

    stash = status.getJsonData();
    assertTrue(stash.has(ProtocolConstants.KEY_CHILDREN));
    assertEquals(0, stash.getJSONArray(ProtocolConstants.KEY_CHILDREN).length());
  }

  protected String getStashLocation(JSONObject project) throws Exception {
    JSONObject clone = getCloneForGitResource(project);
    assertTrue(clone.has(GitConstants.KEY_STASH));
    return clone.getString(GitConstants.KEY_STASH);
  }

  protected ServerStatus getStashList(String stashLocation) throws Exception {
    WebRequest request = new GetMethodWebRequest(toAbsoluteURI(stashLocation));
    request.setHeaderField(ProtocolConstants.HEADER_ORION_VERSION, "1"); //$NON-NLS-1$
    setAuthentication(request);
    return waitForTask(webConversation.getResponse(request));
  }

  protected ServerStatus getStashList(String stashLocation, int page, int pageSize) throws Exception {
    WebRequest request = new GetMethodWebRequest(toAbsoluteURI(stashLocation));
    request.setParameter("page", String.valueOf(page)); //$NON-NLS-1$
    request.setParameter("pageSize", String.valueOf(pageSize)); //$NON-NLS-1$

    request.setHeaderField(ProtocolConstants.HEADER_ORION_VERSION, "1"); //$NON-NLS-1$
    setAuthentication(request);
    return waitForTask(webConversation.getResponse(request));
  }

  protected ServerStatus createStash(String stashLocation) throws Exception {
    WebRequest request = new PostMethodWebRequest(toAbsoluteURI(stashLocation));
    request.setHeaderField(ProtocolConstants.HEADER_ORION_VERSION, "1"); //$NON-NLS-1$
    setAuthentication(request);
    return waitForTask(webConversation.getResponse(request));
  }

  protected ServerStatus dropStash(String dropStashLocation) throws Exception {
    WebRequest request = new DeleteMethodWebRequest(toAbsoluteURI(dropStashLocation));
    request.setHeaderField(ProtocolConstants.HEADER_ORION_VERSION, "1"); //$NON-NLS-1$
    setAuthentication(request);
    return waitForTask(webConversation.getResponse(request));
  }

  protected ServerStatus applyStash(String applyStashLocation) throws Exception {
    JSONObject body = new JSONObject();
    WebRequest request = new PutMethodWebRequest(toAbsoluteURI(applyStashLocation), IOUtilities.toInputStream(body.toString()), "application/json"); //$NON-NLS-1$

    request.setHeaderField(ProtocolConstants.HEADER_ORION_VERSION, "1"); //$NON-NLS-1$
    setAuthentication(request);
    return waitForTask(webConversation.getResponse(request));
  }
}
TOP

Related Classes of org.eclipse.orion.server.tests.servlets.git.GitStashTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.