package de.epages.ws.order11;
import static de.epages.ws.common.AssertNoError.assertNoError;
import static org.hamcrest.core.StringEndsWith.endsWith;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import java.util.GregorianCalendar;
import org.junit.Before;
import org.junit.Test;
import de.epages.ws.ShopWebServiceTestConfiguration;
import de.epages.ws.common.model.TAttribute;
import de.epages.ws.order11.model.TBaseLineItem;
import de.epages.ws.order11.model.TCreate_Input;
import de.epages.ws.order11.model.TCreate_Return;
import de.epages.ws.order11.model.TDelete_Return;
import de.epages.ws.order11.model.TExists_Return;
import de.epages.ws.order11.model.TGetInfo_Return;
import de.epages.ws.order11.model.TLineItemContainerIn;
import de.epages.ws.order11.model.TProductLineItemIn;
import de.epages.ws.order11.model.TUpdate_Input;
import de.epages.ws.order11.model.TUpdate_Return;
import de.epages.ws.order11.stub.TFind_Input;
import de.epages.ws.shop3.model.TAddressNamed;
public class OrderServiceTest {
private static final OrderServiceClient orderService = new OrderServiceClientImpl(new ShopWebServiceTestConfiguration());
private TCreate_Input Order_in = new TCreate_Input();
private TUpdate_Input Order_up = new TUpdate_Input();
private TAttribute OrderAttr_in = new TAttribute("Comment","my customer commment",null,null);
private TAttribute OrderAttr_up = new TAttribute("Comment","my updated customer comment",null,null);
private TAddressNamed Address_in = new TAddressNamed();
private TAddressNamed Address_up = new TAddressNamed();
String Alias = "java_test-1";
String Customer = "Customers/1001"; /* mmustermann */
String OrderPath = Customer + "/Orders/" + Alias;
String[] Orders = new String[]{OrderPath};
String[] OrderAttributes = new String[]{"Comment"};
String[] AddressAttributes = new String[]{"JobTitle" /*,"Salutation" */ };
String[] ItemAttributes = new String[]{"Name"};
/**
* Sets all the required prerequisites for the tests. Will be called before the test are run.
*/
@Before
public void setUp() {
// init input address data
Address_in.setEMail("java_test-1@epages.de");
Address_in.setFirstName("Klaus");
Address_in.setLastName("Klaussen");
Address_in.setStreet("Musterstraße 2");
Address_in.setStreet2("Ortsteil Niederfingeln");
Address_in.setCodePorte("13a");
Address_in.setAttributes( new TAttribute[] {
new TAttribute("JobTitle","best Job",null,null),
new TAttribute("Salutation","Dr.",null,null),
});
Address_up.setFirstName("Hans");
Address_up.setLastName("Hanssen");
Address_up.setStreet("Musterstraße 2b");
Address_up.setStreet2("Ortsteil Oberfingeln");
Address_up.setCodePorte("13u");
// init order input data
Order_in.setAlias(Alias);
Order_in.setCustomer(Customer);
Order_in.setBillingAddress(Address_in);
Order_in.setCreationDate(new GregorianCalendar(2008,0,1,11,11));
Order_in.setViewedOn(new GregorianCalendar(2008,0,2,12,00));
Order_in.setAttributes(new TAttribute[]{OrderAttr_in});
TLineItemContainerIn lineItemContainer = new TLineItemContainerIn();
lineItemContainer.setCurrencyID("EUR");
lineItemContainer.setPaymentMethod("PaymentMethods/Invoice");
lineItemContainer.setShippingMethod("ShippingMethods/Express");
lineItemContainer.setTaxArea("/TaxMatrixGermany/EU");
lineItemContainer.setTaxModel("gross");
lineItemContainer.setProductLineItems(new TProductLineItemIn[]{
new TProductLineItemIn("Products/ho_1112105010", (float)10),
//new TProductLineItemIn("Products/de_3203104010", (float)10),
});
Order_in.setLineItemContainer(lineItemContainer);
// init order update data
Order_up.setPath(OrderPath);
Order_up.setBillingAddress(Address_up);
Order_up.setCreationDate(new GregorianCalendar(2008,0,1,11,11));
Order_up.setInProcessOn(new GregorianCalendar(2008,0,3,12,00));
Order_up.setAttributes(new TAttribute[]{OrderAttr_up});
TExists_Return[] Orders_exists_out = orderService.exists(new String[]{OrderPath});
if( Orders_exists_out[0].getExists() ) {
TDelete_Return[] Orders_delete_out = orderService.delete(new String[]{OrderPath});
assertEquals("delete result set", 1, Orders_delete_out.length);
assertNoError(Orders_delete_out[0].getError());
}
}
/**
* Create a Order and check if the creation was successful
*/
public void testCreate() {
TCreate_Return[] Orders_create_out = orderService.create(new TCreate_Input[]{Order_in});
assertEquals("create result set", 1, Orders_create_out.length);
assertEquals("created?", true, Orders_create_out[0].getCreated());
assertNoError(Orders_create_out[0].getError());
}
/**
* Update a Order and check if the update was successful
*/
public void testUpdate() {
TUpdate_Return[] Orders_update_out = orderService.update(new TUpdate_Input[]{Order_up});
assertEquals("update result set", 1, Orders_update_out.length);
assertEquals("updated?", true, Orders_update_out[0].getUpdated());
assertNoError(Orders_update_out[0].getError());
}
/**
* Retrieve information about an Order. Check if the returned data are equal to
* the data of create or update call
*
* @param isAlreadyUpdated if true check against update data, else against create data
*/
public void testGetInfo(boolean isAlreadyUpdated) {
TGetInfo_Return[] Orders_info_out = orderService.getInfo(Orders, OrderAttributes, AddressAttributes, ItemAttributes, null);
assertEquals("exists result set", 1, Orders_info_out.length);
TGetInfo_Return Order_info_out = Orders_info_out[0];
assertEquals("Alias", Alias, Order_info_out.getAlias());
assertThat(Order_info_out.getCustomer(), endsWith(Order_in.getCustomer()));
assertNoError(Orders_info_out[0].getError());
TAddressNamed Address_out = Order_info_out.getBillingAddress();
assertEquals("EMail", Address_in.getEMail(), Address_out.getEMail());
if (isAlreadyUpdated) {
// check updated order data
assertEquals("InProcessOn", Order_up.getInProcessOn().getTime(), Order_info_out.getInProcessOn().getTime());
assertEquals("Comment", Order_up.getAttributes()[0].getValue(), Order_info_out.getAttributes()[0].getValue());
// check updated address
assertEquals("FirstName", Address_up.getFirstName(), Address_out.getFirstName());
assertEquals("LastName", Address_up.getLastName(), Address_out.getLastName());
assertEquals("Street", Address_up.getStreet(), Address_out.getStreet());
assertEquals("Street2", Address_up.getStreet2(), Address_out.getStreet2());
assertEquals("CodePorte", Address_up.getCodePorte(), Address_out.getCodePorte());
} else {
// check order data created without update
assertEquals("ViewedOn", Order_in.getViewedOn().getTime(), Order_info_out.getViewedOn().getTime());
assertEquals("CreationDate", Order_in.getCreationDate().getTime(), Order_info_out.getCreationDate().getTime());
assertEquals("Comment", Order_in.getAttributes()[0].getValue(), Order_info_out.getAttributes()[0].getValue());
// check created address
assertEquals("FirstName", Address_in.getFirstName(), Address_out.getFirstName());
assertEquals("LastName", Address_in.getLastName(), Address_out.getLastName());
assertEquals("Street", Address_in.getStreet(), Address_out.getStreet());
assertEquals("Street2", Address_in.getStreet2(), Address_out.getStreet2());
assertEquals("CodePorte", Address_in.getCodePorte(), Address_out.getCodePorte());
}
assertEquals("TaxArea", Order_in.getLineItemContainer().getTaxArea() , Order_info_out.getLineItemContainer().getTaxArea() );
assertEquals("TaxModel", Order_in.getLineItemContainer().getTaxModel() , Order_info_out.getLineItemContainer().getTaxModel() );
assertEquals("CurrencyID", Order_in.getLineItemContainer().getCurrencyID() , Order_info_out.getLineItemContainer().getCurrencyID() );
TProductLineItemIn refLineItem = Order_in.getLineItemContainer().getProductLineItems()[0];
TBaseLineItem[] AllLineItems = Order_info_out.getLineItemContainer().getAllBaseLineItems();
for (TBaseLineItem tBaseLineItem : AllLineItems) {
if ( "Products/" + tBaseLineItem.getSKU() == refLineItem.getProduct() ) {
assertEquals("base line item is a product", "LineItemProduct", tBaseLineItem.getClass());
assertEquals("base line item quantity", refLineItem.getQuantity(), tBaseLineItem.getQuantity(), 0.0f);
}
}
}
/**
* Delete a Order and check if no error occured.
*/
public void testDelete() {
TDelete_Return[] Orders_delete_out = orderService.delete(new String[]{OrderPath});
assertEquals("delete result set", 1, Orders_delete_out.length);
assertNoError(Orders_delete_out[0].getError());
}
/**
* test exists method
* @param expected if false, test is successful if the Order does NOT exists
*/
public void testExists(boolean expected) {
TExists_Return[] Orders_exists_out = orderService.exists(new String[]{OrderPath});
assertEquals("exists result set", 1, Orders_exists_out.length);
assertEquals("exists?", expected, Orders_exists_out[0].getExists());
assertNoError(Orders_exists_out[0].getError());
}
/**
* Test if a Order is found by Alias
*/
public void testFind() {
TFind_Input searchParameters = new TFind_Input();
searchParameters.setAlias(Alias);
searchParameters.setIsViewed(true);
String[] Orders_find_out = orderService.find(searchParameters);
assertEquals("find result set", 1, Orders_find_out.length);
assertThat(Orders_find_out[0], endsWith(OrderPath));
}
/**
* Test if a Order is found by Customer
*/
public void testFindCustomerOrder() {
TFind_Input searchParameters = new TFind_Input();
searchParameters.setCustomer(Customer);
String[] Orders_find_out = orderService.find(searchParameters);
assertTrue("find result set", Orders_find_out.length >= 1 );
}
/**
* runs all tests -- currently broken!
*/
@Test
public void testAll() {
testCreate();
testExists(true);
testFind();
testFindCustomerOrder();
testGetInfo(false);
testUpdate();
testGetInfo(true);
testDelete();
testExists(false);
}
}