diff --git a/lib/WebGUI/Shop/ShipDriver/UPS.pm b/lib/WebGUI/Shop/ShipDriver/UPS.pm index e09abf308..f87febc53 100644 --- a/lib/WebGUI/Shop/ShipDriver/UPS.pm +++ b/lib/WebGUI/Shop/ShipDriver/UPS.pm @@ -9,6 +9,7 @@ use LWP; use Tie::IxHash; use Locales::Country qw/ en /; use Class::InsideOut qw/ :std /; +use Data::Dumper; public testMode => my %testMode; @@ -109,6 +110,9 @@ sub buildXML { }, Package => [], }; + if ($self->get('residentialIndicator') eq 'residential') { + $xmlRate->{Shipment}->{ShipTo}->{Address}->[0]->{ResidentialAddressIndicator} = ['']; + } my $packHash = $xmlRate->{Shipment}->{Package}; PACKAGE: foreach my $package (@{ $packages }) { my $weight = 0; @@ -137,9 +141,9 @@ sub buildXML { } return '' unless scalar @{ $packHash }; ##Nothing to calculate shipping for. $xml .= XMLout(\%xmlHash, - KeepRoot => 1, - NoSort => 1, - SuppressEmpty => 0, + KeepRoot => 1, + NoSort => 1, + SuppressEmpty => '', XMLDecl => 1, ); @@ -367,6 +371,16 @@ sub definition { options => \%customerClassification, defaultValue => '01', }, + residential => { + fieldType => 'radioList', + label => $i18n->get('residential'), + hoverHelp => $i18n->get('residential help'), + options => { + residential => $i18n->get('residential'), + commercial => $i18n->get('commercial'), + }, + defaultValue => 'commercial', + }, ##Note, if a flat fee is added to this driver, then according to the license ##terms the website must display a note to the user (shop customer) that additional ##fees have been added. diff --git a/t/Shop/ShipDriver/UPS.t b/t/Shop/ShipDriver/UPS.t index 738f8d0c2..9c1a8fdbd 100644 --- a/t/Shop/ShipDriver/UPS.t +++ b/t/Shop/ShipDriver/UPS.t @@ -35,7 +35,7 @@ $session->user({user => $user}); #---------------------------------------------------------------------------- # Tests -my $tests = 37; +my $tests = 40; plan tests => 1 + $tests; #---------------------------------------------------------------------------- @@ -348,17 +348,19 @@ $properties->{sourceCountry} = 'United States'; $properties->{shipService} = '03'; $properties->{pickupType} = '01'; $properties->{customerClassification} = '04'; +$properties->{residentialIndicator} = 'residential'; $driver->update($properties); $driver->testMode(1); -$rockHammer->addToCart($rockHammer->getCollateral('variantsJSON', 'variantId', $smallHammer)); +my $rockItem = $rockHammer->addToCart($rockHammer->getCollateral('variantsJSON', 'variantId', $smallHammer)); my @shippableUnits = $driver->_getShippableUnits($cart); ##Must look them up one zip at a time my $xml = $driver->buildXML($cart, $shippableUnits[0]); like($xml, qr/^<.xml version='1.0'.+?<.xml version=/ms, 'buildXML: has two xml declarations'); like($xml, qr/ 1, ); +diag Dumper $xmlRate; + cmp_deeply( $xmlRate, { RatingServiceSelectionRequest => { @@ -397,7 +399,7 @@ cmp_deeply( Address => { PostalCode => 97123, CountryCode => 'us', }, }, ShipTo => { - Address => { PostalCode => 53715, CountryCode => 'us', }, + Address => { PostalCode => 53715, CountryCode => 'us', ResidentialAddressIndicator => {}, }, }, Service => { Code => '03', }, Package => { @@ -416,12 +418,32 @@ SKIP: { my $response = $driver->_doXmlRequest($xml); ok($response->is_success, '_doXmlRequest to UPS successful for 1 package'); + #diag $response->content; my $xmlData = XMLin($response->content, ForceArray => [qw/RatedPackage/],); ok($xmlData->{Response}->{ResponseStatusCode}, '... responseCode is successful'); ok($xmlData->{RatedShipment}->{TotalCharges}->{MonetaryValue}, '... total charges returned'); + diag($xmlData->{RatedShipment}->{TotalCharges}->{MonetaryValue}); } +$rockItem->setQuantity(2); +@shippableUnits = $driver->_getShippableUnits($cart); +$xml = $driver->buildXML($cart, $shippableUnits[0]); +SKIP: { + + skip 'No UPS credentials for testing', 3 unless $hasUPSCredentials; + + my $response = $driver->_doXmlRequest($xml); + ok($response->is_success, '_doXmlRequest to UPS successful for 1 item, quantity=2'); + #diag $response->content; + my $xmlData = XMLin($response->content, ForceArray => [qw/RatedPackage/],); + ok($xmlData->{Response}->{ResponseStatusCode}, '... responseCode is successful'); + ok($xmlData->{RatedShipment}->{TotalCharges}->{MonetaryValue}, '... total charges returned'); + diag($xmlData->{RatedShipment}->{TotalCharges}->{MonetaryValue}); + +} + + TODO: { local $TODO = 'single item shipping cost calculation'; ok(0, 'call _calculateFromXML with arranged data'); @@ -434,7 +456,7 @@ $xml = $driver->buildXML($cart, @shippableUnits); ($xmlA, $xmlR) = split /\n(?=<\?xml)/, $xml; -diag $xmlR; +#diag $xmlR; $xmlRate = XMLin( $xmlR, KeepRoot => 1,