use strict;
use warnings;
use Test::More;
use lib "lib";
use Test::DBIC::ExpectedQueries;
my $queries = Test::DBIC::ExpectedQueries->new({
schema => "don't hit anything that uses ->schema and we'll be fine",
});
sub query {
my ($table, $operation) = @_;
return Test::DBIC::ExpectedQueries::Query->new({
sql => "$operation on $table",
table => $table,
operation => $operation,
});
}
note "Test queries vs expected";
#
# puff
# select 2
# magic
# insert 2
# select 3
# dragon
# delete 1
# * Expect
# ok - puff select 2
# not - puff insert > 0
# ok - magic insert < 3
# not - no mention of magic select
# not - dragon, no mention of
$queries->queries([
query("puff", "select"),
query("puff", "select"),
query("magic", "insert"),
query("magic", "insert"),
query("magic", "select"),
query("magic", "select"),
query("magic", "select"),
query("dragon", "delete"),
Test::DBIC::ExpectedQueries::Query->new({ sql => "create table abc" }),
]);
my $failure = $queries->check_table_operation_counts({
puff => { select => 2 },
magic => { insert => "> 0" }
});
is(
$failure,
"* Table: dragon
Expected '0' deletes for table 'dragon', got '1'
Actually executed SQL queries on table 'dragon':
SQL: (delete on dragon)
* Table: magic
Expected '0' selects for table 'magic', got '3'
Actually executed SQL queries on table 'magic':
SQL: (insert on magic)
SQL: (insert on magic)
SQL: (select on magic)
SQL: (select on magic)
SQL: (select on magic)
",
"Correctly identified all discrepancies",
);
is(
$queries->unknown_warning,
"
Warning: unknown queries:
SQL: (create table abc)
",
"Found unknown queries",
);
note "Check it works to run many times and then checking";
$queries->queries([
query("puff", "select"),
]);
$failure = $queries->check_table_operation_counts({
puff => { select => 1 },
});
is($failure, "", "Re-setting queries re-sets the stats");
done_testing();