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 0.88;
use Test::Fatal;

my $class = "MongoDB::ReadPreference";

require_ok( $class );

is(
    exception { $class->new },
    undef,
    "new without args has default"
);

my @modes = qw(
    primary PRIMARY PrImArY
    secondary secondary_preferred primary_preferred nearest
    secondarypreferred primarypreferred
);

for my $mode (@modes) {
    new_ok( $class, [ mode => $mode ], "new( mode => '$mode' )" );
}

like(
    exception { $class->new( mode => 'primary', tag_sets => [ { dc => 'us' } ] ) },
    qr/not allowed/,
    "tag set list not allowed with primary"
);

subtest "stringification" => sub {
    my $rp;

    my @cases = (
        [ {} => 'primary' ],
        [ { mode => 'secondary_preferred' }, 'secondaryPreferred' ],
        [
            {
                mode    => 'secondary_preferred',
                tag_sets => [ { dc => 'ny', rack => 1 }, { dc => 'ny' }, {} ]
            },
            'secondaryPreferred ({dc:ny,rack:1},{dc:ny},{})'
        ],
    );

    for my $case (@cases) {
        my $rp = $class->new( $case->[0] );
        is( $rp->as_string, $case->[1], $case->[1] );
    }

};

done_testing;

# vim: ts=4 sts=4 sw=4 et: