The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use Test::More import => ['!pass'], tests => 12;
use Dancer qw(:syntax);
use Dancer::Test;

use Dancer::Plugin::DBIC qw(schema);
use Capture::Tiny qw(capture);

BEGIN {
    set atombus => {
        db => {
            dsn => 'dbi:SQLite:dbname=:memory:',
        }
    };
}

use AtomBus;

my $xml1 = q{
    <entry>
        <title>title111</title>
        <content type="xhtml">
            <div xmlns="http://www.w3.org/1999/xhtml">content111</div>
        </content>
    </entry>
};

(my $xml2 = $xml1) =~ s/111/222/g;
my $feed = 'foo';

# Confirm that feed doesn't exist yet.
capture { # Silence output from schema->deploy in before filter.
    response_status_is [ GET => "/feeds/$feed" ], 404;
};

my $res = dancer_response POST => "/feeds/$feed", { body => $xml1 };
is $res->{status} => 201, 'Got 201 for posting entry1.';

is schema->resultset('AtomBusEntry')->count() => 1, '1 entries in db.';
is schema->resultset('AtomBusFeed')->count() => 1, '1 feed in db.';

my ($entry1) = schema->resultset('AtomBusEntry')->search(
    { title => 'title111', content => 'content111', feed_title => $feed });
ok $entry1, 'Found entry 1.';

$res = dancer_response POST => "/feeds/$feed", { body => $xml2 };
is $res->{status} => 201, 'Got 201 for posting entry2.';

is schema->resultset('AtomBusEntry')->count() => 2, '2 entries in db.';
is schema->resultset('AtomBusFeed')->count() => 1, '1 feed in db.';

response_content_like [ GET => "/feeds/$feed" ], qr/content111/,
    "Response has first message.";

my ($entry2) = schema->resultset('AtomBusEntry')->search(
    { title => 'title222', content => 'content222', feed_title => $feed });
ok $entry2, 'Found entry 2.';
ok $entry2->order_id > $entry1->order_id, 'The order_id field got incremented.';

response_content_like [ GET => "/feeds/$feed" ], qr/content111.+content222/s,
    "Response has both messages in order.";

done_testing;