package com.shopizer.modules.shipping.canadapost.test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Properties;
import javax.inject.Inject;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.TestExecutionListeners;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.support.DependencyInjectionTestExecutionListener;
import com.salesmanager.core.model.common.Delivery;
import com.salesmanager.core.model.reference.country.Country;
import com.salesmanager.core.model.reference.zone.Zone;
import com.salesmanager.core.model.shipping.PackageDetails;
import com.salesmanager.core.model.shipping.ShippingConfiguration;
import com.salesmanager.core.model.shipping.ShippingOption;
import com.salesmanager.core.model.shipping.ShippingOrigin;
import com.salesmanager.core.model.shipping.ShippingQuote;
import com.salesmanager.core.model.system.IntegrationConfiguration;
import com.salesmanager.core.model.system.IntegrationModule;
import com.salesmanager.core.model.system.ModuleConfig;
import com.shopizer.modules.shipping.canadapost.CanadaPostQuoteModule;
import junit.framework.Assert;
/**
* Create a developer account on canada post web site
* generate your API developer's key
* https://www.canadapost.ca/cpo/mc/business/productsservices/developers/services/rating/default.jsf
* @author carlsamson
*
*/
@ContextConfiguration(locations = {
"classpath:spring/spring-context-test.xml"
})
@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners({
DependencyInjectionTestExecutionListener.class
})
public class ShippingCanadaPostTestCase {
@Inject
CanadaPostQuoteModule canadapost;
@Inject
@Qualifier("canadapost-properties")
private Properties userProps;
@Test
public void getCanadaPostShippingQuote() throws Exception {
String username = userProps.getProperty("username");
String password = userProps.getProperty("password");
String mailedBy = userProps.getProperty("mailBy");
ShippingQuote quote = new ShippingQuote();
PackageDetails pDetail = new PackageDetails();
pDetail.setShippingHeight(10);
pDetail.setShippingLength(10);
pDetail.setShippingWeight(10);
pDetail.setShippingWidth(10);
List<PackageDetails> details = new ArrayList<PackageDetails>();
details.add(pDetail);
Delivery delivery = new Delivery();
delivery.setAddress("358 Du Languedoc");
delivery.setCity("Boucherville");
delivery.setPostalCode("J4B 8J9");
Country country = new Country();
country.setIsoCode("CA");
country.setName("Canada");
delivery.setCountry(country);
Zone zone = new Zone();
zone.setCode("QC");
zone.setName("Quebec");
delivery.setZone(zone);
ShippingOrigin origin = new ShippingOrigin();
origin.setAddress("7070, avenue Henri-Julien");
origin.setCity("Montreal");
origin.setPostalCode("H2S 3S3");
origin.setZone(zone);
origin.setCountry(country);
IntegrationModule module = new IntegrationModule();
ModuleConfig moduleConfigTest = new ModuleConfig();
moduleConfigTest.setEnv("TEST");
moduleConfigTest.setScheme("https");
moduleConfigTest.setHost("ct.soa-gw.canadapost.ca");
moduleConfigTest.setPort("443");
moduleConfigTest.setUri("/rs/ship/price");
ModuleConfig moduleConfigProd = new ModuleConfig();
moduleConfigProd.setEnv("PROD");
moduleConfigProd.setScheme("https");
moduleConfigProd.setHost("soa-gw.canadapost.ca");
moduleConfigProd.setPort("443");
moduleConfigProd.setUri("/rs/ship/price");
Map<String,ModuleConfig> moduleConfigs = new HashMap<String,ModuleConfig>();
moduleConfigs.put("TEST", moduleConfigTest);
moduleConfigs.put("PROD", moduleConfigProd);
module.setModuleConfigs(moduleConfigs);
module.setCode("canadapost");
module.setModuleConfigs(moduleConfigs);
IntegrationConfiguration configuration = new IntegrationConfiguration();
configuration.setActive(true);
configuration.setEnvironment("TEST");
Map<String,String> integrationKeys= new HashMap<String,String>();
integrationKeys.put("username", username);
integrationKeys.put("password", password);
integrationKeys.put("client", mailedBy);
configuration.setIntegrationKeys(integrationKeys);
Map<String,List<String>> integrationOptions= new HashMap<String,List<String>>();
/**
* DOM.RP Regular Parcel
DOM.EP Expedited Parcel
DOM.XP Xpresspost
DOM.XP.CERT Xpresspost Certified
DOM.PC Priority
DOM.DT Delivered Tonight
DOM.LIB Library Books
USA.EP Expedited Parcel USA
USA.PW.ENV Priority Worldwide Envelope USA
USA.PW.PAK Priority Worldwide pak USA
USA.PW.PARCEL Priority Worldwide Parcel USA
USA.SP.AIR Small Packet USA Air
USA.TP Tracked Packet – USA
USA.TP.LVM Tracked Packet – USA (LVM)
(large volume mailers)
USA.XP Xpresspost USA
INT.XP Xpresspost International
INT.IP.AIR International Parcel Air
INT.IP.SURF International Parcel Surface
INT.PW.ENV Priority Worldwide Envelope Int’l
INT.PW.PAK Priority Worldwide pak Int’l
INT.PW.PARCEL Priority Worldwide parcel Int’l
INT.SP.AIR Small Packet International Air
INT.SP.SURF Small Packet International Surface
INT.TP Tracked Packet – International
*/
List<String> domestic = new ArrayList<String>();
domestic.add("DOM.RP");
integrationOptions.put("services-domestic", domestic);
configuration.setIntegrationOptions(integrationOptions);
ShippingConfiguration shippingConfiguration = new ShippingConfiguration();
List<ShippingOption> options = canadapost.getShippingQuotes(quote, details, null, delivery, origin, null, configuration, module, shippingConfiguration, Locale.CANADA);
Assert.assertNotNull("Options should not be empty", options);
for(ShippingOption opt : options) {
System.out.println(opt.getOptionCode() + " " + opt.getOptionPrice().doubleValue());
}
System.out.println("Done ...");
}
}