package com.paypal.core; import java.io.IOException; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; import java.util.Properties; import junit.framework.Assert; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import org.testng.log4testng.Logger; import com.paypal.core.DefaultSOAPAPICallHandler.XmlNamespaceProvider; import com.paypal.core.message.XMLMessageSerializer; public class DefaultSOAPAPICallHandlerTest { DefaultSOAPAPICallHandler defaultHandler; private static Logger logger = Logger.getLogger(DefaultSOAPAPICallHandlerTest.class); @BeforeClass public void beforeClass() throws IOException { Properties props; props = new Properties(); props.load(this.getClass() .getResourceAsStream("/sdk_config.properties")); Map<String, String> cMap = SDKUtil.constructMap(props); defaultHandler = new DefaultSOAPAPICallHandler( "requestEnvelope.errorLanguage=en_US&baseAmountList.currency(0).code=USD&baseAmountList.currency(0).amount=2.0&convertToCurrencyList.currencyCode(0)=GBP", "", "", cMap); } @AfterClass public void afterClass() { defaultHandler = null; } @Test public void getEndPointTest() { Assert.assertEquals("https://svcs.sandbox.paypal.com/", defaultHandler.getEndPoint()); } @Test(dependsOnMethods = { "getEndPointTest" }) public void getCredentialTest() { Assert.assertEquals(null, defaultHandler.getCredential()); } @Test(dependsOnMethods = { "getCredentialTest" }) public void getHeaderMapTest() { Assert.assertEquals(HashMap.class, defaultHandler.getHeaderMap() .getClass()); } @Test(dependsOnMethods = { "getHeaderMapTest" }) public void getHeaderStringTest() { Assert.assertEquals("", defaultHandler.getHeaderString()); } @Test(dependsOnMethods = { "getHeaderStringTest" }) public void getNamespacesTest() { Assert.assertEquals("", defaultHandler.getNamespaces()); } @Test(dependsOnMethods = { "getNamespacesTest" }) public void getPayLoadTest() { Assert.assertEquals( "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" ><soapenv:Header></soapenv:Header><soapenv:Body>requestEnvelope.errorLanguage=en_US&baseAmountList.currency(0).code=USD&baseAmountList.currency(0).amount=2.0&convertToCurrencyList.currencyCode(0)=GBP</soapenv:Body></soapenv:Envelope>", defaultHandler.getPayLoad()); } @Test(dependsOnMethods = { "getPayLoadTest" }) public void setHeaderStringTest() { defaultHandler.setHeaderString("headerString"); Assert.assertEquals("headerString", defaultHandler.getHeaderString()); } @Test(dependsOnMethods = { "setHeaderStringTest" }) public void setNamespacesTest() { defaultHandler.setNamespaces("namespaces"); Assert.assertEquals("namespaces", defaultHandler.getNamespaces()); } @Test(dependsOnMethods = { "setHeaderStringTest" }, expectedExceptions = IllegalArgumentException.class) public void domNullConfigMapTest() { BaseAPIContext baseAPIContext = new BaseAPIContext(); Map<String, String> configurationMap = null; new DefaultSOAPAPICallHandler(new SampleBody(), baseAPIContext, configurationMap, "DoDirectPayment"); } @Test(dependsOnMethods = { "domNullConfigMapTest" }) public void domEndpointTest() { BaseAPIContext baseAPIContext = new BaseAPIContext(); Map<String, String> configurationMap = new HashMap<String, String>(); configurationMap.put("service.EndPoint", "https://api-3t.sandbox.paypal.com/2.0"); DefaultSOAPAPICallHandler defHandler = new DefaultSOAPAPICallHandler( new SampleBody(), baseAPIContext, configurationMap, "DoDirectPayment"); Assert.assertEquals("https://api-3t.sandbox.paypal.com/2.0", defHandler.getEndPoint()); } @Test(dependsOnMethods = { "domEndpointTest" }) public void domPayloadTest() { DefaultSOAPAPICallHandler .setXmlNamespaceProvider(new XmlNamespacePrefixProvider()); BaseAPIContext baseAPIContext = new BaseAPIContext(); baseAPIContext.setSOAPHeader(new SampleHeader()); Map<String, String> configurationMap = new HashMap<String, String>(); configurationMap.put("service.EndPoint", "https://api-3t.sandbox.paypal.com/2.0"); baseAPIContext.setConfigurationMap(configurationMap); DefaultSOAPAPICallHandler defHandler = new DefaultSOAPAPICallHandler( new SampleBody(), baseAPIContext, null, "DoDirectPayment"); String payload = defHandler.getPayLoad().trim(); String expectedPayload = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:cc=\"urn:ebay:apis:CoreComponentTypes\" xmlns:ebl=\"urn:ebay:apis:eBLBaseComponents\" xmlns:ed=\"urn:ebay:apis:EnhancedDataTypes\" xmlns:ns=\"urn:ebay:api:PayPalAPI\" xmlns:wsdl=\"http://schemas.xmlsoap.org/wsdl/\" xmlns:wsdlsoap=\"http://schemas.xmlsoap.org/wsdl/soap/\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">" + "<soapenv:Header>" + "<ns:RequesterCredentials>" + "<ebl:Credentials>" + "<ebl:Username>jb-us-seller_api1.paypal.com</ebl:Username>" + "</ebl:Credentials>" + "</ns:RequesterCredentials>" + "</soapenv:Header>" + "<soapenv:Body>" + "<ns:DoDirectPaymentReq>" + "<ns:DoDirectPaymentRequest>" + "<ebl:Version>98.0</ebl:Version>" + "<ebl:DoDirectPaymentRequestDetails>" + "<ebl:CreditCard>" + "<ebl:CreditCardType>Visa</ebl:CreditCardType>" + "<ebl:CreditCardNumber>4202297003827029</ebl:CreditCardNumber>" + "<ebl:CVV2>962</ebl:CVV2>" + "</ebl:CreditCard>" + "</ebl:DoDirectPaymentRequestDetails>" + "</ns:DoDirectPaymentRequest>" + "</ns:DoDirectPaymentReq>" + "</soapenv:Body>" + "</soapenv:Envelope>"; Assert.assertEquals(expectedPayload, payload); } @Test(dependsOnMethods = { "domPayloadTest" }) public void domPayloadNoHeaderTest() { DefaultSOAPAPICallHandler .setXmlNamespaceProvider(new XmlNamespacePrefixProvider()); BaseAPIContext baseAPIContext = new BaseAPIContext(); Map<String, String> configurationMap = new HashMap<String, String>(); configurationMap.put("service.EndPoint", "https://api-3t.sandbox.paypal.com/2.0"); baseAPIContext.setConfigurationMap(configurationMap); DefaultSOAPAPICallHandler defHandler = new DefaultSOAPAPICallHandler( new SampleBody(), baseAPIContext, null, "DoDirectPayment"); String payload = defHandler.getPayLoad().trim(); Assert.assertEquals(true, payload.contains("<soapenv:Header/>")); } @Test(dependsOnMethods = { "domPayloadNoHeaderTest" }, expectedExceptions = RuntimeException.class) public void domErrBodyPayloadTest() { DefaultSOAPAPICallHandler .setXmlNamespaceProvider(new XmlNamespacePrefixProvider()); BaseAPIContext baseAPIContext = new BaseAPIContext(); baseAPIContext.setSOAPHeader(new SampleHeader()); Map<String, String> configurationMap = new HashMap<String, String>(); configurationMap.put("service.EndPoint", "https://api-3t.sandbox.paypal.com/2.0"); baseAPIContext.setConfigurationMap(configurationMap); DefaultSOAPAPICallHandler defHandler = new DefaultSOAPAPICallHandler( new SampleNoNSBody(), baseAPIContext, null, "DoDirectPayment"); defHandler.getPayLoad(); } @Test(dependsOnMethods = { "domErrBodyPayloadTest" }) public void getPayloadForEmptyRawPayloadTest() { defaultHandler = new DefaultSOAPAPICallHandler("", "", "", new HashMap<String, String>()); Assert.assertEquals( "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" ><soapenv:Header></soapenv:Header><soapenv:Body></soapenv:Body></soapenv:Envelope>", defaultHandler.getPayLoad()); } private static class XmlNamespacePrefixProvider implements XmlNamespaceProvider { private Map<String, String> namespaceMap; public XmlNamespacePrefixProvider() { namespaceMap = new LinkedHashMap<String, String>(); namespaceMap.put("xml", "http://www.w3.org/XML/1998/namespace"); namespaceMap.put("ed", "urn:ebay:apis:EnhancedDataTypes"); namespaceMap.put("cc", "urn:ebay:apis:CoreComponentTypes"); namespaceMap.put("ebl", "urn:ebay:apis:eBLBaseComponents"); namespaceMap.put("xs", "http://www.w3.org/2001/XMLSchema"); namespaceMap.put("wsdlsoap", "http://schemas.xmlsoap.org/wsdl/soap/"); namespaceMap.put("ns", "urn:ebay:api:PayPalAPI"); namespaceMap.put("SOAP-ENC", "http://schemas.xmlsoap.org/soap/encoding/"); namespaceMap.put("wsdl", "http://schemas.xmlsoap.org/wsdl/"); } public Map<String, String> getNamespaceMap() { return namespaceMap; } } private static class SampleHeader implements XMLMessageSerializer { public String toXMLString() { return "<ns:RequesterCredentials><ebl:Credentials><ebl:Username>jb-us-seller_api1.paypal.com</ebl:Username></ebl:Credentials></ns:RequesterCredentials>"; } } private static class SampleBody implements XMLMessageSerializer { public String toXMLString() { return "<ns:DoDirectPaymentReq><ns:DoDirectPaymentRequest><ebl:Version>98.0</ebl:Version><ebl:DoDirectPaymentRequestDetails><ebl:CreditCard><ebl:CreditCardType>Visa</ebl:CreditCardType><ebl:CreditCardNumber>4202297003827029</ebl:CreditCardNumber><ebl:CVV2>962</ebl:CVV2></ebl:CreditCard></ebl:DoDirectPaymentRequestDetails></ns:DoDirectPaymentRequest></ns:DoDirectPaymentReq>"; } } private static class SampleNoNSBody implements XMLMessageSerializer { public String toXMLString() { return "<ns:DoDirectPaymentReq><ns:DoDirectPaymentRequest><ebl:Version>98.0</ebl:Version><ebl:DoDirectPaymentRequestDetails><ebl:CreditCard><ebl:CreditCardType>Visa</ebl:CreditCardType><ebl:CreditCardNumber>4202297003827029</ebl:CreditCardNumber><ebl:CVV2>962</ebl:CVV2></ebl:CreditCard></ebl:DoDirectPaymentRequestDetails></ns:DoDirectPaymentRequest>"; } } }