com.hack23.cia.systemintegrationtest.AbstractRoleSystemTest.java Source code

Java tutorial

Introduction

Here is the source code for com.hack23.cia.systemintegrationtest.AbstractRoleSystemTest.java

Source

/*
 * Copyright 2014 James Pether Srling
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 *   $Id$
 *  $HeadURL$
*/
package com.hack23.cia.systemintegrationtest;

import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.FixMethodOrder;
import org.junit.runner.RunWith;
import org.junit.runners.MethodSorters;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;
import org.openqa.selenium.remote.DesiredCapabilities;

import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.hack23.cia.testfoundation.AbstractSystemIntegrationTest;
import com.hack23.cia.testfoundation.Parallelized;
import com.hack23.cia.web.impl.ui.application.views.common.pagelinks.api.PageModeMenuCommand;
import com.hack23.cia.web.impl.ui.application.views.common.viewnames.ApplicationPageMode;
import com.hack23.cia.web.impl.ui.application.views.common.viewnames.CommonsViews;

/**
 * The Class UserRoleSystemTest.
 */
@RunWith(Parallelized.class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public abstract class AbstractRoleSystemTest extends AbstractSystemIntegrationTest {

    /** The browser. */
    protected final String browser;

    /** The Constant webDriverMap. */
    private static final Map<String, WebDriver> webDriverMap = new ConcurrentHashMap<>();

    /** The Constant usingExternalServer. */
    private static final boolean usingExternalServer;

    static {
        final String systemTestTargetUrlProperty = System.getProperty("system.test.target.url");
        if (systemTestTargetUrlProperty != null && systemTestTargetUrlProperty.trim().length() > 0) {
            usingExternalServer = true;
        } else {
            usingExternalServer = false;
        }
        CitizenIntelligenceAgencyServer.setEnv("CIA_APP_ENCRYPTION_PASSWORD", "allhaildiscordia");
    }

    /**
     * Instantiates a new abstract role system test.
     *
     * @param browser
     *            the browser
     */
    public AbstractRoleSystemTest(final String browser) {
        super();
        this.browser = browser;

    }

    /**
     * Start server.
     *
     * @throws Exception
     *             the exception
     */
    @BeforeClass
    static final synchronized public void startServer() throws Exception {
        System.setProperty("webdriver.gecko.driver", "/usr/bin/geckodriver-0.13.0-linux64");
        if (!usingExternalServer) {
            CitizenIntelligenceAgencyServer.startTestServer();
        }
    }

    /**
     * Stop server.
     *
     * @throws Exception
     *             the exception
     */
    @AfterClass
    static final synchronized public void stopServer() throws Exception {
        if (!usingExternalServer) {
            CitizenIntelligenceAgencyServer.stopTestServer();
        }
    }

    /**
     * Close web driver.
     */
    @After
    public final void closeWebDriver() {
        webDriverMap.get(browser).quit();
    }

    /**
     * Gets the web driver.
     *
     * @return the web driver
     */
    protected final synchronized WebDriver getWebDriver() {

        WebDriver driver = null;
        if ("firefox".equals(browser)) {
            final DesiredCapabilities capabilities = DesiredCapabilities.firefox();
            capabilities.setCapability("marionette", true);
            driver = new FirefoxDriver(capabilities);
        } else if ("chrome".equals(browser)) {
            driver = new ChromeDriver();
        } else if ("htmlunit-firefox".equals(browser)) {
            final HtmlUnitDriver htmlUnitDriver = new HtmlUnitDriver(BrowserVersion.FIREFOX_45);
            htmlUnitDriver.setJavascriptEnabled(true);
            driver = htmlUnitDriver;
        } else if ("htmlunit-ie11".equals(browser)) {
            final HtmlUnitDriver htmlUnitDriver = new HtmlUnitDriver(BrowserVersion.INTERNET_EXPLORER);
            htmlUnitDriver.setJavascriptEnabled(true);
            driver = htmlUnitDriver;
        } else if ("htmlunit-edge".equals(browser)) {
            final HtmlUnitDriver htmlUnitDriver = new HtmlUnitDriver(BrowserVersion.EDGE);
            htmlUnitDriver.setJavascriptEnabled(true);
            driver = htmlUnitDriver;
        } else if ("htmlunit-chrome".equals(browser)) {
            final HtmlUnitDriver htmlUnitDriver = new HtmlUnitDriver(BrowserVersion.CHROME);
            htmlUnitDriver.setJavascriptEnabled(true);
            driver = htmlUnitDriver;
        } else {
            fail("No valid browser parameter:" + browser);
        }

        driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
        driver.manage().timeouts().setScriptTimeout(30, TimeUnit.SECONDS);

        webDriverMap.put(browser, driver);
        driver.manage().window().maximize();
        return driver;
    }

    /**
     * Click first row in grid.
     *
     * @param userPageVisit
     *            the user page visit
     * @return the string
     * @throws InterruptedException
     *             the interrupted exception
     */
    protected final void clickFirstRowInGrid(final UserPageVisit userPageVisit) throws InterruptedException {
        final List<WebElement> gridRows = userPageVisit.getGridRows();
        assertFalse(gridRows.isEmpty());

        final WebElement choosenRow = gridRows.iterator().next();

        final List<WebElement> cells = choosenRow.findElements(By.className("v-grid-cell"));

        final WebElement choosenCell = cells.iterator().next();

        userPageVisit.performClickAction(choosenCell);

    }

    /**
     * Login as admin.
     *
     * @param userPageVisit
     *            the user page visit
     * @throws Exception
     *             the exception
     */
    protected final void loginAsAdmin(final UserPageVisit userPageVisit) throws Exception {
        userPageVisit.visitDirectPage(
                new PageModeMenuCommand(CommonsViews.MAIN_VIEW_NAME, ApplicationPageMode.LOGIN.toString()));
        userPageVisit.loginUser("admin@admin.com", "admin");
    }

}