tests
[dbsrgits/DBIx-Class-Cursor-Cached.git] / t / simple.t
CommitLineData
2ebeca8e 1BEGIN {
2 package SchemaClass::CD;
3
4 use base qw(DBIx::Class::Core);
5
6 __PACKAGE__->table('cd');
7 __PACKAGE__->add_columns(
8 'id' => {
9 data_type => 'integer',
10 is_auto_increment => 1,
11 },
12 'title' => {
13 data_type => 'varchar',
14 size => 100,
15 },
16 );
17 __PACKAGE__->set_primary_key('id');
18
19 package SchemaClass;
20
21 use base qw(DBIx::Class::Schema);
22
23 __PACKAGE__->register_class(CD => 'SchemaClass::CD');
24
25 sub deploy {
26 my $self = shift;
27 $self->storage->dbh->do(q{
28 CREATE TABLE cd (
29 id INTEGER PRIMARY KEY NOT NULL,
30 title varchar(100) NOT NULL
31 );
32 });
33 }
34
35 sub init {
36 my $self = shift;
37 $self->deploy;
38 $self->resultset('CD')->populate([
39 map { { title => $_ } } 'CD one', 'CD two'
40 ]);
41 }
42
43}
44
45use Cache::FileCache;
46use DBIx::Class::Cursor::Cached;
47use Test::More 'no_plan';
48
49unlink('t/var/test.db');
50
51my ($dsn, $user, $pass) = ('dbi:SQLite:t/var/test.db');
52
53SchemaClass->connect($dsn,$user,$pass)->init;
54
55require Data::Dumper;
56
57my $expect_data = [ [ 1, 'CD one' ], [ 2, 'CD two' ] ];
58
59{ ## start test block
60
61 my $schema = SchemaClass->connect(
62 $dsn, $user, $pass, { cursor_class => 'DBIx::Class::Cursor::Cached' }
63 );
64
65 $schema->default_resultset_attributes({
66 cache_object => Cache::FileCache->new({ namespace => 'SchemaClass' }),
67 });
68
69my $cache = $schema->default_resultset_attributes->{cache_object};
70
71 my $rs = $schema->resultset('CD')->search(undef, { cache_for => 300 });
72
73 my @cds = $rs->all; # fills cache
74
75is_deeply([ map { [ $_->id, $_->title ] } @cds ], $expect_data,
76 'correct data in objects');
77is_deeply($cache->get($rs->cursor->cache_key), $expect_data,
78 'correct data in cache');
79
80 $rs = $schema->resultset('CD')->search(undef, { cache_for => 300 });
81 # refresh resultset
82
83$schema->storage->disconnect;
84
85 @cds = $rs->all; # uses cache, no SQL run
86
87ok(!$schema->storage->connected, 'no reconnect made since no SQL required');
88is_deeply([ map { [ $_->id, $_->title ] } @cds ], $expect_data,
89 'correct data in objects');
90is_deeply($cache->get($rs->cursor->cache_key), $expect_data,
91 'correct data in cache');
92
93 $rs->cursor->clear_cache; # deletes data from cache
94
95ok(!defined($cache->get($rs->cursor->cache_key)), 'cache cleared');
96
97 @cds = $rs->all; # refills cache
98
99is_deeply([ map { [ $_->id, $_->title ] } @cds ], $expect_data,
100 'correct data in objects');
101is_deeply($cache->get($rs->cursor->cache_key), $expect_data,
102 'correct data in cache');
103
104}