Package com.smartbear.soapui.utils.fest

Source Code of com.smartbear.soapui.utils.fest.RestProjectUtils

/*
* Copyright 2004-2014 SmartBear Software
*
* Licensed under the EUPL, Version 1.1 or - as soon as they will be approved by the European Commission - subsequent
* versions of the EUPL (the "Licence");
* You may not use this work except in compliance with the Licence.
* You may obtain a copy of the Licence at:
*
* http://ec.europa.eu/idabc/eupl
*
* Unless required by applicable law or agreed to in writing, software distributed under the Licence is
* distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the Licence for the specific language governing permissions and limitations
* under the Licence.
*/
package com.smartbear.soapui.utils.fest;

import com.eviware.soapui.SoapUI;
import com.eviware.soapui.impl.rest.panels.method.RestMethodDesktopPanel;
import com.eviware.soapui.impl.rest.panels.request.RestRequestDesktopPanel;
import com.eviware.soapui.impl.rest.panels.resource.RestResourceDesktopPanel;
import com.eviware.soapui.impl.wsdl.panels.teststeps.support.MovePropertyDownAction;
import com.eviware.soapui.impl.wsdl.panels.teststeps.support.MovePropertyUpAction;
import com.eviware.soapui.impl.wsdl.panels.teststeps.support.PropertyHolderTable;
import com.eviware.soapui.impl.wsdl.panels.teststeps.support.RemovePropertyAction;
import org.fest.swing.core.KeyPressInfo;
import org.fest.swing.core.Robot;
import org.fest.swing.driver.JTableComboBoxEditorCellWriter;
import org.fest.swing.fixture.*;

import javax.swing.*;
import java.awt.event.KeyEvent;

import static com.eviware.soapui.impl.rest.panels.resource.RestParamsTable.REST_PARAMS_TABLE;
import static com.eviware.soapui.impl.rest.panels.resource.RestParamsTable.REVERT_PARAMETER_VALUES;
import static com.eviware.soapui.impl.wsdl.panels.teststeps.support.AddParamAction.ADD_PARAM_ACTION_NAME;
import static org.fest.swing.data.TableCell.row;

/**
* Utility class used for generic operations on a REST project
*/
public final class RestProjectUtils {
    private static final int NEW_PROJECT_TIMEOUT = 2000;
    private static final String URI = "http://soapui.org";
    private static final String NEW_REST_PROJECT_MENU_ITEM = "New REST Project";
    private static final String NEW_REST_PROJECT_DIALOG_NAME = "New REST Project";
    private static final String OK_BUTTON_NAME = "OK";

    private static final int REST_RESOURCE_POSITION_IN_TREE = 2;
    private static final int REST_REQUEST_POSITION_IN_TREE = 4;
    private static final int REST_METHOD_POSITION_IN_TREE = 3;


    private RestProjectUtils() {
        throw new AssertionError();
    }

    public static void createNewRestProject(FrameFixture rootWindow, Robot robot) {
        openCreateNewRestProjectDialog(rootWindow);
        enterURIandClickOk(robot);
    }

    public static void createNewRestProjectWithUri(FrameFixture rootWindow, Robot robot, String uri) {
        openCreateNewRestProjectDialog(rootWindow);
        enterURIandClickOk(robot, uri);
    }

    public static JPanelFixture findRequestEditor(FrameFixture rootWindow, int projectIndexInTree, Robot robot) {
        closeAlreadyOpenedDesktopEditors(rootWindow, RestRequestDesktopPanel.REST_REQUEST_EDITOR);
        openPanelByClickingOnTheNavigationElement(projectIndexInTree, rootWindow, REST_REQUEST_POSITION_IN_TREE, robot);
        return locateRequestEditor(rootWindow);
    }

    public static void closeAlreadyOpenedDesktopEditors(FrameFixture rootWindow, String panelName) {
        JPanelFixture panel = null;
        try {
            panel = rootWindow.panel(panelName);

        } catch (Exception ex) {
            //There is no open editors
        }

        if (panel == null) {
            return;
        }

        JInternalFrame fixture = (JInternalFrame) panel.target.getParent().getParent().getParent();
        fixture.doDefaultCloseAction();
    }

    public static JPanelFixture locateRequestEditor(FrameFixture rootWindow) {
        return rootWindow.panel(RestRequestDesktopPanel.REST_REQUEST_EDITOR);
    }

    public static JTreeRowFixture findRestRequestPopupMenu(FrameFixture rootWindow, int projectIndexInTree) {
        return (JTreeRowFixture) findTreeNode(projectIndexInTree, rootWindow, REST_REQUEST_POSITION_IN_TREE).rightClick();
    }

    public static JPanelFixture findMethodEditor(FrameFixture rootWindow, int projectIndexInTree, Robot robot) {
        closeAlreadyOpenedDesktopEditors(rootWindow, RestMethodDesktopPanel.REST_METHOD_EDITOR);
        openPanelByClickingOnTheNavigationElement(projectIndexInTree, rootWindow, REST_METHOD_POSITION_IN_TREE, robot);
        return locateMethodEditor(rootWindow);
    }

    public static JPanelFixture locateMethodEditor(FrameFixture rootWindow) {
        return rootWindow.panel(RestMethodDesktopPanel.REST_METHOD_EDITOR);
    }


    public static JPanelFixture findResourceEditor(FrameFixture rootWindow, int projectIndexInTree, Robot robot) {
        closeAlreadyOpenedDesktopEditors(rootWindow, RestResourceDesktopPanel.REST_RESOURCE_EDITOR);
        openPanelByClickingOnTheNavigationElement(projectIndexInTree, rootWindow, REST_RESOURCE_POSITION_IN_TREE, robot);
        return locateResourceEditor(rootWindow);
    }

    public static JPanelFixture locateResourceEditor(FrameFixture rootWindow) {
        return rootWindow.panel(RestResourceDesktopPanel.REST_RESOURCE_EDITOR);
    }

    public static void addNewParameter(JPanelFixture parentPanel, Robot robot, String paramName, String paramValue) {
        parentPanel.button(ADD_PARAM_ACTION_NAME).click();
        JTableFixture restParamsTable = parentPanel.table(REST_PARAMS_TABLE);

        robot.waitForIdle();
        int rowNumToEdit = restParamsTable.target.getRowCount() - 1;
        editTableCell(paramName, restParamsTable, robot, rowNumToEdit, 0);
        editTableCell(paramValue, restParamsTable, robot, rowNumToEdit, 1);
    }

    public static void deleteParameter(JPanelFixture parentPanel, int rowNum) {
        JTableFixture restParamsTable = parentPanel.table(REST_PARAMS_TABLE);
        restParamsTable.cell(row(rowNum).column(0)).click();
        parentPanel.button(RemovePropertyAction.DELETE_PARAM_ACTON_NAME).click();
    }

    public static void deleteParameter(JPanelFixture parentPanel, String paramName) {
        JTableFixture restParamsTable = parentPanel.table(REST_PARAMS_TABLE);
        for (int rowNum = 0; rowNum < restParamsTable.rowCount(); rowNum++) {
            JTableCellFixture cell = restParamsTable.cell(row(rowNum).column(0));
            if (cell.value().equals(paramName)) {
                cell.click();
                break;
            }
        }
        parentPanel.button(RemovePropertyAction.DELETE_PARAM_ACTON_NAME).click();
    }

    public static void moveUpParameter(JPanelFixture parentPanel, String paramName) {
        JTableFixture restParamsTable = parentPanel.table(REST_PARAMS_TABLE);
        for (int rowNum = 0; rowNum < restParamsTable.rowCount(); rowNum++) {
            JTableCellFixture cell = restParamsTable.cell(row(rowNum).column(0));
            if (cell.value().equals(paramName)) {
                cell.click();
                break;
            }
        }
        parentPanel.button(MovePropertyUpAction.MOVE_PROPERTY_UP_ACTION_NAME).click();
    }

    public static void moveDownParameter(JPanelFixture parentPanel, String paramName) {
        JTableFixture restParamsTable = parentPanel.table(REST_PARAMS_TABLE);
        for (int rowNum = 0; rowNum < restParamsTable.rowCount(); rowNum++) {
            JTableCellFixture cell = restParamsTable.cell(row(rowNum).column(0));
            if (cell.value().equals(paramName)) {
                cell.click();
                break;
            }
        }
        parentPanel.button(MovePropertyDownAction.MOVE_PROPERTY_DOWN_ACTION_NAME).click();
    }

    public static void revertParameterValue(JPanelFixture parentPanel) {
        parentPanel.button(REVERT_PARAMETER_VALUES).click();

    }

    public static void changeParameterLevel(JPanelFixture parentPanel, String parameterName, String newLevel,
                                            Robot robot) {
        JTableFixture restParamsTable = parentPanel.table(REST_PARAMS_TABLE);
        for (int rowCounter = 0; rowCounter < restParamsTable.rowCount(); rowCounter++) {
            String paramNameAtIndex = restParamsTable.cell(row(rowCounter).column(0)).value();
            if (paramNameAtIndex.equals(parameterName)) {
//        JTableCellFixture cell = restParamsTable.cell( row( rowCounter ).column( 3 ) );
//        cell.enterValue( newLevel );
                JTableComboBoxEditorCellWriter cellWriter = new JTableComboBoxEditorCellWriter(robot);
                cellWriter.enterValue(restParamsTable.target, rowCounter, 3, newLevel);
                return;
            }
        }
    }

    public static void changeParameterStyle(JPanelFixture parentPanel, String parameterName, String newStyle,
                                            Robot robot) {
        JTableFixture restParamsTable = parentPanel.table(REST_PARAMS_TABLE);
        for (int rowCounter = 0; rowCounter < restParamsTable.rowCount(); rowCounter++) {
            String paramNameAtIndex = restParamsTable.cell(row(rowCounter).column(0)).value();
            if (paramNameAtIndex.equals(parameterName)) {
                JTableComboBoxEditorCellWriter cellWriter = new JTableComboBoxEditorCellWriter(robot);
                cellWriter.enterValue(restParamsTable.target, rowCounter, 2, newStyle);
                return;
            }
        }
    }

    public static void changeParameterValue(JPanelFixture parentPanel, String parameterValue, String newValue,
                                            Robot robot) {
        JTableFixture restParamsTable = parentPanel.table(REST_PARAMS_TABLE);
        for (int rowCounter = 0; rowCounter < restParamsTable.rowCount(); rowCounter++) {
            JTableCellFixture cell = restParamsTable.cell(row(rowCounter).column(1));
            String paramNameAtIndex = cell.value();
            if (paramNameAtIndex.equals(parameterValue)) {
                cell.doubleClick();
                editTableCell(newValue, restParamsTable, robot, rowCounter, 1);
                return;
            }
        }
    }

    public static void changeParameterName(JPanelFixture parentPanel, String parameterName, String newName,
                                           Robot robot) {
        JTableFixture restParamsTable = parentPanel.table(REST_PARAMS_TABLE);
        for (int rowCounter = 0; rowCounter < restParamsTable.rowCount(); rowCounter++) {
            JTableCellFixture cell = restParamsTable.cell(row(rowCounter).column(0));
            String paramNameAtIndex = cell.value();
            if (paramNameAtIndex.equals(parameterName)) {
                cell.doubleClick();
                editTableCell(newName, restParamsTable, robot, rowCounter, 0);
                return;
            }
        }
    }

    private static void enterURIandClickOk(Robot robot) {
        enterURIandClickOk(robot, URI);
    }

    public static void enterURIandClickOk(Robot robot, String uri) {
        DialogFixture newProjectDialog = FestMatchers.dialogWithTitle(NEW_REST_PROJECT_DIALOG_NAME)
                .withTimeout(NEW_PROJECT_TIMEOUT)
                .using(robot);

        newProjectDialog.textBox().focus();
        newProjectDialog.textBox().click();
        newProjectDialog.textBox().setText(uri);

        JButtonFixture buttonOK = newProjectDialog.button(FestMatchers.buttonWithText(OK_BUTTON_NAME));
        buttonOK.click();
    }

    private static void openCreateNewRestProjectDialog(FrameFixture rootWindow) {
        JPopupMenuFixture workspace = WorkspaceUtils.rightClickOnWorkspace(rootWindow);
        workspace.menuItem(FestMatchers.menuItemWithText(NEW_REST_PROJECT_MENU_ITEM)).click();
    }

    private static void openPanelByClickingOnTheNavigationElement(int newProjectIndexInTree, FrameFixture frame,
                                                                  int panelPositionInNavigationTree, Robot robot) {
        findTreeNode(newProjectIndexInTree, frame, panelPositionInNavigationTree).click();
        robot.pressAndReleaseKeys(KeyEvent.VK_ENTER);
    }

    private static void rightClickOnTreeNode(int newProjectIndexInTree, FrameFixture frame, int panelPositionInNavigationTree) {
        findTreeNode(newProjectIndexInTree, frame, panelPositionInNavigationTree).rightClick();
    }

    private static JTreeNodeFixture findTreeNode(int newProjectIndexInTree, FrameFixture frame, int panelPositionInNavigationTree) {
        return WorkspaceUtils.getNavigatorPanel(frame).tree().node(newProjectIndexInTree + panelPositionInNavigationTree);
    }

    private static void editTableCell(String paramValue, JTableFixture table, Robot robot, int row, int column) {
        robot.waitForIdle();
        JTextField tableCellEditor = (JTextField) table.cell(row(row).column(column)).editor();
        new JTextComponentFixture(robot, tableCellEditor)
                .setText(paramValue)
                .pressAndReleaseKey(KeyPressInfo.keyCode(KeyEvent.VK_ENTER));
    }

    public static void addCustomProperty(int newProjectIndexInNavigationTree, FrameFixture rootWindow,
                                         String propertyName, String propertyValue, Robot robot) {
        findTreeNode(newProjectIndexInNavigationTree, rootWindow, 0).click();
        JTabbedPaneFixture propertiesPaneFixture = new JTabbedPaneFixture(robot, SoapUI.PROPERTIES_TAB_PANEL_NAME);
        propertiesPaneFixture.selectTab("Custom Properties");

        JPanel tablePanel = (JPanel) propertiesPaneFixture.target.getComponent(1);

        JPanelFixture panelFixture = new JPanelFixture(robot, tablePanel);
        panelFixture.button(ADD_PARAM_ACTION_NAME).click();

        JTableFixture table = panelFixture.table(PropertyHolderTable.PROPERTIES_HOLDER_TABLE_NAME);

        robot.waitForIdle();
        int rowNumToEdit = table.target.getRowCount() - 1;
        editTableCell(propertyName, table, robot, rowNumToEdit, 0);
        editTableCell(propertyValue, table, robot, rowNumToEdit, 1);

    }

    public static void createNewRESTMethod(Robot robot, String methodName) {
        DialogFixture newMethodDialog = FestMatchers.dialogWithTitle("New REST Method").using(robot);
        newMethodDialog.textBox().setText(methodName);
        newMethodDialog.button(FestMatchers.buttonWithText("OK")).click();
    }

    public static void addNewRESTMethodAtPath(Robot robot, FrameFixture rootWindow, String methodName, String path) {
        JTreeFixture navigationTree = WorkspaceUtils.getNavigationTree(rootWindow);
        JPopupMenuFixture popupMenuFixture = navigationTree.showPopupMenuAt(path);
        popupMenuFixture.menuItem(FestMatchers.menuItemWithText("New Method")).click();

        createNewRESTMethod(robot, methodName);
    }
}
TOP

Related Classes of com.smartbear.soapui.utils.fest.RestProjectUtils

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.