org.eclipse.egit.gitflow.op.FeatureFinishOperationTest.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.egit.gitflow.op.FeatureFinishOperationTest.java

Source

/*******************************************************************************
 * Copyright (C) 2015, Max Hohenegger <eclipse@hohenegger.eu>
 *
 * 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
 *******************************************************************************/
package org.eclipse.egit.gitflow.op;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;

import java.io.File;

import org.eclipse.egit.core.op.BranchOperation;
import org.eclipse.egit.gitflow.GitFlowRepository;
import org.eclipse.egit.gitflow.WrongGitFlowStateException;
import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.api.Status;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.revwalk.RevCommit;
import org.junit.Test;

public class FeatureFinishOperationTest extends AbstractFeatureOperationTest {
    @Test
    public void testFeatureFinishFastForward() throws Exception {
        String fileName = "theFirstFile.txt";
        Repository repository = testRepository.getRepository();
        GitFlowRepository gfRepo = init("testFeatureFinish\n\nfirst commit\n");

        new FeatureStartOperation(gfRepo, MY_FEATURE).execute(null);
        RevCommit branchCommit = addFileAndCommit(fileName, "adding file on feature branch");
        new FeatureFinishOperation(gfRepo).execute(null);
        assertEquals(gfRepo.getConfig().getDevelopFull(), repository.getFullBranch());

        String branchName = gfRepo.getConfig().getFeatureBranchName(MY_FEATURE);
        assertNull(findBranch(repository, branchName));

        RevCommit developHead = gfRepo.findHead();
        assertEquals(branchCommit, developHead);

        assertEquals(2, countCommits(repository));
        assertTrue(new File(repository.getDirectory() + "/../" + fileName).exists());
    }

    @Test
    public void testFeatureFinishSquash() throws Exception {
        String fileName = "theFirstFile.txt";
        String fileName2 = "theSecondFile.txt";

        Repository repository = testRepository.getRepository();
        GitFlowRepository gfRepo = init("testFeatureFinishSquash\n\nfirst commit\n");

        new FeatureStartOperation(gfRepo, MY_FEATURE).execute(null);

        String branchName = gfRepo.getConfig().getFeatureBranchName(MY_FEATURE);
        addFileAndCommit(fileName, "adding first file on feature branch");
        addFileAndCommit(fileName2, "adding second file on feature branch");
        FeatureFinishOperation featureFinishOperation = new FeatureFinishOperation(gfRepo);
        featureFinishOperation.setSquash(true);
        featureFinishOperation.execute(null);
        assertEquals(gfRepo.getConfig().getDevelopFull(), repository.getFullBranch());
        assertEquals(null, findBranch(repository, branchName));

        assertEquals(1, countCommits(repository));
        assertTrue(new File(repository.getDirectory() + "/../" + fileName).exists());
        assertTrue(new File(repository.getDirectory() + "/../" + fileName2).exists());

        Status status = Git.wrap(repository).status().call();
        assertTrue(status.hasUncommittedChanges());
    }

    @Test
    public void testFeatureFinish() throws Exception {
        Repository repository = testRepository.getRepository();
        GitFlowRepository gfRepo = init("testFeatureFinish\n\nfirst commit\n");

        new FeatureStartOperation(gfRepo, MY_FEATURE).execute(null);
        addFileAndCommit("foo.txt", "testFeatureFinish\n\nbranch commit 1\n");
        addFileAndCommit("bar.txt", "testFeatureFinish\n\nbranch commit 2\n");
        new FeatureFinishOperation(gfRepo).execute(null);
        assertEquals(gfRepo.getConfig().getDevelopFull(), repository.getFullBranch());

        String branchName = gfRepo.getConfig().getFeatureBranchName(MY_FEATURE);

        assertEquals(formatMergeCommitMessage(branchName) + " into develop", gfRepo.findHead().getFullMessage());
    }

    @Test
    public void testFeatureFinishKeepBranch() throws Exception {
        Repository repository = testRepository.getRepository();
        GitFlowRepository gfRepo = init("testFeatureFinishKeepBranch\n\nfirst commit\n");

        new FeatureStartOperation(gfRepo, MY_FEATURE).execute(null);
        addFileAndCommit("foo.txt", "testFeatureFinishKeepBranch\n\nbranch commit 1\n");
        addFileAndCommit("bar.txt", "testFeatureFinishKeepBranch\n\nbranch commit 2\n");
        FeatureFinishOperation featureFinishOperation = new FeatureFinishOperation(gfRepo);
        featureFinishOperation.setKeepBranch(true);
        featureFinishOperation.execute(null);
        assertEquals(gfRepo.getConfig().getDevelopFull(), repository.getFullBranch());

        String branchName = gfRepo.getConfig().getFeatureBranchName(MY_FEATURE);
        assertNotNull(findBranch(repository, branchName));

        assertEquals(formatMergeCommitMessage(branchName) + " into develop", gfRepo.findHead().getFullMessage());
    }

    @Test(expected = WrongGitFlowStateException.class)
    public void testFeatureFinishFail() throws Exception {
        Repository repository = testRepository.getRepository();
        GitFlowRepository gfRepo = init("testFeatureFinishFail\n\nfirst commit\n");

        new FeatureStartOperation(gfRepo, MY_FEATURE).execute(null);
        new BranchOperation(repository, gfRepo.getConfig().getDevelop()).execute(null);
        new FeatureFinishOperation(gfRepo).execute(null);
    }
}