blob: da640f33973c218c7574bd372d69cd380565f1dc [file] [log] [blame]
/*******************************************************************************
* Copyright (C) 2012, 2013 Robin Stocker <robin@nibor.org>
*
* 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.view.synchronize;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
import java.util.concurrent.TimeUnit;
import org.eclipse.egit.core.op.FetchOperation;
import org.eclipse.egit.ui.JobFamilies;
import org.eclipse.egit.ui.internal.UIText;
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.Constants;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.lib.StoredConfig;
import org.eclipse.jgit.transport.RefSpec;
import org.eclipse.jgit.transport.RemoteConfig;
import org.eclipse.jgit.transport.URIish;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotView;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotShell;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotToolbarButton;
import org.eclipse.team.ui.synchronize.ISynchronizeView;
import org.junit.Before;
import org.junit.Test;
/**
* Test for "Push" action in Synchronize view.
*/
public class SynchronizeViewPushTest extends AbstractSynchronizeViewTest {
@Before
public void prepare() throws Exception {
Repository childRepository = lookupRepository(childRepositoryFile);
Repository repository = lookupRepository(repositoryFile);
StoredConfig config = repository.getConfig();
RemoteConfig remoteConfig = new RemoteConfig(config, "origin");
remoteConfig.addURI(new URIish(childRepository.getDirectory().getParentFile().toURI().toURL()));
remoteConfig.addFetchRefSpec(new RefSpec("+refs/heads/*:refs/remotes/origin/*"));
remoteConfig.update(config);
config.setString(ConfigConstants.CONFIG_BRANCH_SECTION, "master", ConfigConstants.CONFIG_KEY_REMOTE, "origin");
config.setString(ConfigConstants.CONFIG_BRANCH_SECTION, "master", ConfigConstants.CONFIG_KEY_MERGE, "refs/heads/master");
config.save();
FetchOperation fetchOperation = new FetchOperation(repository, remoteConfig, 60, false);
fetchOperation.run(null);
}
@Test
public void shouldUpdateTrackingBranchOnPush() throws Exception {
makeChangesAndCommit(PROJ1);
Repository repository = lookupRepository(repositoryFile);
ObjectId headId = repository.resolve(Constants.HEAD);
String trackingBranch = Constants.R_REMOTES + "origin/master";
launchSynchronization(Constants.HEAD, trackingBranch, false);
SWTBotView viewBot = bot.viewById(ISynchronizeView.VIEW_ID);
SWTBotToolbarButton pushButton = viewBot.toolbarButton(UIText.GitActionContributor_Push);
JobJoiner jobJoiner = JobJoiner.startListening(JobFamilies.PUSH, 30, TimeUnit.SECONDS);
pushButton.click();
TestUtil.openJobResultDialog(jobJoiner.join());
String destinationString = repositoryFile.getParentFile().getName() + " - " + "origin";
SWTBotShell resultDialog = bot.shell(NLS.bind(UIText.PushResultDialog_title, destinationString));
resultDialog.close();
Repository remoteRepository = lookupRepository(childRepositoryFile);
ObjectId masterOnRemote = remoteRepository.resolve("master");
assertThat("Expected push to update branch on remote repository", masterOnRemote, is(headId));
ObjectId trackingId = repository.resolve(trackingBranch);
assertThat("Expected tracking branch to be updated", trackingId, is(headId));
}
}