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

use strict;
use warnings;

use Test::More;

require_ok( 'Enbld::Condition' );

subtest 'getter method' => sub {
    subtest 'set version' => sub {
        my $condition = Enbld::Condition->new( version => '1.0' );
        is( $condition->version, '1.0', 'version' );
    };

    subtest 'no version' => sub {
        my $condition = Enbld::Condition->new;
        is( $condition->version, 'latest', 'version' );
    };

    subtest 'set make_test' => sub {
        my $condition = Enbld::Condition->new( make_test => 1 );
        is( $condition->make_test, 1, 'make test' );
    };

    subtest 'no make_test' => sub {
        my $condition = Enbld::Condition->new;
        is( $condition->make_test, undef, 'no make test' );
    };
};

subtest 'serialize' => sub {

    subtest 'defined serialize' => sub {
        my $condition = Enbld::Condition->new( make_test => 1 );

        is_deeply(
                $condition->serialize, { version => 'latest', make_test => 1 },
                'serialized version'
                );
    };

    subtest 'not defined serialize' => sub {
        my $condition = Enbld::Condition->new;

        is_deeply(
                $condition->serialize, { version => 'latest' },
                'serialized version'
                );
    };

};

subtest 'is_equal_to method' => sub {

    subtest 'condition check' => sub {
        my $condition = Enbld::Condition->new( version => 'latest' );
        my $param     = Enbld::Condition->new( version => 'latest' );

        is( $condition->is_equal_to( $param ), $condition, 'same version' );

        my $param_diff = Enbld::Condition->new( version => '1.0' );

        is( $condition->is_equal_to( $param_diff ), undef,
                'different version' );

    };

    subtest 'make_test check' => sub {
        my $condition = Enbld::Condition->new( make_test => 1 );
        my $param     = Enbld::Condition->new( make_test => 1 );

        is( $condition->is_equal_to( $param ), $condition, 'same make_test' );

        my $param_diff = Enbld::Condition->new( make_test => undef );

        is( $condition->is_equal_to( $param_diff ), undef,
                'different make_test' );

        my $condition_diff = Enbld::Condition->new( make_test => undef );

        is( $condition_diff->is_equal_to( $param ), undef,
                'different not equal pattern' );
    };

};

done_testing();