Commit | Line | Data |
9f2b6cc8 |
1 | use strict; |
2 | use warnings FATAL => 'all'; |
3 | use Test::More; |
4 | use DBIx::Data::Collection::Set::IndexableBy; |
5 | |
6 | BEGIN { |
7 | package BasicCollection; |
330d0949 |
8 | require 't/dbix-data-set/01basic_collection.t' |
9f2b6cc8 |
9 | } |
10 | |
11 | sub setup_db { BasicCollection::setup_db @_ } |
12 | |
13 | sub make_store { BasicCollection::make_store @_ } |
14 | |
50166086 |
15 | sub sort_set { BasicCollection::sort_set @_ } |
16 | |
9f2b6cc8 |
17 | sub make_set { |
18 | BasicCollection::make_set({ |
19 | indexable_by => { |
20 | name => { |
21 | set_over => [ 'name' ], |
22 | store => make_store({ |
23 | select_single_sql => q{SELECT id, name FROM person WHERE name = ?}, |
24 | select_single_argument_order => [ qw(name) ], |
25 | }), |
26 | }, |
27 | }, |
28 | }, |
29 | { |
30 | select_single_sql => q{SELECT id, name FROM person WHERE id = ?}, |
31 | select_single_argument_order => [ qw(id) ], |
32 | }, |
33 | 'DBIx::Data::Collection::Set::IndexableBy' |
34 | ) |
35 | } |
36 | |
37 | |
38 | sub run_tests { |
39 | my @expect = setup_db; |
50166086 |
40 | my $by_id = make_set; |
50166086 |
41 | my $id_1 = $by_id->get({ id => 1 }); |
42 | my $by_name = $by_id->indexed_by('name'); |
43 | ok(scalar($by_name->_key_cache_get_object($id_1), 'key cache transfer')); |
44 | cmp_ok( |
45 | $id_1, '==', $by_name->get({ name => $id_1->{name} }), |
46 | 'get returns same object' |
47 | ); |
48 | my $name_pterry = $by_name->get({ name => 'Pterry' }); |
49 | ok( |
50 | scalar($by_id->_key_cache_get_object($name_pterry)), |
51 | 'key cache reverse transfer' |
52 | ); |
53 | cmp_ok( |
54 | $name_pterry, '==', $by_id->get({ id => $name_pterry->{id} }), |
55 | 'get returns same object' |
56 | ); |
57 | ok( |
58 | !$by_id->_member_cache_built && !$by_name->_member_cache_built, |
59 | 'No caches yet' |
60 | ); |
61 | is_deeply( |
62 | [ sort_set $by_id->flatten ], \@expect, |
63 | 'flatten set', |
64 | ); |
65 | ok( |
66 | $by_id->_member_cache_built && $by_name->_member_cache_built, |
67 | 'Both caches filled' |
68 | ); |
69 | ok( |
70 | $by_id->_member_cache != $by_name->_member_cache, |
71 | 'Caches are separate arrayrefs' |
72 | ); |
9f2b6cc8 |
73 | done_testing; |
74 | } |
75 | |
76 | run_tests unless caller; |