/*******************************************************************************
 * Copyright (c) 2012-2013 EclipseSource Muenchen GmbH 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
 * 
 * Contributors:
 * Edgar Mueller - initial API and implementation
 ******************************************************************************/
package org.eclipse.emf.emfstore.client.test.ui.controllers;

import org.eclipse.emf.emfstore.client.ESLocalProject;
import org.eclipse.emf.emfstore.client.ESWorkspaceProvider;
import org.eclipse.emf.emfstore.internal.client.ui.controller.UICheckoutController;
import org.eclipse.emf.emfstore.server.exceptions.ESException;
import org.eclipse.emf.emfstore.server.model.versionspec.ESPrimaryVersionSpec;
import org.eclipse.swtbot.swt.finder.finders.UIThreadRunnable;
import org.eclipse.swtbot.swt.finder.results.VoidResult;
import org.eclipse.swtbot.swt.finder.waits.DefaultCondition;
import org.junit.Test;

public class UIAskForBranchCheckoutControllerTest extends AbstractUIControllerTestWithCommitAndBranch {

	@Override
	@Test
	public void testController() throws ESException {

		checkout();
		createPlayerAndCommit();
		createLeagueAndCommit();
		createBranch("foo-branch");

		UIThreadRunnable.asyncExec(new VoidResult() {
			public void run() {
				try {
					final UICheckoutController checkoutController = new UICheckoutController(getBot().getDisplay()
						.getActiveShell(),
						(ESPrimaryVersionSpec) null,
						getLocalProject().getRemoteProject(),
						true);
					checkoutController.execute();
				} catch (final ESException e) {
					fail(e.getMessage());
				}
			}
		});

		getBot().text(0).setText("checkout");
		getBot().button("OK").click();

		getBot().table().select(1);
		getBot().button("OK").click();

		getBot().waitUntil(new DefaultCondition() {

			// BEGIN SUPRESS CATCH EXCEPTION
			public boolean test() throws Exception {
				for (final ESLocalProject localProject : ESWorkspaceProvider.INSTANCE.getWorkspace().getLocalProjects()) {
					if (localProject.getProjectName().equals("checkout")) {
						return true;
					}
				}

				return false;
			}

			// END SUPRESS CATCH EXCEPTION

			public String getFailureMessage() {
				return "Checkout did not succeed";
			}
		});
	}
}
