The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use Test::More;
use Test::Deep;
use Test::Method;
use Test::Moose;
use Module::Runtime qw( use_module );

# purpose of this test is to check bare minimum for creation. I.e. that required attributes are ok.
my $ship_to = new_ok(
    use_module('Business::CyberSource::RequestPart::ShipTo') => [
        {
            street1        => 'Somewhere in Siberia',
            country        => 'RU',
        }
    ]
);

# purpose of this test is to check accessors and serialization
$ship_to = new_ok(
    use_module('Business::CyberSource::RequestPart::ShipTo') => [
        {

            first_name     => 'Bob',
            last_name      => 'Lemon',
            street1        => '306 E 6th',
            street2        => 'Dizzy Rooster',
            city           => 'Austin',
            state          => 'TX',
            country        => 'US',
            postal_code    => '78701',
            phone_number    => '+1(512)236-1667',
            shipping_method => 'none',

        }
    ]
);

does_ok $ship_to, 'MooseX::RemoteHelper::CompositeSerialization';
can_ok $ship_to,  'serialize';

# checking accessors without arguments, they simply return the value
method_ok $ship_to, first_name     => [], 'Bob';
method_ok $ship_to, last_name      => [], 'Lemon';
method_ok $ship_to, street1        => [], '306 E 6th';
method_ok $ship_to, street2        => [], 'Dizzy Rooster';
method_ok $ship_to, city           => [], 'Austin';
method_ok $ship_to, state          => [], 'TX';
method_ok $ship_to, country        => [], 'US';
method_ok $ship_to, postal_code    => [], '78701';
method_ok $ship_to, phone_number   => [], '+1(512)236-1667';
method_ok $ship_to, shipping_method => [], 'none';

my %expected_serialized = (
    firstName      => 'Bob',
    lastName       => 'Lemon',
    street1        => '306 E 6th',
    street2        => 'Dizzy Rooster',
    city           => 'Austin',
    state          => 'TX',
    country        => 'US',
    postalCode     => '78701',
    phoneNumber    => '+1(512)236-1667',
    shippingMethod => 'none',
);

method_ok $ship_to, serialize => [], \%expected_serialized;

done_testing;