diff --git a/lib/WebGUI/Shop/ShipDriver/USPS.pm b/lib/WebGUI/Shop/ShipDriver/USPS.pm index c6eb02903..a717d8daa 100644 --- a/lib/WebGUI/Shop/ShipDriver/USPS.pm +++ b/lib/WebGUI/Shop/ShipDriver/USPS.pm @@ -61,15 +61,19 @@ sub buildXML { next PACKAGE unless scalar @{ $package }; tie my %packageData, 'Tie::IxHash'; my $weight = 0; + my $cost = 0; foreach my $item (@{ $package }) { my $sku = $item->getSku; my $itemWeight = $sku->getWeight(); + my $itemCost = $sku->getPrice(); ##Items that ship separately with a quantity > 1 are rate estimated as 1 item and then the ##shipping cost is multiplied by the quantity. if (! $sku->shipsSeparately ) { $itemWeight *= $item->get('quantity'); + $itemCost *= $item->get('quantity'); } $weight += $itemWeight; + $cost += $itemCost; } my $pounds = int($weight); my $ounces = int(16 * ($weight - $pounds)); @@ -89,6 +93,9 @@ sub buildXML { } $packageData{Size} = [ 'REGULAR' ]; $packageData{Machinable} = [ 'true' ]; + if ($self->get('addInsurance')) { + $packageData{ValueOfContents} = $cost; + } push @{ $xmlTop->{Package} }, \%packageData; } my $xml = XMLout(\%xmlHash, diff --git a/t/Shop/ShipDriver/USPS.t b/t/Shop/ShipDriver/USPS.t index fa63039dc..1c8f5637f 100644 --- a/t/Shop/ShipDriver/USPS.t +++ b/t/Shop/ShipDriver/USPS.t @@ -755,6 +755,66 @@ SKIP: { } +$properties = $driver->get(); +$properties->{addInsurance} = 1; +$driver->update($properties); + +$xml = $driver->buildXML($cart, @shippableUnits); +my $xmlData = XMLin($xml, + KeepRoot => 1, + ForceArray => ['Package'], +); +cmp_deeply( + $xmlData, + { + RateV3Request => { + USERID => $userId, + Package => [ + { + ID => 0, + ZipDestination => '53715', ZipOrigination => '97123', + Pounds => '1', Ounces => '8', + Size => 'REGULAR', Service => 'PRIORITY', + Machinable => 'true', ValueOfContents => 7.50, + }, + ], + } + }, + 'buildXML: contains ValueOfContents when insurance is requested' +); +like($xml, qr/RateV3Request USERID.+?Package ID=.+?Service.+?ZipOrigination.+?ZipDestination.+?Pounds.+?Ounces.+?Size.+?Machinable/, '... and tag order'); + +SKIP: { + + skip 'No userId for testing', 2 unless $hasRealUserId; + + my $response = $driver->_doXmlRequest($xml); + ok($response->is_success, '... _doXmlRequest to USPS successful'); + my $xmlData = XMLin($response->content, ForceArray => [qw/Package/],); + diag $response->content; +# cmp_deeply( +# $xmlData, +# { +# Package => [ +# { +# ID => 0, +# ZipOrigination => ignore(), ZipDestination => ignore(), +# Ounces => ignore(), Pounds => ignore(), +# Size => ignore(), Zone => ignore(), +# Postage => { +# CLASSID => ignore(), +# MailService => ignore(), +# Rate => num(8,8), ##A number around 10... +# } +# }, +# ], +# }, +# '... returned data from USPS in correct format. If this test fails, the driver may need to be updated' +# ); + +} + + #---------------------------------------------------------------------------- # Cleanup END {