renamed
[dbsrgits/DBIx-Class-RowCountStatistics.git] / t / basic.t
CommitLineData
231ba12b 1use strict;
2use warnings;
3
4use Test::More;
5use FindBin;
6
7BEGIN {
8 push @INC, "$FindBin::Bin/lib";
9}
10
3dd63871 11plan skip_all => 'requires DBD::SQLite'
12 unless eval { require DBD::SQLite };
13
231ba12b 14use TestSchema;
ef422264 15use DBIx::Class::RowCountStatistics;
231ba12b 16
17our @_COMPLETE;
18
19do {
20 package TestStats;
21 use parent 'DBIx::Class::Storage::Statistics';
22 sub new {
23 bless {}, shift;
24 }
25 sub query_start { }
26 sub query_end { }
27 sub query_complete {
28 my ($self, @args) = @_;
29 push @_COMPLETE, \@args;
30 }
31};
32
33my $schema = TestSchema->connect(
34 'dbi:SQLite:dbname=:memory:',
35 undef, undef,
36 {},
37 {
ef422264 38 cursor_class => 'DBIx::Class::RowCountStatistics',
231ba12b 39 }
40);
41$schema->deploy();
42$schema->storage->debugobj(TestStats->new);
43$schema->storage->debug(1);
44
45ok $schema, 'schema created';
46is $schema->storage->cursor_class,
ef422264 47 'DBIx::Class::RowCountStatistics',
231ba12b 48 'cursor_class set';
49
50my $rs = $schema->resultset('Test');
51
f6e5b275 52subtest 'count with ->next' => sub {
231ba12b 53 local @_COMPLETE;
54 $rs->create({ id => $_ }) for 1..10;
55 do {
56 my $rows = $rs->search_rs;
ef422264 57 is ref($rows->cursor), 'DBIx::Class::RowCountStatistics',
231ba12b 58 'resultset cursor';
59 1 while $rows->next;
60 };
61 is scalar(@_COMPLETE), 1, 'single complete call';
62 is $_COMPLETE[0][0], 10, 'full count';
cda17ef7 63 ok length($_COMPLETE[0][1]), 'SQL was passed';
64 like $_COMPLETE[0][1], qr{SELECT}i, 'SQL contains SELECT';
231ba12b 65 $rs->delete;
66};
67
f6e5b275 68subtest 'count with ->all' => sub {
69 local @_COMPLETE;
70 $rs->create({ id => $_ }) for 1..10;
71 do {
72 my $rows = $rs->search_rs;
ef422264 73 is ref($rows->cursor), 'DBIx::Class::RowCountStatistics',
f6e5b275 74 'resultset cursor';
75 my @all = $rows->all;
76 };
77 is scalar(@_COMPLETE), 1, 'single complete call';
78 is $_COMPLETE[0][0], 10, 'full count';
79 $rs->delete;
80};
81
231ba12b 82subtest 'empty' => sub {
83 local @_COMPLETE;
84 do {
85 my $rows = $rs->search_rs;
86 1 while $rows->next;
87 };
88 is scalar(@_COMPLETE), 1, 'single complete call';
89 is $_COMPLETE[0][0], 0, 'full count';
90};
91
92subtest 'no fetch' => sub {
93 local @_COMPLETE;
94 $rs->create({ id => $_ }) for 1..10;
95 do {
96 my $rows = $rs->search_rs;
97 };
98 is scalar(@_COMPLETE), 0, 'no complete calls';
99 $rs->delete;
100};
101
102done_testing;