blob: afbab9cebc646b276eb9ca8cf43f6a4ac1eaf85c [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2014 Robin Stocker <robin@nibor.org> 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
*******************************************************************************/
package org.eclipse.egit.ui.internal.push;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import java.io.File;
import java.util.concurrent.TimeUnit;
import org.eclipse.egit.core.op.BranchOperation;
import org.eclipse.egit.core.op.CreateLocalBranchOperation;
import org.eclipse.egit.core.op.CreateLocalBranchOperation.UpstreamConfig;
import org.eclipse.egit.ui.JobFamilies;
import org.eclipse.egit.ui.common.LocalRepositoryTestCase;
import org.eclipse.egit.ui.test.ContextMenuHelper;
import org.eclipse.egit.ui.test.JobJoiner;
import org.eclipse.egit.ui.test.TestUtil;
import org.eclipse.jgit.lib.ConfigConstants;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotShell;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotTree;
import org.junit.Before;
import org.junit.Test;
/**
* Tests for "Push to Upstream" action.
*/
public class PushToUpstreamTest extends LocalRepositoryTestCase {
private Repository repository;
private Repository remoteRepository;
@Before
public void createRepositories() throws Exception {
File repositoryFile = createProjectAndCommitToRepository();
File remoteRepositoryFile = createRemoteRepository(repositoryFile);
repository = lookupRepository(repositoryFile);
remoteRepository = lookupRepository(remoteRepositoryFile);
}
@Test
public void pushWithoutConfig() throws Exception {
checkoutNewLocalBranch("foo");
assertPushToUpstreamDisabled();
}
@Test
public void pushWithExistingUpstreamConfiguration() throws Exception {
checkoutNewLocalBranch("bar");
// Existing configuration
repository.getConfig().setString(ConfigConstants.CONFIG_BRANCH_SECTION,
"bar", ConfigConstants.CONFIG_KEY_REMOTE, "fetch");
repository.getConfig().setString(ConfigConstants.CONFIG_BRANCH_SECTION,
"bar", ConfigConstants.CONFIG_KEY_MERGE, "refs/heads/bar");
pushToUpstream();
assertBranchPushed("bar", remoteRepository);
}
@Test
public void pushWithDefaultRemoteWithPushRefSpecs() throws Exception {
checkoutNewLocalBranch("baz");
repository.getConfig().setString("remote", "origin", "pushurl",
repository.getConfig().getString("remote", "push", "pushurl"));
repository.getConfig().setString("remote", "origin", "push",
"refs/heads/*:refs/heads/*");
pushToUpstream();
assertBranchPushed("baz", remoteRepository);
}
private void checkoutNewLocalBranch(String branchName)
throws Exception {
CreateLocalBranchOperation createBranch = new CreateLocalBranchOperation(
repository, branchName, repository.findRef("master"),
UpstreamConfig.NONE);
createBranch.execute(null);
BranchOperation checkout = new BranchOperation(repository, branchName);
checkout.execute(null);
}
private void assertBranchPushed(String branchName, Repository remoteRepo)
throws Exception {
ObjectId pushed = remoteRepo.resolve(branchName);
assertNotNull("Expected '" + branchName
+ "' to resolve to non-null ObjectId on remote repository",
pushed);
ObjectId local = repository.resolve(branchName);
assertEquals(
"Expected local branch to be the same as branch on remote after pushing",
local, pushed);
}
private SWTBotTree selectProject() {
SWTBotTree projectExplorerTree = TestUtil.getExplorerTree();
getProjectItem(projectExplorerTree, PROJ1).select();
return projectExplorerTree;
}
private void pushToUpstream() {
SWTBotTree project = selectProject();
JobJoiner joiner = JobJoiner.startListening(JobFamilies.PUSH, 20,
TimeUnit.SECONDS);
ContextMenuHelper
.clickContextMenu(project, getPushToUpstreamMenuPath());
TestUtil.openJobResultDialog(joiner.join());
SWTBotShell resultDialog = TestUtil
.botForShellStartingWith("Push Results");
resultDialog.close();
}
private void assertPushToUpstreamDisabled() {
SWTBotTree project = selectProject();
boolean enabled = ContextMenuHelper.isContextMenuItemEnabled(project,
getPushToUpstreamMenuPath());
assertFalse("Expected Push to Upstream to be disabled", enabled);
}
private String[] getPushToUpstreamMenuPath() {
return new String[] { "Team",
util.getPluginLocalizedValue("PushToUpstreamCommand.label") };
}
}