/******************************************************************************* * 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); } }