Commit | Line | Data |
34b924ec |
1 | use strictures 1; |
2 | use Test::More; |
3 | use DBIx::Data::Store::Inflator::Simple; |
4 | use DBIx::Data::Collection::Set::Wrapper::Inflate; |
5 | |
6 | BEGIN { require 't/crud.t' } |
7 | |
8 | { package My::Name; sub id { shift->{id} } sub name { shift->{name} } } |
9 | |
10 | sub mkobj { bless({ id => $_[0][0], name => $_[0][1] }, 'My::Name') } |
11 | |
12 | sub 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 | |
65 | run_tests_crud_wrapped unless caller; |