package de.epages.ws.orderdocument4;
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 org.junit.ClassRule;
import org.junit.Test;
import org.junit.rules.ExternalResource;
import de.epages.ws.ShopWebServiceTestConfiguration;
import de.epages.ws.orderdocument4.model.TCreate_Input;
import de.epages.ws.orderdocument4.model.TCreate_Return;
import de.epages.ws.orderdocument4.model.TDelete_Return;
import de.epages.ws.orderdocument4.model.TExists_Return;
import de.epages.ws.orderdocument4.model.TGetCreditNotes_Return;
import de.epages.ws.orderdocument4.model.TGetInfo_Return;
import de.epages.ws.orderdocument4.model.TGetInvoices_Return;
import de.epages.ws.orderdocument4.model.TGetPackingSlips_Return;
public class OrderDocumentServiceTest {
private static final OrderDocumentServiceClientImpl orderDocService = new OrderDocumentServiceClientImpl(new ShopWebServiceTestConfiguration());
private static final String Customer = "Customers/1001"; /* mmustermann */
private static final String Order = Customer + "/Orders/1002";
private static final String I = "Invoice";
private static final String P = "PackingSlip";
private static final String C = "CreditNote";
private static final String AliasI = "javaTest1-" + I;
private static final String AliasP = "javaTest1-" + P;
private static final String AliasC = "javaTest1-" + C;
private static final String ClassI = "/Classes/" + I;
private static final String ClassP = "/Classes/" + P;
private static final String ClassC = "/Classes/" + C;
private static final String Invoices = Order + "/" + I + "s/";
private static final String Packings = Order + "/" + P + "s/";
private static final String Credites = Order + "/" + C + "s/";
private static final String Invoice = Invoices + AliasI;
private static final String Packing = Packings + AliasP;
private static final String Creditn = Credites + AliasC;
private static final String[] Docs = new String[] { Invoice, Packing, Creditn };
private static final TCreate_Input Invoice_in = new TCreate_Input(AliasI, Order, ClassI, false, null);
private static final TCreate_Input Packing_in = new TCreate_Input(AliasP, Order, ClassP, false, null);
private static final TCreate_Input Creditn_in = new TCreate_Input(AliasC, Order, ClassC, false, null);
private static final TCreate_Input[] Docs_in = new TCreate_Input[] { Invoice_in, Packing_in, Creditn_in };
private static final String[] OrderAttributes = new String[] { "Comment" };
private static final String[] AddressAttributes = new String[] { "JobTitle" /* ,"Salutation" */};
private static final String[] LineAttributes = new String[]{"Alias"};
/**
* Sets all the required prerequisites for the tests. Will be called before and after
* the test are run.
*/
@ClassRule
public static final ExternalResource setUpObjects = new ExternalResource() {
protected void before() throws Throwable {
cleanupObjects();
};
protected void after() {
cleanupObjects();
};
private void cleanupObjects() {
// delete the test order documents if they exist
TExists_Return[] Doc_exists_out = orderDocService.exists(Docs);
for (TExists_Return exist : Doc_exists_out) {
if (exist.getExists()) {
TDelete_Return[] Doc_delete_out = orderDocService.delete(new String[] { exist.getPath() });
assertEquals("delete result set", 1, Doc_delete_out.length);
assertNoError(Doc_delete_out[0].getError());
}
}
}
};
/**
* Create Order Documents and check if the creation was successful
*/
public void testCreate() {
TCreate_Return[] Doc_create_out = orderDocService.create(Docs_in);
assertEquals("create result set", 3, Doc_create_out.length);
for (TCreate_Return create : Doc_create_out) {
assertNoError(create.getError());
assertTrue(create.getCreated());
}
}
/**
* Delete Order Documents and check if the deletion was successful
*/
public void testDelete() {
TDelete_Return[] Doc_delete_out = orderDocService.delete(Docs);
assertEquals("delete result set", 3, Doc_delete_out.length);
for (TDelete_Return del : Doc_delete_out) {
assertNoError(del.getError());
assertTrue(del.getDeleted());
}
}
/**
* Retrieve information about an OrderDocument. Check if the returned data
* are equal to the data of create call
*/
public void testGetInfo() {
TGetInfo_Return[] Doc_out = orderDocService.getInfo(Docs, OrderAttributes, AddressAttributes, LineAttributes, null);
assertEquals("get invoices result set", 3, Doc_out.length);
for (TGetInfo_Return document : Doc_out) {
assertThat(document.getOrder(), endsWith(Order));
String DocClass = document.get_class();
assertTrue("check order class " + DocClass + " one of( " + ClassI + ", " + ClassP + ", " + ClassC + ")",
DocClass.equals(ClassI) || DocClass.equals(ClassP) || DocClass.equals(ClassC));
if (DocClass.equals(ClassI)) {
assertThat(document.getPath(), endsWith(Invoice));
} else if (DocClass.equals(ClassP)) {
assertThat(document.getPath(), endsWith(Packing));
} else if (DocClass.equals(ClassC)) {
assertThat(document.getPath(), endsWith(Creditn));
}
}
}
/**
* Retrieve all invoices for an Order. Check if the returned data are equal
* to the data of create or update call
*/
public void testGetInvoices() {
TGetInvoices_Return[] Invoice_out = orderDocService.getInvoices(new String[] { Order });
assertEquals("get invoices result set", 1, Invoice_out.length);
for (TGetInvoices_Return order : Invoice_out) {
assertEquals("order path", Order, order.getOrder());
assertEquals("invoices result set", 1, order.getInvoices().length);
assertThat(order.getInvoices()[0], endsWith(Invoice));
}
}
/**
* Retrieve all PackingSlips for an Order. Check if the returned data are
* equal to the data of create or update call
*/
public void testGetPackingSlips() {
TGetPackingSlips_Return[] Packing_out = orderDocService.getPackingSlips(new String[] { Order });
assertEquals("get packing slips result set", 1, Packing_out.length);
for (TGetPackingSlips_Return order : Packing_out) {
assertEquals("order path", Order, order.getOrder());
assertEquals("packing slips result set", 1, order.getPackingSlips().length);
assertThat(order.getPackingSlips()[0], endsWith(Packing));
}
}
/**
* Retrieve all CreditNotes for an Order. Check if the returned data are
* equal to the data of create or update call
*/
public void testGetCreditNotes() {
TGetCreditNotes_Return[] Credits_out = orderDocService.getCreditNotes(new String[] { Order });
assertEquals("get packing slips result set", 1, Credits_out.length);
for (TGetCreditNotes_Return order : Credits_out) {
assertThat(order.getOrder(), endsWith(Order));
assertEquals("packing slips result set", 1, order.getCreditNotes().length);
assertThat(order.getCreditNotes()[0], endsWith(Creditn));
}
}
/**
* test exists method
*
* @param expected
* if false, test is successful if the Order Document does NOT
* exists
*/
public void testExists(boolean expected) {
TExists_Return[] Doc_exists_out = orderDocService.exists(Docs);
for (TExists_Return exist : Doc_exists_out) {
assertNoError(exist.getError());
assertEquals("exists?", expected, exist.getExists());
}
}
/**
* runs all tests
*/
@Test
public void testAll() {
testCreate();
testExists(true);
testGetInvoices();
testGetPackingSlips();
testGetCreditNotes();
testGetInfo();
testDelete();
testExists(false);
}
}