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();