package de.epages.ws.basket; import static de.epages.ws.common.AssertNoError.assertNoError; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.math.BigInteger; import org.junit.Before; import org.junit.Test; import de.epages.ws.ShopWebServiceTestConfiguration; import de.epages.ws.basket.model.TCreate_Input; import de.epages.ws.basket.model.TCreate_Return; import de.epages.ws.basket.model.TDelete_Return; import de.epages.ws.basket.model.TExists_Return; import de.epages.ws.basket.model.TGetInfo_Return; import de.epages.ws.basket.model.TLineItemContainerIn; import de.epages.ws.basket.model.TProductLineItemIn; import de.epages.ws.basket.model.TProductLineItemOut; import de.epages.ws.basket.model.TUpdateLineItem_Input; import de.epages.ws.basket.model.TUpdateLineItem_Return; import de.epages.ws.basket.model.TUpdate_Input; import de.epages.ws.basket.model.TUpdate_Return; import de.epages.ws.common.model.TAttribute; import de.epages.ws.form.model.TFormError; import de.epages.ws.product12.ProductServiceClientImpl; import de.epages.ws.shop3.model.TAddressNamed; /** * A JUnit TestSuite to test epages Basket WebServices. */ public class BasketServiceTest { private static final BasketServiceClientImpl basketService = new BasketServiceClientImpl(new ShopWebServiceTestConfiguration()); private static final ProductServiceClientImpl productService = new ProductServiceClientImpl(new ShopWebServiceTestConfiguration()); private TCreate_Input Basket_in; private TUpdate_Input Basket_up; private TAttribute BasketAttr_in; private TAttribute BasketAttr_up; private TAddressNamed Address_in; private TAddressNamed Address_up; private String BasketPath; private String[] Baskets; private String[] BasketAttributes = new String[] { "IsAddressOK", "WebUrl", "PickupToken" }; private String[] AddressAttributes = new String[] { "JobTitle" /* * ,"Salutation" */}; private 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() { Basket_in = new TCreate_Input(); Basket_up = new TUpdate_Input(); BasketAttr_in = new TAttribute("IsAddressOK", "1", null, null); BasketAttr_up = new TAttribute("IsAddressOK", "0", null, null); Address_in = new TAddressNamed(); // init input address data Address_in.setEMail("java_test-1@epages.de"); Address_in.setFirstName("Klaus"); Address_in.setLastName("Klaussen"); Address_in.setCity("Klausdorf"); Address_in.setZipcode("08151"); Address_in.setCountryID(BigInteger.valueOf(276)); Address_in.setStreet("Musterstraße 2"); Address_in.setStreet2("Ortsteil Niederfingeln"); Address_in.setAttributes(new TAttribute[] { new TAttribute("JobTitle", "best Job", null, null), new TAttribute("Salutation", "Dr.", null, null), }); Address_up = Address_in; // just update some fields Address_up.setFirstName("Hans"); Address_up.setLastName("Hanssen"); Address_up.setStreet("Musterstraße 2b"); Address_up.setStreet2("Ortsteil Oberfingeln"); Basket_in.setBillingAddress(Address_in); Basket_in.setAttributes(new TAttribute[] { BasketAttr_in }); TLineItemContainerIn lineItemContainer = new TLineItemContainerIn(); lineItemContainer.setCurrencyID("EUR"); lineItemContainer.setPaymentMethod("PaymentMethods/Invoice"); lineItemContainer.setShippingMethod("ShippingMethods/Express"); lineItemContainer.setTaxArea("/TaxMatrixGermany/EU"); lineItemContainer.setTaxModel("gross"); String productGuid = productService.getInfo(new String[]{"Products/ho_1112105010"}, new String[]{"GUID"})[0].getAttributes()[0].getValue(); assertNotNull(productGuid); lineItemContainer.setProductLineItems(new TProductLineItemIn[] { new TProductLineItemIn(productGuid, (float) 10) }); Basket_in.setLineItemContainer(lineItemContainer); // init order update data Basket_up.setBillingAddress(Address_up); Basket_up.setAttributes(new TAttribute[] { BasketAttr_up }); // delete the test order if it exists TExists_Return[] Baskets_exists_out = basketService.exists(new String[] { BasketPath }); if (Baskets_exists_out[0].getExists()) { TDelete_Return[] Baskets_delete_out = basketService.delete(new String[] { BasketPath }); assertNoError(Baskets_delete_out[0].getError()); } } /** * Create a Basket and check if the creation was successful */ public void testCreate() { TCreate_Return[] Baskets_create_out = basketService.create(new TCreate_Input[] { Basket_in }); assertNoError(Baskets_create_out[0].getError()); assertNull("No FormErrors", Baskets_create_out[0].getFormErrors()); assertEquals("created?", true, Baskets_create_out[0].getCreated()); assertNotNull("Path not null", Baskets_create_out[0].getPath()); BasketPath = Baskets_create_out[0].getPath(); } /** * Create a Basket without passing optional fields, and check if the * creation was successful */ public void testCreateWithDefaults() { TCreate_Input basket_in = new TCreate_Input(); TCreate_Return[] Baskets_create_out = basketService.create(new TCreate_Input[] { basket_in }); assertNoError(Baskets_create_out[0].getError()); assertNull("No FormErrors", Baskets_create_out[0].getFormErrors()); assertEquals("created?", true, Baskets_create_out[0].getCreated()); assertNotNull("Path not null", Baskets_create_out[0].getPath()); } /** * Update a Basket and check if the update was successful */ public void testUpdate() { Basket_up.setPath(BasketPath); TUpdate_Return[] Baskets_update_out = basketService.update(new TUpdate_Input[] { Basket_up }); assertNoError(Baskets_update_out[0].getError()); assertNull("No FormErrors", Baskets_update_out[0].getFormErrors()); assertTrue("updated?", Baskets_update_out[0].getUpdated()); } /** * Update a Basket with a billing address and check if the update was * successful */ public void testUpdateWithFormError() { Basket_up.setPath(BasketPath); TUpdate_Return[] Baskets_update_out = basketService.update(new TUpdate_Input[] { Basket_up }); Baskets_update_out[0].setFormErrors(new TFormError[] { new TFormError() }); assertEquals("updateWithFormError resultset", Baskets_update_out[0].getFormErrors().length, 1); } /** * 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) { Baskets = new String[] { BasketPath }; TGetInfo_Return[] Baskets_info_out = basketService.getInfo(Baskets, BasketAttributes, AddressAttributes, ItemAttributes, null); assertEquals("exists result set", 1, Baskets_info_out.length); TGetInfo_Return Basket_info_out = Baskets_info_out[0]; assertNoError(Basket_info_out.getError()); assertNotNull(Basket_info_out.getAlias()); TAddressNamed Address_out = Basket_info_out.getBillingAddress(); assertEquals("EMail", Address_in.getEMail(), Address_out.getEMail()); TProductLineItemOut productLineItem = Basket_info_out.getLineItemContainer().getProductLineItems()[0]; assertEquals("/Units/piece", productLineItem.getOrderUnit()); if (isAlreadyUpdated) { // check updated order data assertEquals("IsAcceptCreditCheckOK", Basket_up.getAttributes()[0].getValue(), Basket_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("Quantity", 20f, productLineItem.getQuantity(), 0.0); } else { // check order data created without update assertEquals("IsAcceptCreditCheckOK", Basket_in.getAttributes()[0].getValue(), Basket_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("Quantity", 10f, productLineItem.getQuantity(), 0.0); } assertEquals("TaxArea", Basket_in.getLineItemContainer().getTaxArea(), Basket_info_out.getLineItemContainer().getTaxArea()); assertEquals("TaxModel", Basket_in.getLineItemContainer().getTaxModel(), Basket_info_out.getLineItemContainer().getTaxModel()); assertEquals("CurrencyID", Basket_in.getLineItemContainer().getCurrencyID(), Basket_info_out.getLineItemContainer().getCurrencyID()); // "IsAddressOK", "WebUrl", "PickupToken" assertNotNull("IsAddressOK", Basket_info_out.getAttributes()[0].getValue()); assertNotNull("WebUrl", Basket_info_out.getAttributes()[1].getValue()); assertNotNull("PickupToken", Basket_info_out.getAttributes()[2].getValue()); assertNotNull("Alias", productLineItem.getAlias()); assertNotNull("Name", productLineItem.getName()); assertNotNull("Product", productLineItem.getProduct()); assertNotNull("TaxClass", productLineItem.getTaxClass()); assertTrue("BasePrice", productLineItem.getBasePrice() > 0); assertTrue("LineItemPrice", productLineItem.getLineItemPrice() > 0); assertEquals("SKU", "ho_1112105010", productLineItem.getSKU()); } public void testUpdateLineItem() { TGetInfo_Return[] Baskets_info_out = basketService.getInfo(Baskets, BasketAttributes, AddressAttributes, ItemAttributes, null); assertNoError(Baskets_info_out[0].getError()); String lineitemAlias = Baskets_info_out[0].getLineItemContainer().getProductLineItems()[0].getAlias(); TUpdateLineItem_Input lineItem = new TUpdateLineItem_Input(lineitemAlias, 20f); TUpdateLineItem_Return[] updateLineItem = basketService.updateLineItem(BasketPath, new TUpdateLineItem_Input[] { lineItem }); assertEquals("updateLineItem resultset", updateLineItem.length, 1); assertNoError(updateLineItem[0].getError()); assertTrue("updated?", updateLineItem[0].getUpdated()); } /** * Delete a Basket and check if no error occured. */ public void testDelete() { TDelete_Return[] Basket_delete_out = basketService.delete(new String[] { BasketPath }); assertNoError(Basket_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[] Baskets_exists_out = basketService.exists(new String[] { BasketPath }); assertNoError(Baskets_exists_out[0].getError()); assertEquals("exists?", expected, Baskets_exists_out[0].getExists()); } /** * runs all tests */ @Test public void testAll() { testCreate(); testCreateWithDefaults(); testExists(true); testGetInfo(false); testUpdate(); testUpdateWithFormError(); testUpdateLineItem(); testGetInfo(true); testDelete(); testExists(false); } }