features.steps.APISteps.java Source code

Java tutorial

Introduction

Here is the source code for features.steps.APISteps.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 features.steps.StepUtils.assertContains;
import static org.custommonkey.xmlunit.XMLAssert.assertXpathExists;
import static org.energyos.espi.common.test.BaseStepUtils.clickLinkByText;
import static org.energyos.espi.common.test.TestUtils.getXPathValue;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.CoreMatchers.nullValue;
import static org.junit.Assert.assertThat;

import java.io.IOException;

import org.custommonkey.xmlunit.exceptions.XpathException;
import org.energyos.espi.common.test.CucumberSession;
import org.energyos.espi.common.test.WebDriverSingleton;
import org.junit.Ignore;
import org.openqa.selenium.WebDriver;
import org.springframework.http.HttpEntity;
import org.springframework.web.client.RestTemplate;
import org.xml.sax.SAXException;

import cucumber.api.java.Before;
import cucumber.api.java.en.And;
import cucumber.api.java.en.Then;
import cucumber.api.java.en.When;

public class APISteps {

    private WebDriver driver;

    @Before
    public void setup() {
        driver = WebDriverSingleton.getInstance();
    }

    @Ignore
    @When("^I GET \\/espi\\/1_1\\/resource\\/RetailCustomer\\/\\{RetailCustomerID\\}\\/UsagePoint$")
    public void I_GET_espi_1_1_resource_RetailCustomer_RetailCustomerID_UsagePoint() throws Throwable {
        driver.get(StepUtils.DATA_CUSTODIAN_BASE_URL + "/espi/1_1/resource/RetailCustomer/"
                + CucumberSession.getUserHashedId() + "/UsagePoint");
    }

    @Ignore
    @Then("^I should receive the list of Usage Points$")
    public void I_should_receive_the_list_of_Usage_Points() throws Throwable {
        assertXpathExists("/:feed/:entry[1]/:content/espi:UsagePoint", driver.getPageSource());
        assertXpathExists("/:feed/:entry[2]/:content/espi:UsagePoint", driver.getPageSource());
    }

    @Ignore
    @Then("^I should receive the Usage Point$")
    public void I_should_receive_the_Usage_Point() throws SAXException, IOException, XpathException {
        assertXpathExists("/:entry/:content/espi:UsagePoint", driver.getPageSource());
    }

    @Ignore
    @When("^I POST \\/espi\\/1_1\\/resource\\/RetailCustomer\\/\\{RetailCustomerID\\}\\/UsagePoint$")
    public void I_POST_espi_1_1_resource_RetailCustomer_RetailCustomerID_UsagePoint() throws Throwable {
        RestTemplate rest = new RestTemplate();
        String response = rest.postForObject(
                StepUtils.DATA_CUSTODIAN_BASE_URL + "/espi/1_1/resource/RetailCustomer/1/UsagePoint",
                "<entry xmlns=\"http://www.w3.org/2005/Atom\">>"
                        + "  <id>urn:uuid:97EAEBAD-1214-4A58-A3D4-A16A6DE718E1</id>"
                        + "  <published>2012-10-24T00:00:00Z</published>"
                        + "  <updated>2012-10-24T00:00:00Z</updated>" + "  <link rel=\"self\""
                        + "        href=\"/espi/1_1/resource/RetailCustomer/1/UsagePoint/97EAEBAD-1214-4A58-A3D4-A16A6DE718E1\"/>"
                        + "  <link rel=\"up\"" + "        href=\"/espi/1_1/resource/RetailCustomer/1/UsagePoint\"/>"
                        + "  <link rel=\"related\""
                        + "        href=\"/espi/1_1/resource/RetailCustomer/1/UsagePoint/97EAEBAD-1214-4A58-A3D4-A16A6DE718E1/MeterReading\"/>"
                        + "  <link rel=\"related\""
                        + "        href=\"/espi/1_1/resource/RetailCustomer/1/UsagePoint/97EAEBAD-1214-4A58-A3D4-A16A6DE718E1/ElectricPowerUsageSummary\"/>"
                        + "  <link rel=\"related\""
                        + "        href=\"/espi/1_1/resource/UsagePoint/01/LocalTimeParameters/01\"/>"
                        + "  <title>Created</title>" + "  <content>"
                        + "    <UsagePoint xmlns=\"http://naesb.org/espi\">" + "      <ServiceCategory>"
                        + "        <kind>0</kind>" + "      </ServiceCategory>" + "    </UsagePoint>"
                        + "  </content>" + "</entry>",
                String.class);

        assertThat(response, is(nullValue()));
    }

    @Ignore
    @And("^I PUT \\/espi\\/1_1\\/resource\\/RetailCustomer\\/\\{RetailCustomerID\\}\\/UsagePoint\\/\\{UsagePointID\\}$")
    public void I_PUT_espi__resource_RetailCustomer_RetailCustomerID_UsagePoint_UsagePointID() throws Throwable {
        driver.get(StepUtils.DATA_CUSTODIAN_BASE_URL + "/espi/1_1/resource/RetailCustomer/1/UsagePoint");
        String xml = driver.getPageSource();

        String idWithPrefix = getXPathValue("/:feed/:entry/:title[contains(text(),'Created')]/../:id", xml);
        String id = idWithPrefix.replace("urn:uuid:", "");
        String selfHref = getXPathValue(
                "/:feed/:entry/:title[contains(text(),'Created')]/../:link[@rel='self']/@href", xml);

        String requestBody = "<entry xmlns=\"http://www.w3.org/2005/Atom\">>" + "  <id>" + idWithPrefix + "</id>"
                + "  <published>2012-10-24T00:00:00Z</published>" + "  <updated>2012-10-24T00:00:00Z</updated>"
                + "  <link rel=\"self\"" + "        href=\"/espi/1_1/resource/RetailCustomer/1/UsagePoint/" + id
                + "\"/>" + "  <link rel=\"up\""
                + "        href=\"/espi/1_1/resource/RetailCustomer/1/UsagePoint\"/>" + "  <link rel=\"related\""
                + "        href=\"/espi/1_1/resource/RetailCustomer/1/UsagePoint/" + id + "/MeterReading\"/>"
                + "  <link rel=\"related\"" + "        href=\"/espi/1_1/resource/RetailCustomer/1/UsagePoint/" + id
                + "/ElectricPowerUsageSummary\"/>" + "  <link rel=\"related\""
                + "        href=\"/espi/1_1/resource/UsagePoint/01/LocalTimeParameters/01\"/>"
                + "  <title>Updated</title>" + "  <content>" + "    <UsagePoint xmlns=\"http://naesb.org/espi\">"
                + "      <ServiceCategory>" + "        <kind>0</kind>" + "      </ServiceCategory>"
                + "    </UsagePoint>" + "  </content>" + "</entry>";
        HttpEntity<String> request = new HttpEntity<>(requestBody);
        RestTemplate rest = new RestTemplate();
        rest.put(StepUtils.DATA_CUSTODIAN_BASE_URL + selfHref, request);
    }

    @Ignore
    @Then("^I should see a new Usage Point$")
    public void I_should_see_a_new_Usage_Point() throws Throwable {
        clickLinkByText("Usage Points");
        assertContains("Created", driver.getPageSource());
    }

    @Then("^I should see an updated Usage Point$")
    public void I_should_see_an_updated_Usage_Point() throws Throwable {
        clickLinkByText("Usage Points");
        assertContains("Updated", driver.getPageSource());
    }

    @And("^I DELETE \\/espi\\/1_1\\/resource\\/RetailCustomer\\/\\{RetailCustomerID\\}\\/UsagePoint\\/\\{UsagePointID\\}$")
    public void I_DELETE_espi__resource_RetailCustomer_RetailCustomerID_UsagePoint_UsagePointID() throws Throwable {
        RestTemplate rest = new RestTemplate();
        rest.delete(StepUtils.DATA_CUSTODIAN_BASE_URL + "/espi/1_1/resource/RetailCustomer/"
                + CucumberSession.getUserHashedId() + "/UsagePoint/" + CucumberSession.getUsagePointHashedId());
    }

    @Ignore
    @Then("^the Usage Point should be deleted$")
    public void the_Usage_Point_should_be_deleted() throws Throwable {
        driver.get(StepUtils.DATA_CUSTODIAN_BASE_URL + "/espi/1_1/resource/RetailCustomer/1/UsagePoint");
        String xml = driver.getPageSource();

        assertThat(getXPathValue("/:feed/:entry/:link[@rel='self']/@href", xml), is(not("RetailCustomer/"
                + CucumberSession.getUserHashedId() + "/UsagePoint/" + CucumberSession.getUsagePointHashedId())));
    }

}