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 tests => 3;
use FindBin;
use lib "$FindBin::Bin/../lib";
use AnyEvent;
use AnyMQ;
use AnyMQ::Pg;
use Data::Dumper;

my $cv;
my $listener;
my $notif_count = 0;

BEGIN {
    use_ok('AnyMQ::Pg') || warn "Error using AnyMQ::Pg!\n";
}

SKIP: {
    skip "Set \$AMQPG_TESTS to test with AnyMQ::Pg", 2
        unless $ENV{AMQPG_TESTS};

    run_tests();
}

sub run_tests {
    my $bus = AnyMQ->new_with_traits(
        traits     => ['Pg'],
        dsn        => 'user=postgres dbname=postgres',
        on_connect       => \&connected,
        on_error         => \&error,
    );
    $cv = AE::cv;

    # listen for events
    my $topic = $bus->topic('LOLHI');
    $listener = $bus->new_listener($topic);
    $listener->poll(\&got_notification);
    
    # try publishing before we may be connected
    $topic->publish({ blah => 123 });

    $cv->recv;
}

sub got_notification {
    my ($notif) = @_;
    $notif_count++;
    is($notif->{blah}, 123, "Got published notification");
    $cv->send if $notif_count == 2;
}

sub connected {
    my ($self) = @_;
    
    # publish after we are connected
    my $topic = $self->topic('LOLHI');
    $topic->publish({ blah => 123 });
}

sub error {
    my ($self, $err) = @_;
    warn "Pg error: $err";
    $cv->send;
}