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;

use DBIx::Class::QueryLog;
use DBIx::Class::QueryLog::Analyzer;

my $time = 0;

my $ql = DBIx::Class::QueryLog->new(
    __time => sub { $time },
);
ok($ql->isa('DBIx::Class::QueryLog'), 'new');

$ql->query_start('SELECT * from foo');
$ql->query_end('SELECT * from foo');
ok(scalar(@{ $ql->log }) == 1, 'log count w/1 query');

$ql->txn_begin;
$ql->query_start('SELECT * from foo');
$ql->query_end('SELECT * from foo');

$ql->query_start('SELECT * from bar');
$time += 1;
$ql->query_end('SELECT * from bar');

$ql->txn_commit;

my $ana = DBIx::Class::QueryLog::Analyzer->new({
    querylog => $ql
});
isa_ok($ana, 'DBIx::Class::QueryLog::Analyzer');
isa_ok($ana->querylog, 'DBIx::Class::QueryLog');

cmp_ok(scalar(@{ $ana->get_sorted_queries }), '==', 3, 'Sorted Count');

my $analyzed = $ana->get_totaled_queries;
my @keys = reverse sort {
        $analyzed->{$a}->{'time_elapsed'} <=> $analyzed->{$b}->{'time_elapsed'}
    } keys(%{ $ana->get_totaled_queries });
cmp_ok(scalar(@keys), '==', 2, '2 different queries');

cmp_ok($analyzed->{$keys[0]}->{'count'}, '==', 1, '1 executions');

cmp_ok($analyzed->{$keys[1]}->{'count'}, '==', 2, '2 executions');

ok($analyzed->{$keys[0]}->{'time_elapsed'}, 'Total time');
cmp_ok(scalar(@{$analyzed->{$keys[0]}->{'queries'}}), '==', 1, '1 stored queries');
cmp_ok(scalar(@{$analyzed->{$keys[1]}->{'queries'}}), '==', 2, '2 stored queries');

done_testing;