9b7550a4412232477bd48aa77aa7faafd1aab768
[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 use TestSchema;
12 use CtrlO::DBIC::Cursor::RowCountStatistics;
13
14 our @_COMPLETE;
15
16 do {
17     package TestStats;
18     use parent 'DBIx::Class::Storage::Statistics';
19     sub new {
20         bless {}, shift;
21     }
22     sub query_start { }
23     sub query_end { }
24     sub query_complete {
25         my ($self, @args) = @_;
26         push @_COMPLETE, \@args;
27     }
28 };
29
30 my $schema = TestSchema->connect(
31     'dbi:SQLite:dbname=:memory:',
32     undef, undef,
33     {},
34     {
35         cursor_class => 'CtrlO::DBIC::Cursor::RowCountStatistics',
36     }
37 );
38 $schema->deploy();
39 $schema->storage->debugobj(TestStats->new);
40 $schema->storage->debug(1);
41
42 ok $schema, 'schema created';
43 is $schema->storage->cursor_class,
44     'CtrlO::DBIC::Cursor::RowCountStatistics',
45     'cursor_class set';
46
47 my $rs = $schema->resultset('Test');
48
49 subtest 'simple' => sub {
50     local @_COMPLETE;
51     $rs->create({ id => $_ }) for 1..10;
52     do {
53         my $rows = $rs->search_rs;
54         is ref($rows->cursor), 'CtrlO::DBIC::Cursor::RowCountStatistics',
55             'resultset cursor';
56         1 while $rows->next;
57     };
58     is scalar(@_COMPLETE), 1, 'single complete call';
59     is $_COMPLETE[0][0], 10, 'full count';
60     $rs->delete;
61 };
62
63 subtest 'empty' => sub {
64     local @_COMPLETE;
65     do {
66         my $rows = $rs->search_rs;
67         1 while $rows->next;
68     };
69     is scalar(@_COMPLETE), 1, 'single complete call';
70     is $_COMPLETE[0][0], 0, 'full count';
71 };
72
73 subtest 'no fetch' => sub {
74     local @_COMPLETE;
75     $rs->create({ id => $_ }) for 1..10;
76     do {
77         my $rows = $rs->search_rs;
78     };
79     is scalar(@_COMPLETE), 0, 'no complete calls';
80     $rs->delete;
81 };
82
83 done_testing;