DBIx::Class::Bundled
[dbsrgits/DBIx-Class.git] / t / dq / remap.t
1 use strict;
2 use warnings;
3
4 use Test::More;
5 use Test::Exception;
6 use Test::Warn;
7 use lib qw(t/lib);
8 use DBICTest;
9 use DBIC::SqlMakerTest;
10 use Data::Query::ExprDeclare;
11 use Data::Query::ExprHelpers;
12
13 my $schema = DBICTest->init_schema();
14
15 $schema->source($_)->resultset_class('DBIx::Class::ResultSet::WithDQMethods')
16   for qw(CD Tag);
17
18 my $cds = $schema->resultset('CD');
19
20 throws_ok {
21   $cds->_remap_identifiers(Identifier('name'))
22 } qr/Invalid name on me: name/;
23
24 is_deeply(
25   [ $cds->_remap_identifiers(Identifier('title')) ],
26   [ Identifier('me', 'title'), [] ],
27   'Remap column on me'
28 );
29
30 throws_ok {
31   $cds->_remap_identifiers(Identifier('artist'))
32 } qr/Invalid name on me: artist is a relationship/;
33
34 is_deeply(
35   [ $cds->_remap_identifiers(Identifier('artist', 'name')) ],
36   [ Identifier('artist', 'name'), [ { artist => {} } ] ],
37   'Remap column on rel'
38 );
39
40 is_deeply(
41   [ $cds->search({}, { join => { single_track => { cd => 'artist' } } })
42         ->_remap_identifiers(Identifier('artist', 'name')) ],
43   [ Identifier('artist_2', 'name'), [ { artist => {} } ] ],
44   'Remap column on rel with re-alias'
45 );
46
47 is_deeply(
48   [ $cds->_remap_identifiers(Identifier('artist_id')) ],
49   [ Identifier('me', 'artist'), [] ],
50   'Remap column w/column name rename'
51 );
52
53 my $double_name = expr { $_->artist->name == $_->artist->name }->{expr};
54
55 is_deeply(
56   [ $cds->_remap_identifiers($double_name) ],
57   [ $double_name, [ { artist => {} } ] ],
58   'Remap column on rel only adds rel once'
59 );
60
61 done_testing;