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

use strict;
use warnings;

BEGIN { require "t/test.pl" }

my $CLASS = "TB2::Event::Log";
use_ok $CLASS or die;

note "Bad args"; {
    ok !eval { $CLASS->new; };
    like $@, qr{^\QAttribute (message) is required};

    ok !eval { $CLASS->new( message => "foo", level => 42 ) };
    like $@, qr{^\QAttribute (level) does not pass the type constraint};

    ok !eval { $CLASS->new( message => "foo", level => "highest" ) };
    like $@, qr{^\QAttribute (level) does not pass the type constraint},
      "highest is not a level";
}


note "defaults"; {
    my $message = "The dolphins are in the jacuzzi.";
    my $event = $CLASS->new( message => $message );

    is $event->event_type,      "log";
    is $event->level,           'debug';
    is $event->message,         $message;
    is_deeply $event->as_hash, {
        object_id        => $event->object_id,
        event_type      => 'log',
        message         => $message,
        level           => 'debug'
    };
}


note "levels"; {
    is_deeply [$CLASS->levels], [qw( debug info notice warning error alert )];
}


note "between_levels"; {
    my $log = $CLASS->new(
        message => "whatever",
        level   => "error"
    );

    ok $log->between_levels("error", "alert");
    ok !$log->between_levels("alert", "highest");
    ok !$log->between_levels("error", "error");
    ok !$log->between_levels("lowest", "error");
    ok $log->between_levels("lowest", "alert");
}

done_testing;