blob: 8261b7fe25ebda56ac6441f27277bc0f923a3966 [file] [log] [blame]
/*******************************************************************************
* 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 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*******************************************************************************/
package org.eclipse.egit.gitflow;
import static org.eclipse.egit.gitflow.GitFlowDefaults.DEVELOP;
import static org.eclipse.egit.gitflow.GitFlowDefaults.FEATURE_PREFIX;
import static org.eclipse.egit.gitflow.GitFlowDefaults.HOTFIX_PREFIX;
import static org.eclipse.egit.gitflow.GitFlowDefaults.RELEASE_PREFIX;
import static org.eclipse.egit.gitflow.GitFlowDefaults.VERSION_TAG;
import static org.eclipse.jgit.lib.Constants.DOT_GIT;
import static org.eclipse.jgit.lib.Constants.R_HEADS;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.io.File;
import org.eclipse.egit.core.test.TestRepository;
import org.eclipse.egit.gitflow.op.AbstractDualRepositoryTestCase;
import org.eclipse.egit.gitflow.op.FeatureStartOperation;
import org.eclipse.egit.gitflow.op.HotfixStartOperation;
import org.eclipse.egit.gitflow.op.InitOperation;
import org.eclipse.egit.gitflow.op.ReleaseFinishOperation;
import org.eclipse.egit.gitflow.op.ReleaseStartOperation;
import org.eclipse.jgit.lib.Ref;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.revwalk.RevCommit;
import org.junit.Test;
public class GitFlowRepositoryTest extends AbstractDualRepositoryTestCase {
@Test(expected = WrongGitFlowStateException.class)
public void testFindHeadFailOnEmptyRepository() throws Exception {
File workdir3 = testUtils.createTempDir("Repository3");
TestRepository repository3 = new TestRepository(new File(workdir3, DOT_GIT));
GitFlowRepository gfRepo = new GitFlowRepository(repository3.getRepository());
gfRepo.findHead();
}
@Test
public void testIsMaster() throws Exception {
repository1.createInitialCommit("testIsMaster\n\nfirst commit\n");
Repository repository = repository2.getRepository();
GitFlowRepository gfRepo = new GitFlowRepository(repository);
assertTrue(gfRepo.isMaster());
new InitOperation(repository).execute(null);
assertFalse(gfRepo.isMaster());
}
@Test
public void testGetFeatureBranches() throws Exception {
repository1
.createInitialCommit("testGetFeatureBranches\n\nfirst commit\n");
Repository repository = repository1.getRepository();
GitFlowRepository gfRepo = new GitFlowRepository(repository);
new InitOperation(repository).execute(null);
assertTrue(gfRepo.getFeatureBranches().isEmpty());
new FeatureStartOperation(gfRepo, MY_FEATURE).execute(null);
assertEquals(R_HEADS + gfRepo.getConfig().getFeaturePrefix()
+ MY_FEATURE, gfRepo.getFeatureBranches().get(0).getName());
}
@Test
public void testGetReleaseBranches() throws Exception {
repository1
.createInitialCommit("testGetReleaseBranches\n\nfirst commit\n");
Repository repository = repository1.getRepository();
GitFlowRepository gfRepo = new GitFlowRepository(repository);
new InitOperation(repository).execute(null);
assertTrue(gfRepo.getReleaseBranches().isEmpty());
new ReleaseStartOperation(gfRepo, MY_RELEASE).execute(null);
assertEquals(R_HEADS + gfRepo.getConfig().getReleasePrefix()
+ MY_RELEASE, gfRepo.getReleaseBranches().get(0).getName());
}
@Test
public void testGetHotfixBranches() throws Exception {
repository1
.createInitialCommit("testGetHotfixBranches\n\nfirst commit\n");
Repository repository = repository1.getRepository();
GitFlowRepository gfRepo = new GitFlowRepository(repository);
new InitOperation(repository).execute(null);
assertTrue(gfRepo.getHotfixBranches().isEmpty());
new ReleaseStartOperation(gfRepo, MY_RELEASE).execute(null);
new ReleaseFinishOperation(gfRepo, MY_RELEASE).execute(null);
new HotfixStartOperation(gfRepo, MY_HOTFIX).execute(null);
assertEquals(
R_HEADS + gfRepo.getConfig().getHotfixPrefix() + MY_HOTFIX,
gfRepo.getHotfixBranches().get(0).getName());
}
@Test
public void testGetFeatureBranchName() throws Exception {
repository1
.createInitialCommit("testGetFeatureBranchName\n\nfirst commit\n");
Repository repository = repository1.getRepository();
GitFlowRepository gfRepo = new GitFlowRepository(repository);
InitParameters initParameters = new InitParameters();
initParameters.setDevelop(DEVELOP);
initParameters.setMaster(GitFlowDefaults.MASTER);
initParameters.setFeature(FEATURE_PREFIX);
initParameters.setRelease(RELEASE_PREFIX);
initParameters.setHotfix(HOTFIX_PREFIX);
initParameters.setVersionTag(VERSION_TAG);
new InitOperation(repository, initParameters).execute(null);
assertTrue(gfRepo.getFeatureBranches().isEmpty());
new FeatureStartOperation(gfRepo, MY_FEATURE).execute(null);
Ref actualFeatureRef = repository.exactRef(R_HEADS
+ gfRepo.getConfig().getFeaturePrefix() + MY_FEATURE);
assertEquals(MY_FEATURE, gfRepo.getFeatureBranchName(actualFeatureRef));
}
@Test
public void testIsOnDevelop() throws Exception {
Repository repository = repository1.getRepository();
GitFlowRepository gfRepo = new GitFlowRepository(repository);
repository1.checkoutBranch(gfRepo.getConfig().getDevelop());
RevCommit developBranchCommit = repository1.commit("develop branch commit");
assertTrue(gfRepo.isOnDevelop(developBranchCommit));
new FeatureStartOperation(gfRepo, MY_FEATURE).execute(null);
RevCommit featureBranchCommit = repository1.commit("feature branch commit");
assertFalse(gfRepo.isOnDevelop(featureBranchCommit));
// the initial commit was made on master, but is also on develop
assertTrue(gfRepo.isOnDevelop(initialCommit));
}
}