contributor update
[dbsrgits/DBIx-Class-RowCountStatistics.git] / t / basic.t
1 use strict;
2 use warnings;
3
4 use Test::More;
5 use FindBin;
6
7 BEGIN {
8     push @INC, "$FindBin::Bin/lib";
9 }
10
11 plan skip_all => 'requires DBD::SQLite'
12     unless eval { require DBD::SQLite };
13
14 use TestSchema;
15 use DBIx::Class::RowCountStatistics;
16
17 our @_COMPLETE;
18
19 do {
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
33 my $schema = TestSchema->connect(
34     'dbi:SQLite:dbname=:memory:',
35     undef, undef,
36     {},
37     {
38         cursor_class => 'DBIx::Class::RowCountStatistics',
39     }
40 );
41 $schema->deploy();
42 $schema->storage->debugobj(TestStats->new);
43 $schema->storage->debug(1);
44
45 ok $schema, 'schema created';
46 is $schema->storage->cursor_class,
47     'DBIx::Class::RowCountStatistics',
48     'cursor_class set';
49
50 my $rs = $schema->resultset('Test');
51
52 subtest 'count with ->next' => sub {
53     local @_COMPLETE;
54     $rs->create({ id => $_ }) for 1..10;
55     do {
56         my $rows = $rs->search_rs;
57         is ref($rows->cursor), 'DBIx::Class::RowCountStatistics',
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';
63     ok length($_COMPLETE[0][1]), 'SQL was passed';
64     like $_COMPLETE[0][1], qr{SELECT}i, 'SQL contains SELECT';
65     $rs->delete;
66 };
67
68 subtest 'count with ->all' => sub {
69     local @_COMPLETE;
70     $rs->create({ id => $_ }) for 1..10;
71     do {
72         my $rows = $rs->search_rs;
73         is ref($rows->cursor), 'DBIx::Class::RowCountStatistics',
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
82 subtest '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
92 subtest '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
102 done_testing;