add basic inflation wrapper and simple inflator
[dbsrgits/DBIx-Data-Store.git] / t / crud_wrapped.t
CommitLineData
34b924ec 1use strictures 1;
2use Test::More;
3use DBIx::Data::Store::Inflator::Simple;
4use DBIx::Data::Collection::Set::Wrapper::Inflate;
5
6BEGIN { require 't/crud.t' }
7
8{ package My::Name; sub id { shift->{id} } sub name { shift->{name} } }
9
10sub mkobj { bless({ id => $_[0][0], name => $_[0][1] }, 'My::Name') }
11
12sub run_tests_crud_wrapped {
13 setup_db;
14
15 my $unwrapped = make_store;
16 my $store = DBIx::Data::Collection::Set::Wrapper::Inflate->new({
17 inner => $unwrapped,
18 inflator => DBIx::Data::Store::Inflator::Simple->new({
19 spec_columns => [ 'id' ], body_columns => [ 'name' ],
20 all_columns => [ 'id', 'name' ], class => 'My::Name'
21 })
22 });
23
24 my $bob = mkobj([1,'Bob']);
25
26 is_deeply([$store->flatten], [], 'Empty set');
27
28 is_deeply($store->add({ name => 'Bob' }), $bob, 'Add record');
29
30 is_deeply([$store->flatten], [$bob], 'One member');
31
32 is_deeply($store->get({ id => 1 }), $bob, 'Retrieve by key');
33
34 $bob = mkobj([1,'Robert']);
35
36 $store->replace($bob,$bob);
37
38 is_deeply([$store->flatten], [$bob], 'Name changed (all)');
39
40 is_deeply($store->get({ id => 1 }), $bob, 'Retrieve by key');
41
42 $store->add({ name => $_ }) for qw(Joe James Jim);
43
44 my $flatsort = sub {
45 [ sort { $a->id <=> $b->id } $store->flatten ]
46 };
47
48 is_deeply($flatsort->(), [
49 map mkobj($_), [1,'Robert'],[2,'Joe'],[3,'James'],[4,'Jim']
50 ], 'Four members');
51
52 my $james = mkobj([3,'James']);
53
54 is_deeply($store->get({ id => 3 }), $james, 'Retrieve by key');
55
56 $store->remove($james);
57
58 is_deeply($flatsort->(), [
59 map mkobj($_), [1,'Robert'],[2,'Joe'],[4,'Jim']
60 ], 'Three members left');
61
62 done_testing;
63}
64
65run_tests_crud_wrapped unless caller;