/**
* Copyright 2015 ArcBees Inc.
*
* 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 com.arcbees.gaestudio.cucumber.stepdefs;
import javax.inject.Inject;
import com.arcbees.gaestudio.client.place.NameTokens;
import com.arcbees.gaestudio.companion.domain.Car;
import com.arcbees.gaestudio.cucumber.page.BasePage;
import com.arcbees.gaestudio.cucumber.page.VisualizerPage;
import com.arcbees.gaestudio.factories.CarFactory;
import com.arcbees.gaestudio.server.api.RestIT;
import cucumber.api.java.en.And;
import cucumber.api.java.en.Given;
import cucumber.api.java.en.Then;
import static org.junit.Assert.assertEquals;
public class EditEntityStepDefs {
private static final String NEW_MAKE = "Mercedes";
private static final String A_NEW_STRING = "a new string";
private static final float DELTA = 0.0001f;
private static final String MAKE = "Ford";
private final RestIT restIT;
private final BasePage basePage;
private final VisualizerPage visualizerPage;
private final CarFactory carFactory;
private long carId;
@Inject
EditEntityStepDefs(RestIT restIT,
BasePage basePage,
VisualizerPage visualizerPage,
CarFactory carFactory) {
this.basePage = basePage;
this.restIT = restIT;
this.visualizerPage = visualizerPage;
this.carFactory = carFactory;
}
@Given("^I create an entity$")
public void I_create_an_entity() throws Throwable {
Car car = carFactory.createFakeCar();
carId = restIT.createRemoteCar(car);
}
@And("^I modify the entity")
public void I_modify_the_entity() throws Throwable {
editCar();
}
@Then("^the entity should be modified$")
public void the_entity_should_be_modified() throws Throwable {
assertCarIsModified(carId);
}
private void editCar() {
basePage.navigate(NameTokens.visualizer);
visualizerPage.clickOnKind(Car.class.getSimpleName());
visualizerPage.clickOnEntityInTable();
visualizerPage.clickEditButton();
changeCarData();
visualizerPage.clickSaveButton();
basePage.waitForSaveConfirmation("Entity saved.");
}
private void changeCarData() {
visualizerPage.changeCarString(MAKE, NEW_MAKE);
visualizerPage.changeCarBooleans();
visualizerPage.changeCarGeoPts();
visualizerPage.changeCarWheels();
visualizerPage.changeCarMixedProperties(A_NEW_STRING);
}
private void assertCarIsModified(long carId) {
Car saved = restIT.getRemoteCar(carId);
checkMake(saved);
checkBooleans(saved);
checkGeoPts(saved);
checkWheels(saved);
checkMixedProperties(saved);
}
private void checkMixedProperties(Car saved) {
assertEquals(A_NEW_STRING, saved.getMixedProperties().get(1));
}
private void checkWheels(Car saved) {
assertEquals(2.0f, saved.getWheels().get(0).getSize(), DELTA);
}
private void checkGeoPts(Car saved) {
assertEquals(25.0f, saved.getGeoPts().get(2).getLatitude(), DELTA);
assertEquals(50.0f, saved.getGeoPts().get(2).getLongitude(), DELTA);
}
private void checkBooleans(Car saved) {
assertEquals(true, saved.getBooleans().get(0));
assertEquals(false, saved.getBooleans().get(1));
assertEquals(true, saved.getBooleans().get(2));
}
private void checkMake(Car saved) {
assertEquals("Car make is not saved", NEW_MAKE, saved.getMake());
}
}