Merge 'trunk' into 'cdbicompat_integration'
[dbsrgits/DBIx-Class.git] / t / 79aliasing.t
1 use strict;
2 use warnings;  
3
4 use Test::More;
5 use lib qw(t/lib);
6 use DBICTest;
7
8 my $schema = DBICTest->init_schema();
9
10 plan tests => 11;
11
12 # Check that you can leave off the alias
13 {
14   my $artist = $schema->resultset('Artist')->find(1);
15
16   my $existing_cd = $artist->search_related('cds', undef, { prefetch => 'tracks' })->find_or_create({
17     title => 'Ted',
18     year  => 2006,
19   });
20   ok(! $existing_cd->is_changed, 'find_or_create on prefetched has_many with same column names: row is clean');
21   is($existing_cd->title, 'Ted', 'find_or_create on prefetched has_many with same column names: name matches existing entry');
22
23   my $new_cd = $artist->search_related('cds', undef, { prefetch => 'tracks' })->find_or_create({
24     title => 'Something Else',
25     year  => 2006,
26   });
27   ok(! $new_cd->is_changed, 'find_or_create on prefetched has_many with same column names: row is clean');
28   is($new_cd->title, 'Something Else', 'find_or_create on prefetched has_many with same column names: title matches');
29 }
30
31 # Check that you can specify the alias
32 {
33   my $artist = $schema->resultset('Artist')->find(1);
34
35   my $existing_cd = $artist->search_related('cds', undef, { prefetch => 'tracks' })->find_or_create({
36     'me.title' => 'Something Else',
37     'me.year'  => 2006,
38   });
39   ok(! $existing_cd->is_changed, 'find_or_create on prefetched has_many with same column names: row is clean');
40   is($existing_cd->title, 'Something Else', 'find_or_create on prefetched has_many with same column names: can be disambiguated with "me." for existing entry');
41
42   my $new_cd = $artist->search_related('cds', undef, { prefetch => 'tracks' })->find_or_create({
43     'me.title' => 'Some New Guy',
44     'me.year'  => 2006,
45   });
46   ok(! $new_cd->is_changed, 'find_or_create on prefetched has_many with same column names: row is clean');
47   is($new_cd->title, 'Some New Guy', 'find_or_create on prefetched has_many with same column names: can be disambiguated with "me." for new entry');
48 }
49
50 # Don't pass column names with related alias to new_result
51 {
52   my $cd_rs = $schema->resultset('CD')->search({ 'artist.name' => 'Caterwauler McCrae' }, { join => 'artist' });
53
54   my $cd = $cd_rs->find_or_new({ title => 'Huh?', year => 2006 });
55   ok(! $cd->in_storage, 'new CD not in storage yet');
56   is($cd->title, 'Huh?', 'new CD title is correct');
57   is($cd->year, 2006, 'new CD year is correct');
58 }