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; |
9f2b6cc8 |
41 | use Devel::Dwarn; |
50166086 |
42 | my $id_1 = $by_id->get({ id => 1 }); |
43 | my $by_name = $by_id->indexed_by('name'); |
44 | ok(scalar($by_name->_key_cache_get_object($id_1), 'key cache transfer')); |
45 | cmp_ok( |
46 | $id_1, '==', $by_name->get({ name => $id_1->{name} }), |
47 | 'get returns same object' |
48 | ); |
49 | my $name_pterry = $by_name->get({ name => 'Pterry' }); |
50 | ok( |
51 | scalar($by_id->_key_cache_get_object($name_pterry)), |
52 | 'key cache reverse transfer' |
53 | ); |
54 | cmp_ok( |
55 | $name_pterry, '==', $by_id->get({ id => $name_pterry->{id} }), |
56 | 'get returns same object' |
57 | ); |
58 | ok( |
59 | !$by_id->_member_cache_built && !$by_name->_member_cache_built, |
60 | 'No caches yet' |
61 | ); |
62 | is_deeply( |
63 | [ sort_set $by_id->flatten ], \@expect, |
64 | 'flatten set', |
65 | ); |
66 | ok( |
67 | $by_id->_member_cache_built && $by_name->_member_cache_built, |
68 | 'Both caches filled' |
69 | ); |
70 | ok( |
71 | $by_id->_member_cache != $by_name->_member_cache, |
72 | 'Caches are separate arrayrefs' |
73 | ); |
9f2b6cc8 |
74 | done_testing; |
75 | } |
76 | |
77 | run_tests unless caller; |