9 my $schema = DBICTest->init_schema();
10 my $rs = $schema->resultset('CD');
11 my $row = $rs->new_result({});
13 dies_ok { $row->has_relationship_loaded() }
14 'has_relationship_loaded needs a relationship name';
16 ok !$row->has_relationship_loaded($_), "vanilla row has no loaded relationship '$_'"
17 for $row->result_source->relationships;
19 # Prefetch of single belongs_to relationship
21 my $prefetched_rs = $rs->search_rs(undef, { prefetch => 'artist' });
22 my $cd = $prefetched_rs->find(1);
23 ok $cd->has_relationship_loaded('artist'), 'belongs_to relationship with related row detected by has_relationship_loaded';
26 # Prefetch of single might_have relationship
28 my $prefetched_rs = $rs->search_rs(undef, { prefetch => 'liner_notes' });
29 my $cd_without_liner_notes = $prefetched_rs->find(1);
30 ok $cd_without_liner_notes->has_relationship_loaded('liner_notes'), 'might_have relationship without related row detected by has_relationship_loaded';
31 my $cd_with_liner_notes = $prefetched_rs->find(2);
32 ok $cd_with_liner_notes->has_relationship_loaded('liner_notes'), 'might_have relationship with related row detected by has_relationship_loaded';
35 # Prefetch of single has_many relationship
37 my $prefetched_rs = $rs->search_rs(undef, { prefetch => 'tracks' });
38 my $cd_without_tracks = $prefetched_rs->create({
43 ok $cd_without_tracks->has_relationship_loaded('tracks'), 'has_many relationship without related row detected by has_relationship_loaded';
44 my $cd_with_tracks = $prefetched_rs->find(2);
45 ok $cd_with_tracks->has_relationship_loaded('tracks'), 'has_many relationship with related row detected by has_relationship_loaded';
48 # Prefetch of multiple relationships
50 my $prefetched = $rs->search_rs(undef, { prefetch => ['artist', 'tracks'] })->find(1);
51 ok $prefetched->has_relationship_loaded('artist'), 'first prefetch detected by has_relationship_loaded';
52 ok $prefetched->has_relationship_loaded('tracks'), 'second prefetch detected by has_relationship_loaded';
53 ok !$prefetched->tracks->first->has_relationship_loaded('single_cd'), 'nested not prefetched rel detected by has_relationship_loaded';
56 # Prefetch of nested relationships
58 my $prefetched = $schema->resultset('Artist')->search_rs(undef, { prefetch => {'cds' => 'tracks'} })->find(1);
59 ok $prefetched->has_relationship_loaded('cds'), 'direct prefetch detected by has_relationship_loaded';
60 ok $prefetched->cds->first->has_relationship_loaded('tracks'), 'nested prefetch detected by has_relationship_loaded';
61 ok !$prefetched->cds->first->has_relationship_loaded('single_track'), 'nested not prefetched rel detected by has_relationship_loaded';
66 my $cd_with_tracks = $rs->new({
68 title => 'CD with tracks',
73 title => 'first track',
77 title => 'second track',
81 ok !$cd_with_tracks->has_relationship_loaded('artist'), 'multinew: not created rel detected by has_relationship_loaded';
82 ok $cd_with_tracks->has_relationship_loaded('tracks'), 'multinew: created rel detected by has_relationship_loaded';
83 # fails because $cd_with_tracks->tracks->first returns undef
84 # ok !$cd_with_tracks->tracks->first->has_relationship_loaded('cd'), 'multinew: nested not created rel detected by has_relationship_loaded';
89 my $cd_with_tracks = $rs->create({
91 title => 'CD with tracks',
96 title => 'first track',
100 title => 'second track',
104 ok !$cd_with_tracks->has_relationship_loaded('artist'), 'multicreate: not created rel detected by has_relationship_loaded';
105 ok $cd_with_tracks->has_relationship_loaded('tracks'), 'multicreate: created rel detected by has_relationship_loaded';
106 ok !$cd_with_tracks->tracks->first->has_relationship_loaded('cd'), 'multicreate: nested not created rel detected by has_relationship_loaded';