features.steps.StepUtils.java Source code

Java tutorial

Introduction

Here is the source code for features.steps.StepUtils.java

Source

/*
 * Copyright 2013, 2014, 2015 EnergyOS.org
 *
 *    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.
 */

package features.steps;

import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
import static junit.framework.TestCase.assertNotNull;
import static org.junit.Assert.assertTrue;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.energyos.espi.common.test.BaseStepUtils;
import org.energyos.espi.common.test.CucumberSession;
import org.energyos.espi.common.test.FixtureFactory;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;

public class StepUtils extends BaseStepUtils {
    public static void navigateTo(String path) {
        driver.get(StepUtils.DATA_CUSTODIAN_BASE_URL + path);
    }

    public static void login(String username, String password) {
        navigateTo("/logout.do");
        navigateTo("/");
        WebElement loginLink = driver.findElement(By.id("login"));
        loginLink.click();
        WebElement usernameInput = driver.findElement(By.name("j_username"));
        usernameInput.clear();
        usernameInput.sendKeys(username);
        WebElement passwordInput = driver.findElement(By.name("j_password"));
        passwordInput.clear();
        passwordInput.sendKeys(password);
        WebElement login = driver.findElement(By.name("submit"));

        login.click();
    }

    public static String flattenXml(String xml) {
        return xml.replace("\n", "").replaceAll("\\s+<", "<").replaceAll(">\\s+", ">");
    }

    public static void importUsagePoint(UUID uuid) throws IOException {
        navigateTo("/custodian/upload");
        uploadUsagePoints(uuid);
    }

    public static void addUsagePoint(String username, String mrid) throws IOException {
        navigateTo("/custodian/retailcustomers");
        clickLinkByText(username);
        associate(mrid, "Front Electric Meter");
    }

    public static void registerUser(String username, String firstName, String lastName, String password) {
        StepUtils.login("grace", StepUtils.PASSWORD);

        clickLinkByText("Customer List");
        clickLinkByPartialText("Add new customer");

        assertTrue(driver.getPageSource().contains("New Retail Customer"));

        WebElement form = driver.findElement(By.name("new_customer"));

        WebElement usernameField = form.findElement(By.name("username"));
        usernameField.sendKeys(username);

        WebElement firstNameField = form.findElement(By.name("firstName"));
        firstNameField.sendKeys(firstName);

        WebElement lastNameField = form.findElement(By.name("lastName"));
        lastNameField.sendKeys(lastName);

        WebElement passwordField = form.findElement(By.name("password"));
        passwordField.sendKeys(password);

        WebElement create = form.findElement(By.name("create"));
        create.click();

        assertTrue(driver.getPageSource().contains("Retail Customers"));

        WebElement retailCustomerLink = driver.findElement(By.linkText(username));
        String href = retailCustomerLink.getAttribute("href");
        Pattern pattern = Pattern.compile("retailcustomers/(\\d+)");
        Matcher matcher = pattern.matcher(href);
        matcher.find();
        String hashedId = matcher.group(1);
        assertNotNull(hashedId);
        CucumberSession.setUserHashedId(hashedId);
    }

    public static void associate(String uuid, String description) {
        clickLinkByPartialText("Add Usage Point");

        WebElement uuidElement = driver.findElement(By.name("UUID"));
        uuidElement.clear();
        uuidElement.sendKeys(uuid);

        WebElement descriptionElement = driver.findElement(By.id("description"));
        descriptionElement.sendKeys(description);

        WebElement create = driver.findElement(By.name("create"));
        create.click();
    }

    public static void uploadUsagePoints(UUID uuid) throws IOException {
        String xml = FixtureFactory.newFeedXML(uuid);
        File tmpFile = File.createTempFile("usage_point", ".xml");
        Files.copy(new ByteArrayInputStream(xml.getBytes()), Paths.get(tmpFile.getAbsolutePath()),
                REPLACE_EXISTING);

        clickLinkByText("Upload");
        WebElement file = driver.findElement(By.name("file"));
        file.sendKeys(tmpFile.getAbsolutePath());
        WebElement upload = driver.findElement(By.name("upload"));
        upload.click();
    }

    public static void assertContains(String s, String pageSource) {
        assertTrue("Missing content '" + s + "'", pageSource.contains(s));
    }

    public static String getFirstUsagePointHashedId() {
        clickLinkByText("Usage Points");

        WebElement usagePointLink = driver.findElement(By.className("usage-point"));
        String href = usagePointLink.getAttribute("href");
        Pattern pattern = Pattern.compile("UsagePoint/(.+)/show");
        Matcher matcher = pattern.matcher(href);
        matcher.find();
        String hashedId = matcher.group(1);
        assertNotNull(hashedId);

        return hashedId;
    }

}