blob: 2d02c556baaf77548bb92e5095d2921750ac9fd7 [file] [log] [blame]
/*******************************************************************************
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 org.ofbiz.accounting.thirdparty.clearcommerce;
import java.math.BigDecimal;
import java.util.Map;
import junit.framework.TestCase;
import org.ofbiz.base.util.Debug;
import org.ofbiz.base.util.UtilMisc;
import org.ofbiz.entity.GenericValue;
import org.ofbiz.service.GenericServiceException;
import org.ofbiz.service.ModelService;
import org.ofbiz.service.testtools.OFBizTestCase;
public class CCServicesTest extends OFBizTestCase {
public static final String module = CCServicesTest.class.getName();
// test data
protected GenericValue emailAddr = null;
protected String orderId = null;
protected GenericValue creditCard = null;
protected GenericValue billingAddress = null;
protected GenericValue shippingAddress = null;
protected Map<String, Object> pbOrder = null;
protected BigDecimal creditAmount = null;
protected String configFile = null;
public CCServicesTest(String name) {
super(name);
}
@Override
protected void setUp() throws Exception {
// populate test data
configFile = "paymentTest.properties";
creditAmount = new BigDecimal("234.00");
emailAddr = delegator.makeValue("ContactMech", UtilMisc.toMap("infoString","test@hansbakker.com"));
orderId = "testOrder1000";
creditCard = delegator.makeValue("CreditCard", UtilMisc.toMap("cardType","CCT_VISA",
"expireDate","12/2008", // mm/yyyy, gets converted to mm/yy
"cardNumber","4111111111111111"));
billingAddress = delegator.makeValue("PostalAddress", UtilMisc.toMap("toName","The customer Name",
"address1","The customer billingAddress1",
"address2","The customer billingAddress2",
"city","The customer city",
"stateProvinceGeoId", "NLD"));
shippingAddress = delegator.makeValue("PostalAddress", UtilMisc.toMap("toName","The customer Name",
"address1","The customer shippingStreet1",
"address2","The customer shippingStreet2",
"city","The customer city",
"stateProvinceGeoId", "NLD",
"postalCode","12345"));
pbOrder = UtilMisc.<String, Object>toMap("OrderFrequencyCycle", "M",
"OrderFrequencyInterval", "3",
"TotalNumberPayments", "4");
}
/*
* Check the authorisation
*/
public void testAuth() throws Exception{
Debug.logInfo("=====[testAuth] starting....", module);
try {
Map<String, Object> serviceInput = UtilMisc.<String, Object>toMap("paymentConfig", configFile,
"billToEmail", emailAddr,
"creditCard", creditCard,
"billingAddress", billingAddress,
"shippingAddress", shippingAddress,
"orderId", orderId
);
serviceInput.put("processAmount", new BigDecimal("200.00"));
// run the service (make sure in payment
Map<String, Object> result = dispatcher.runSync("clearCommerceCCAuth",serviceInput);
// verify the results
String responseMessage = (String) result.get(ModelService.RESPONSE_MESSAGE);
Debug.logInfo("[testCCAuth] responseMessage: " + responseMessage, module);
TestCase.assertEquals("Service result is success", ModelService.RESPOND_SUCCESS, responseMessage);
if (((Boolean) result.get("authResult")).equals(new Boolean(false))) { // returnCode ok?
Debug.logInfo("[testAuth] Error Messages from ClearCommerce: " + result.get("internalRespMsgs"), module);
TestCase.fail("Returned messages:" + result.get("internalRespMsgs"));
}
} catch (GenericServiceException ex) {
TestCase.fail(ex.getMessage());
}
}
/*
* Check the credit action: to deduct a certain amount of a credit card.
*/
public void testCredit() throws Exception{
Debug.logInfo("=====[testCCredit] starting....", module);
try {
Map<String, Object> serviceMap = UtilMisc.<String, Object>toMap("paymentConfig", configFile,
"orderId", orderId,
"creditAmount", creditAmount,
"billToEmail", emailAddr,
"creditCard", creditCard,
"creditAmount", new BigDecimal("200.00"));
// run the service
Map<String, Object> result = dispatcher.runSync("clearCommerceCCCredit",serviceMap);
// verify the results
String responseMessage = (String) result.get(ModelService.RESPONSE_MESSAGE);
Debug.logInfo("[testCCCredit] responseMessage: " + responseMessage, module);
TestCase.assertEquals("Service result is success", ModelService.RESPOND_SUCCESS, responseMessage);
if (((Boolean) result.get("creditResult")).equals(new Boolean(false))) { // returnCode ok?
Debug.logInfo("[testCCCredit] Error Messages from ClearCommerce: " + result.get("internalRespMsgs"), module);
TestCase.fail("Returned messages:" + result.get("internalRespMsgs"));
}
} catch (GenericServiceException ex) {
TestCase.fail(ex.getMessage());
}
}
/*
* Test Purchase subscription
*/
public void testPurchaseSubscription() throws Exception {
Debug.logInfo("=====[testPurchaseSubscription] starting....", module);
try {
Map<String, Object> serviceMap = UtilMisc.<String, Object>toMap("paymentConfig", configFile,
"orderId", orderId,
"creditAmount", creditAmount,
"billToEmail", emailAddr,
"creditCard", creditCard,
"pbOrder", pbOrder); // if supplied, the crediting is for a subscription and credit by period is managed by ClearCommerce
serviceMap.put("creditAmount", new BigDecimal("200.00"));
// run the service
Map<String, Object> result = dispatcher.runSync("clearCommerceCCCredit", serviceMap);
// verify the results
String responseMessage = (String) result.get(ModelService.RESPONSE_MESSAGE);
Debug.logInfo("[testPurchaseDescription] responseMessage: " + responseMessage, module);
TestCase.assertEquals("Service result is success", ModelService.RESPOND_SUCCESS, responseMessage); // service completed ok?
if (((Boolean) result.get("creditResult")).equals(new Boolean(false))) { // returnCode ok?
Debug.logInfo("[testPurchaseSubscription] Error Messages from ClearCommerce: " + result.get("internalRespMsgs"), module);
TestCase.fail("Returned messages:" + result.get("internalRespMsgs"));
}
} catch (GenericServiceException ex) {
TestCase.fail(ex.getMessage());
}
}
/*
* Test Free subscription
*/
public void testFreeSubscription() throws Exception {
// not communicate with CC.
}
/*
* Test cancel subscription
*/
public void testCancelSubscription() throws Exception {
/* from the API doc:
After the Engine receives and processes an internally-managed periodic billing order, the
order cannot be modified. An order can only be cancelled. If, for example, the credit card
associated with a recurring order expires and a payment is rejected, the order must be
cancelled. If the order is to be resumed, a new recurring order must be submitted.
--> Orders are cancelled by using the Store Administrator Tool.
So cannot by program.
*/
}
/*
* Test Query subscription transaction status
*/
public void testCCReport() throws Exception{
Debug.logInfo("=====[testReport] starting....", module);
try {
Map<String, Object> serviceMap = UtilMisc.<String, Object>toMap("orderId", "4488668f-2db0-3002-002b-0003ba1d84d5",
"paymentConfig", configFile);
// run the service
Map<String, Object> result = dispatcher.runSync("clearCommerceCCReport",serviceMap);
// verify the results
String responseMessage = (String) result.get(ModelService.RESPONSE_MESSAGE);
Debug.logInfo("[testPurchaseDescription] responseMessage: " + responseMessage, module);
TestCase.assertEquals("Reporting service", ModelService.RESPOND_SUCCESS, responseMessage); // service completed ok?
if (((Boolean) result.get("creditResult")).equals(new Boolean(false))) { // returnCode ok?
Debug.logInfo("[testReport] Error Messages from ClearCommerce: " + result.get("internalRespMsgs"), module);
TestCase.fail("Returned messages:" + result.get("internalRespMsgs"));
}
} catch (GenericServiceException ex) {
TestCase.fail(ex.getMessage());
}
}
}