4 use RT::Test nodata => 1, tests => 84;
9 my $link = RT::Link->new(RT->SystemUser);
12 isa_ok( $link, 'RT::Link');
13 isa_ok( $link, 'RT::Base');
14 isa_ok( $link, 'RT::Record');
15 isa_ok( $link, 'DBIx::SearchBuilder::Record');
17 my $queue = RT::Test->load_or_create_queue(Name => 'General');
18 ok($queue->Id, "loaded the General queue");
20 my $parent = RT::Ticket->new(RT->SystemUser);
21 my ($pid, undef, $msg) = $parent->Create(
25 ok $pid, 'created a ticket #'. $pid or diag "error: $msg";
27 my $child = RT::Ticket->new(RT->SystemUser);
28 ((my $cid), undef, $msg) = $child->Create(
32 ok $cid, 'created a ticket #'. $cid or diag "error: $msg";
39 ($status, $msg) = $parent->AddLink;
40 } qr/Base or Target must be specified/, "warned about linking a ticket to itself";
41 ok(!$status, "didn't create a link: $msg");
44 ($status, $msg) = $parent->AddLink( Base => $parent->id );
45 } qr/Can't link a ticket to itself/, "warned about linking a ticket to itself";
46 ok(!$status, "didn't create a link: $msg");
49 ($status, $msg) = $parent->AddLink( Base => $parent->id, Type => 'HasMember' );
50 } qr/Can't link a ticket to itself/, "warned about linking a ticket to itself";
51 ok(!$status, "didn't create a link: $msg");
56 my ($status, $msg) = $parent->AddLink(
57 Type => 'MemberOf', Base => $child->id,
59 ok($status, "created a link: $msg");
61 my $children = $parent->Members;
62 $children->RedoSearch; $children->GotoFirstItem;
63 is $children->Count, 1, 'link is there';
65 my $link = $children->First;
66 ok $link->id, 'correct link';
68 is $link->Type, 'MemberOf', 'type';
69 is $link->LocalTarget, $parent->id, 'local target';
70 is $link->LocalBase, $child->id, 'local base';
71 is $link->Target, 'fsck.com-rt://example.com/ticket/'. $parent->id, 'local target';
72 is $link->Base, 'fsck.com-rt://example.com/ticket/'. $child->id, 'local base';
74 isa_ok $link->TargetObj, 'RT::Ticket';
75 is $link->TargetObj->id, $parent->id, 'correct ticket';
77 isa_ok $link->TargetURI, 'RT::URI';
78 is $link->TargetURI->Scheme, 'fsck.com-rt', 'correct scheme';
79 is $link->TargetURI->URI,
80 'fsck.com-rt://example.com/ticket/'. $parent->id,
83 ok $link->TargetURI->IsLocal, 'local object';
84 is $link->TargetURI->AsHREF,
85 RT::Test::Web->rt_base_url .'Ticket/Display.html?id='. $parent->id,
89 isa_ok $link->BaseObj, 'RT::Ticket';
90 is $link->BaseObj->id, $child->id, 'correct ticket';
92 isa_ok $link->BaseURI, 'RT::URI';
93 is $link->BaseURI->Scheme, 'fsck.com-rt', 'correct scheme';
94 is $link->BaseURI->URI,
95 'fsck.com-rt://example.com/ticket/'. $child->id,
98 ok $link->BaseURI->IsLocal, 'local object';
99 is $link->BaseURI->AsHREF,
100 RT::Test::Web->rt_base_url .'Ticket/Display.html?id='. $child->id,
107 my ($status, $msg) = $parent->AddLink(
108 Type => 'MemberOf', Base => $child->URI,
110 ok($status, "created a link: $msg");
112 my $children = $parent->Members;
113 $children->RedoSearch; $children->GotoFirstItem;
114 is $children->Count, 1, 'link is there';
116 my $link = $children->First;
117 ok $link->id, 'correct link';
119 is $link->Type, 'MemberOf', 'type';
120 is $link->LocalTarget, $parent->id, 'local target';
121 is $link->LocalBase, $child->id, 'local base';
122 is $link->Target, 'fsck.com-rt://example.com/ticket/'. $parent->id, 'local target';
123 is $link->Base, 'fsck.com-rt://example.com/ticket/'. $child->id, 'local base';
125 isa_ok $link->TargetObj, 'RT::Ticket';
126 is $link->TargetObj->id, $parent->id, 'correct ticket';
128 isa_ok $link->TargetURI, 'RT::URI';
129 is $link->TargetURI->Scheme, 'fsck.com-rt', 'correct scheme';
130 is $link->TargetURI->URI,
131 'fsck.com-rt://example.com/ticket/'. $parent->id,
134 ok $link->TargetURI->IsLocal, 'local object';
135 is $link->TargetURI->AsHREF,
136 RT::Test::Web->rt_base_url .'Ticket/Display.html?id='. $parent->id,
140 isa_ok $link->BaseObj, 'RT::Ticket';
141 is $link->BaseObj->id, $child->id, 'correct ticket';
143 isa_ok $link->BaseURI, 'RT::URI';
144 is $link->BaseURI->Scheme, 'fsck.com-rt', 'correct scheme';
145 is $link->BaseURI->URI,
146 'fsck.com-rt://example.com/ticket/'. $child->id,
149 ok $link->BaseURI->IsLocal, 'local object';
150 is $link->BaseURI->AsHREF,
151 RT::Test::Web->rt_base_url .'Ticket/Display.html?id='. $child->id,
158 my ($status, $msg) = $parent->AddLink(
159 Type => 'MemberOf', Base => 't:'. $child->id,
161 ok($status, "created a link: $msg");
163 my $children = $parent->Members;
164 $children->RedoSearch; $children->GotoFirstItem;
165 is $children->Count, 1, 'link is there';
167 my $link = $children->First;
168 ok $link->id, 'correct link';
170 is $link->Type, 'MemberOf', 'type';
171 is $link->LocalTarget, $parent->id, 'local target';
172 is $link->LocalBase, $child->id, 'local base';
173 is $link->Target, 'fsck.com-rt://example.com/ticket/'. $parent->id, 'local target';
174 is $link->Base, 'fsck.com-rt://example.com/ticket/'. $child->id, 'local base';
176 isa_ok $link->TargetObj, 'RT::Ticket';
177 is $link->TargetObj->id, $parent->id, 'correct ticket';
179 isa_ok $link->TargetURI, 'RT::URI';
180 is $link->TargetURI->Scheme, 'fsck.com-rt', 'correct scheme';
181 is $link->TargetURI->URI,
182 'fsck.com-rt://example.com/ticket/'. $parent->id,
185 ok $link->TargetURI->IsLocal, 'local object';
186 is $link->TargetURI->AsHREF,
187 RT::Test::Web->rt_base_url .'Ticket/Display.html?id='. $parent->id,
191 isa_ok $link->BaseObj, 'RT::Ticket';
192 is $link->BaseObj->id, $child->id, 'correct ticket';
194 isa_ok $link->BaseURI, 'RT::URI';
195 is $link->BaseURI->Scheme, 'fsck.com-rt', 'correct scheme';
196 is $link->BaseURI->URI,
197 'fsck.com-rt://example.com/ticket/'. $child->id,
200 ok $link->BaseURI->IsLocal, 'local object';
201 is $link->BaseURI->AsHREF,
202 RT::Test::Web->rt_base_url .'Ticket/Display.html?id='. $child->id,
209 $child->SetStatus('deleted');
211 my ($status, $msg) = $parent->AddLink(
212 Type => 'MemberOf', Base => $child->id,
214 ok(!$status, "can't link to deleted ticket: $msg");
216 $child->SetStatus('new');
217 ($status, $msg) = $parent->AddLink(
218 Type => 'MemberOf', Base => $child->id,
220 ok($status, "created a link: $msg");
222 $child->SetStatus('deleted');
223 my $children = $parent->Members;
224 $children->RedoSearch;
227 $total++ while $children->Next;
228 is( $total, 0, 'Next skips deleted tickets' );
230 is( @{ $children->ItemsArrayRef },
231 0, 'ItemsArrayRef skips deleted tickets' );
233 # back to active status
234 $child->SetStatus('new');
238 my $links = RT::Links->new( RT->SystemUser );
240 while ( my $link = $links->Next ) {
241 my ($status, $msg) = $link->Delete;
242 $RT::Logger->error("Couldn't delete a link: $msg")