org.eclipse.che.selenium.git.AddFilesToIndexTest.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.che.selenium.git.AddFilesToIndexTest.java

Source

/*
 * Copyright (c) 2012-2017 Red Hat, Inc.
 * 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:
 *   Red Hat, Inc. - initial API and implementation
 */
package org.eclipse.che.selenium.git;

import com.google.inject.Inject;
import com.google.inject.name.Named;
import java.net.URL;
import java.nio.file.Paths;
import org.eclipse.che.commons.lang.NameGenerator;
import org.eclipse.che.selenium.core.client.TestProjectServiceClient;
import org.eclipse.che.selenium.core.client.TestUserPreferencesServiceClient;
import org.eclipse.che.selenium.core.constant.TestGitConstants;
import org.eclipse.che.selenium.core.constant.TestMenuCommandsConstants;
import org.eclipse.che.selenium.core.project.ProjectTemplates;
import org.eclipse.che.selenium.core.user.DefaultTestUser;
import org.eclipse.che.selenium.core.workspace.TestWorkspace;
import org.eclipse.che.selenium.pageobject.AskDialog;
import org.eclipse.che.selenium.pageobject.AskForValueDialog;
import org.eclipse.che.selenium.pageobject.CodenvyEditor;
import org.eclipse.che.selenium.pageobject.Events;
import org.eclipse.che.selenium.pageobject.Ide;
import org.eclipse.che.selenium.pageobject.Loader;
import org.eclipse.che.selenium.pageobject.Menu;
import org.eclipse.che.selenium.pageobject.ProjectExplorer;
import org.eclipse.che.selenium.pageobject.git.Git;
import org.openqa.selenium.Keys;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

/** @author Musienko Maksim */
public class AddFilesToIndexTest {
    private static final String PROJECT_NAME = NameGenerator.generate("AddFilesToIndex_", 4);

    private static final String STATUS_MESSAGE_ONE_FILE = " On branch master\n" + " Changes to be committed:\n"
            + "  modified:   src/main/webapp/index.jsp";

    private static final String STATUS_MESSAGE_ALL_FILES = " On branch master\n" + " Changes to be committed:\n"
            + "  new file:   src/main/webapp/new.css\n" + " modified:   src/main/webapp/index.jsp\n"
            + " modified:   src/main/java/org/eclipse/qa/examples/AppController.java";

    private static final String STATUS_MESSAGE_AFTER_EDIT = " On branch master\n" + " Changes to be committed:\n"
            + "  new file:   src/main/webapp/new.css\n" + " modified:   src/main/webapp/index.jsp\n"
            + " modified:   src/main/java/org/eclipse/qa/examples/AppController.java\n"
            + " Changes not staged for commit:\n" + "  modified:   src/main/webapp/new.css\n"
            + " modified:   src/main/webapp/index.jsp\n"
            + " modified:   src/main/java/org/eclipse/qa/examples/AppController.java";

    private static final String STATUS_AFTER_DELETE_FILE = " On branch master\n" + " Changes to be committed:\n"
            + "  new file:   src/main/webapp/new.css\n" + " modified:   src/main/webapp/index.jsp\n"
            + " modified:   src/main/java/org/eclipse/qa/examples/AppController.java\n" + " deleted:    README.md";

    @Inject
    private TestWorkspace ws;
    @Inject
    private Ide ide;

    @Inject
    @Named("github.username")
    private String gitHubUsername;

    @Inject
    @Named("github.password")
    private String gitHubPassword;

    @Inject
    private DefaultTestUser productUser;
    @Inject
    private ProjectExplorer projectExplorer;
    @Inject
    private Menu menu;
    @Inject
    private AskDialog askDialog;
    @Inject
    private Git git;
    @Inject
    private Events events;
    @Inject
    private Loader loader;
    @Inject
    private CodenvyEditor editor;
    @Inject
    private AskForValueDialog askForValueDialog;
    @Inject
    private TestUserPreferencesServiceClient testUserPreferencesServiceClient;
    @Inject
    private TestProjectServiceClient testProjectServiceClient;

    @BeforeClass
    public void prepare() throws Exception {
        testUserPreferencesServiceClient.addGitCommitter(gitHubUsername, productUser.getEmail());

        URL resource = getClass().getResource("/projects/default-spring-project");
        testProjectServiceClient.importProject(ws.getId(), Paths.get(resource.toURI()), PROJECT_NAME,
                ProjectTemplates.MAVEN_SPRING);
        ide.open(ws);
    }

    @Test
    public void addFilesTest() throws InterruptedException {
        projectExplorer.waitProjectExplorer();
        projectExplorer.openItemByPath(PROJECT_NAME);
        menu.runCommand(TestMenuCommandsConstants.Git.GIT, TestMenuCommandsConstants.Git.INITIALIZE_REPOSITORY);
        askDialog.waitFormToOpen();
        askDialog.clickOkBtn();
        askDialog.waitFormToClose();
        git.waitGitStatusBarWithMess(TestGitConstants.GIT_INITIALIZED_SUCCESS);
        events.clickProjectEventsTab();
        events.waitExpectedMessage(TestGitConstants.GIT_INITIALIZED_SUCCESS);

        // perform init commit
        projectExplorer.quickExpandWithJavaScript();
        projectExplorer.selectItem(PROJECT_NAME);
        menu.runCommand(TestMenuCommandsConstants.Git.GIT, TestMenuCommandsConstants.Git.COMMIT);
        git.waitAndRunCommit("init");
        loader.waitOnClosed();

        // check state of the index
        projectExplorer.selectItem(PROJECT_NAME);
        menu.runCommand(TestMenuCommandsConstants.Git.GIT, TestMenuCommandsConstants.Git.ADD_TO_INDEX);
        git.waitGitStatusBarWithMess(TestGitConstants.GIT_NOTHING_TO_ADD);
        events.clickProjectEventsTab();
        events.waitExpectedMessage(TestGitConstants.GIT_NOTHING_TO_ADD);

        //Edit index.jsp
        projectExplorer.openItemByVisibleNameInExplorer("index.jsp");
        editor.waitActiveEditor();
        editor.typeTextIntoEditor(Keys.PAGE_DOWN.toString());
        editor.typeTextIntoEditor(Keys.END.toString());
        editor.typeTextIntoEditor(Keys.ENTER.toString());
        editor.typeTextIntoEditor("<!-- Testing add to index-->");
        loader.waitOnClosed();

        //Add this file to index
        projectExplorer.selectItem(PROJECT_NAME + "/src/main/webapp/index.jsp");
        menu.runCommand(TestMenuCommandsConstants.Git.GIT, TestMenuCommandsConstants.Git.ADD_TO_INDEX);
        git.waitGitStatusBarWithMess(TestGitConstants.GIT_ADD_TO_INDEX_SUCCESS);
        events.clickProjectEventsTab();
        events.waitExpectedMessage(TestGitConstants.GIT_ADD_TO_INDEX_SUCCESS);

        //Check status
        menu.runCommand(TestMenuCommandsConstants.Git.GIT, TestMenuCommandsConstants.Git.STATUS);
        loader.waitOnClosed();
        git.waitGitStatusBarWithMess(STATUS_MESSAGE_ONE_FILE);

        //Edit GreetingController.java
        projectExplorer.openItemByPath(PROJECT_NAME + "/src/main/java/org/eclipse/qa/examples/AppController.java");
        editor.waitActiveEditor();
        editor.setCursorToLine(16);
        editor.typeTextIntoEditor("//Testing add to index");
        loader.waitOnClosed();

        //Create new.css file
        projectExplorer.selectItem(PROJECT_NAME + "/src/main/webapp");
        menu.runCommand(TestMenuCommandsConstants.Project.PROJECT, TestMenuCommandsConstants.Project.New.NEW,
                TestMenuCommandsConstants.Project.New.CSS_FILE);
        askForValueDialog.waitFormToOpen();
        askForValueDialog.typeAndWaitText("new");
        askForValueDialog.clickOkBtn();

        //Add all files to index
        projectExplorer.selectItem(PROJECT_NAME);
        menu.runCommand(TestMenuCommandsConstants.Git.GIT, TestMenuCommandsConstants.Git.ADD_TO_INDEX);
        git.waitAddToIndexFormToOpen();
        git.waitAddToIndexFileName("Add content of folder " + PROJECT_NAME + " to index?");
        git.confirmAddToIndexForm();
        git.waitGitStatusBarWithMess(TestGitConstants.GIT_ADD_TO_INDEX_SUCCESS);
        events.clickProjectEventsTab();
        events.waitExpectedMessage(TestGitConstants.GIT_ADD_TO_INDEX_SUCCESS);

        //Check status
        menu.runCommand(TestMenuCommandsConstants.Git.GIT, TestMenuCommandsConstants.Git.STATUS);
        git.waitGitStatusBarWithMess(STATUS_MESSAGE_ALL_FILES);

        //Edit GreetingController.java
        editor.selectTabByName("AppController");
        editor.waitActiveEditor();
        editor.typeTextIntoEditor(Keys.DOWN.toString());
        editor.typeTextIntoEditor(Keys.DOWN.toString());
        editor.typeTextIntoEditor(Keys.DOWN.toString());
        editor.typeTextIntoEditor("//Testing add to index");
        loader.waitOnClosed();

        //Edit index.jsp
        editor.selectTabByName("index.jsp");
        editor.waitActiveEditor();
        editor.typeTextIntoEditor(Keys.PAGE_DOWN.toString());
        editor.typeTextIntoEditor(Keys.ENTER.toString());
        editor.typeTextIntoEditor("<!-- Testing add to index-->");
        loader.waitOnClosed();

        //Edit new.css
        editor.selectTabByName("new.css");
        editor.waitActiveEditor();
        editor.typeTextIntoEditor(Keys.PAGE_DOWN.toString());
        editor.typeTextIntoEditor(Keys.ENTER.toString());
        editor.typeTextIntoEditor("/* Testing add to index */");
        loader.waitOnClosed();

        //Check status and add to index all files
        menu.runCommand(TestMenuCommandsConstants.Git.GIT, TestMenuCommandsConstants.Git.STATUS);
        git.waitGitStatusBarWithMess(STATUS_MESSAGE_AFTER_EDIT);
        projectExplorer.selectItem(PROJECT_NAME);
        menu.runCommand(TestMenuCommandsConstants.Git.GIT, TestMenuCommandsConstants.Git.ADD_TO_INDEX);
        git.waitGitStatusBarWithMess(TestGitConstants.GIT_ADD_TO_INDEX_SUCCESS);

        // delete README file and add to index
        deleteFromMenuFile();
        projectExplorer.selectItem(PROJECT_NAME);
        menu.runCommand(TestMenuCommandsConstants.Git.GIT, TestMenuCommandsConstants.Git.ADD_TO_INDEX);
        git.waitGitStatusBarWithMess(TestGitConstants.GIT_ADD_TO_INDEX_SUCCESS);
        menu.runCommand(TestMenuCommandsConstants.Git.GIT, TestMenuCommandsConstants.Git.STATUS);
        git.waitGitStatusBarWithMess(STATUS_AFTER_DELETE_FILE);
    }

    private void deleteFromMenuFile() {
        loader.waitOnClosed();
        projectExplorer.selectItem(PROJECT_NAME + "/README.md");
        menu.runCommand(TestMenuCommandsConstants.Edit.EDIT, TestMenuCommandsConstants.Edit.DELETE);
        loader.waitOnClosed();
        askDialog.acceptDialogWithText("Delete file \"README.md\"?");
    }
}