use strict;
use warnings;
use Test::More tests => 5;
use Test::Exception;

#laziest test suite EVER. but it works and whatever its a brain-dead simple module

{
  package TestMXTypesLogDispatch;
  use Moose;
  use MooseX::Types::Log::Dispatch qw(Logger LogLevel);

  has logger => (
    isa => Logger,
    is => 'ro',
    coerce => 1,
  );

  has event_log_level => (
    isa => LogLevel,
    is => 'ro',
  );

  sub some_event_happened {
    my ($self, $event) = @_;
    $self->logger->log( level => $self->event_log_level, message => "$event happened");
  }
}

dies_ok {
  TestMXTypesLogDispatch->new( event_log_level => 'debbbug', );
} 'dies ok';

lives_ok {
  TestMXTypesLogDispatch->new( event_log_level => 'debug', );
} 'lives ok';

my $obj1;
lives_ok {
  $obj1 = TestMXTypesLogDispatch->new(
    event_log_level => 'debug',
    logger => [ ['Null', min_level => 'notice' ] ]
  );
} 'coerces ok';

## or
my $obj2;
lives_ok {
  $obj2 = TestMXTypesLogDispatch->new(
    event_log_level => 'warn',
    logger => { outputs => [ ['Null', min_level => 'debug' ] ] }
  );
} 'coerces ok';

lives_ok {
  $obj1->some_event_happened('zoom');
  $obj2->some_event_happened('zoom');
} 'logging actually works';