The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl

use strict;
use warnings;
use Test::More;
use Test::Exception;
use Catmandu::Fix::set_field;

my $pkg;
BEGIN {
    $pkg = 'Catmandu::Fix::Condition::in';
    use_ok $pkg;
}

my $cond = $pkg->new('foo','bar');
$cond->pass_fixes([Catmandu::Fix::set_field->new('test', 'pass')]);
$cond->fail_fixes([Catmandu::Fix::set_field->new('test', 'fail')]);

# Integers
is_deeply
    $cond->fix({foo => 1 ,bar => 1}),
    {foo => 1 , bar => 1, test => 'pass'};

is_deeply
    $cond->fix({foo => 1 , bar => 2}),
    {foo => 1 , bar => 2, test => 'fail'};

# Strings
is_deeply
    $cond->fix({foo => "hotel" ,bar => "hotel"}),
    {foo => "hotel" , bar => "hotel", test => 'pass'};

is_deeply
    $cond->fix({foo => "hotel" , bar => "tango"}),
    {foo => "hotel" , bar => "tango", test => 'fail'};

# Empty fields
is_deeply
    $cond->fix({foo => "" , bar => ""}),
    {foo => "" , bar => "", test => 'pass'};

is_deeply
    $cond->fix({foo => undef , bar => undef}),
    {foo => undef , bar => undef, test => 'pass'};   

is_deeply
    $cond->fix({}),
    {test => 'fail'};  

# Arrays
is_deeply
    $cond->fix({foo => [1,2,3] , bar => [1,2,3] }),
    {foo => [1,2,3] , bar => [1,2,3], test => 'pass'};

is_deeply
    $cond->fix({foo => [1,2,3] , bar => [3,2,1] }),
    {foo => [1,2,3] , bar => [3,2,1], test => 'fail'};

is_deeply
    $cond->fix({foo => [1,2,3] , bar => [1,2,3,4] }),
    {foo => [1,2,3] , bar => [1,2,3,4], test => 'fail'};

is_deeply
    $cond->fix({foo => [] , bar => [] }),
    {foo => [] , bar => [], test => 'pass'};

# Hashes
is_deeply
    $cond->fix({foo => {a => 'b'} , bar => {a => 'b'} }),
    {foo => {a => 'b'} , bar => {a => 'b'}, test => 'pass'};

# ... perl weirdnes ...
is_deeply
    $cond->fix({foo => {a => 'b'} , bar => [ 'a' , 'b'] }),
    {foo => {a => 'b'} , bar => [ 'a' , 'b'], test => 'pass'};

is_deeply
    $cond->fix({foo => {a => 'b', c => [0,1]} , bar => {a => 'b' , c => [0,1]} }),
    {foo => {a => 'b', c => [0,1]} , bar => {a => 'b', c => [0,1]}, test => 'pass'};

done_testing 15;