/*******************************************************************************
* 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.*;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.egit.core.op.TagOperation;
import org.eclipse.egit.gitflow.GitFlowRepository;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.lib.TagBuilder;
import org.eclipse.jgit.revwalk.RevCommit;
import org.junit.Test;
public class ReleaseStartOperationTest extends AbstractGitFlowOperationTest {
@Test
public void testReleaseBranchCreated() throws Exception {
testRepository
.createInitialCommit("testReleaseBranchCreated\n\nfirst commit\n");
Repository repository = testRepository.getRepository();
new InitOperation(repository).execute(null);
GitFlowRepository gfRepo = new GitFlowRepository(repository);
ReleaseStartOperation releaseStartOperation = new ReleaseStartOperation(
gfRepo, MY_RELEASE);
releaseStartOperation.execute(null);
assertNull(releaseStartOperation.getSchedulingRule());
assertEquals(gfRepo.getConfig().getFullReleaseBranchName(MY_RELEASE),
repository.getFullBranch());
}
@Test
public void testReleaseBranchCreatedFromHeadCommit() throws Exception {
RevCommit initialCommit = testRepository
.createInitialCommit("testReleaseBranchCreatedFromHeadCommit\n\nfirst commit\n");
Repository repository = testRepository.getRepository();
new InitOperation(repository).execute(null);
GitFlowRepository gfRepo = new GitFlowRepository(repository);
ReleaseStartOperation releaseStartOperation = new ReleaseStartOperation(
gfRepo, initialCommit.getName(), MY_RELEASE);
releaseStartOperation.execute(null);
assertNull(releaseStartOperation.getSchedulingRule());
assertEquals(gfRepo.getConfig().getFullReleaseBranchName(MY_RELEASE),
repository.getFullBranch());
}
@Test
public void testReleaseBranchCreatedFromCommit() throws Exception {
RevCommit initialCommit = testRepository
.createInitialCommit("testReleaseBranchCreatedFromCommit\n\nfirst commit\n");
testRepository
.createInitialCommit("testReleaseBranchCreatedFromCommit\n\nsecond commit\n");
Repository repository = testRepository.getRepository();
new InitOperation(repository).execute(null);
GitFlowRepository gfRepo = new GitFlowRepository(repository);
ReleaseStartOperation releaseStartOperation = new ReleaseStartOperation(
gfRepo, initialCommit.getName(), MY_RELEASE);
releaseStartOperation.execute(null);
assertNotNull(releaseStartOperation.getSchedulingRule());
assertEquals(gfRepo.getConfig().getFullReleaseBranchName(MY_RELEASE),
repository.getFullBranch());
assertEquals(initialCommit, gfRepo.findHead());
}
@Test
public void testReleaseStartWithContent() throws Exception {
testRepository
.createInitialCommit("testReleaseStartWithContent\n\nfirst commit\n");
Repository repository = testRepository.getRepository();
new InitOperation(repository).execute(null);
GitFlowRepository gfRepo = new GitFlowRepository(repository);
testUtils.addFileToProject(project.getProject(), "folder1/file1.txt",
"Hello world");
testRepository.connect(project.getProject());
testRepository.trackAllFiles(project.getProject());
RevCommit developCommit = testRepository.commit("Initial commit");
new ReleaseStartOperation(gfRepo, MY_RELEASE).execute(null);
RevCommit releaseHead = gfRepo.findHead(gfRepo
.getConfig().getReleaseBranchName(MY_RELEASE));
assertEquals(developCommit, releaseHead);
}
@Test
public void testReleaseStartFailed() throws Exception {
testRepository
.createInitialCommit("testReleaseStart\n\nfirst commit\n");
Repository repository = testRepository.getRepository();
new InitOperation(repository).execute(null);
GitFlowRepository gfRepo = new GitFlowRepository(repository);
createTag(gfRepo.findHead(), MY_RELEASE, "irrelevant", repository);
try {
new ReleaseStartOperation(gfRepo, MY_RELEASE).execute(null);
fail();
} catch (CoreException e) {
assertEquals(gfRepo.getConfig().getDevelopFull(), repository.getFullBranch());
}
}
protected void createTag(RevCommit head, String name, String message,
Repository repository) throws CoreException {
TagBuilder tag = new TagBuilder();
tag.setTag(name);
tag.setMessage(message);
tag.setObjectId(head);
new TagOperation(repository, tag, false).execute(null);
}
}