4 use RT::Test nodata => 1, tests => 83;
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";
38 ($status, $msg) = $parent->AddLink;
39 ok(!$status, "didn't create a link: $msg");
42 ($status, $msg) = $parent->AddLink( Base => $parent->id );
43 } qr/Can't link a ticket to itself/, "warned about linking a ticket to itself";
44 ok(!$status, "didn't create a link: $msg");
47 ($status, $msg) = $parent->AddLink( Base => $parent->id, Type => 'HasMember' );
48 } qr/Can't link a ticket to itself/, "warned about linking a ticket to itself";
49 ok(!$status, "didn't create a link: $msg");
54 my ($status, $msg) = $parent->AddLink(
55 Type => 'MemberOf', Base => $child->id,
57 ok($status, "created a link: $msg");
59 my $children = $parent->Members;
60 $children->RedoSearch; $children->GotoFirstItem;
61 is $children->Count, 1, 'link is there';
63 my $link = $children->First;
64 ok $link->id, 'correct link';
66 is $link->Type, 'MemberOf', 'type';
67 is $link->LocalTarget, $parent->id, 'local target';
68 is $link->LocalBase, $child->id, 'local base';
69 is $link->Target, 'fsck.com-rt://example.com/ticket/'. $parent->id, 'local target';
70 is $link->Base, 'fsck.com-rt://example.com/ticket/'. $child->id, 'local base';
72 isa_ok $link->TargetObj, 'RT::Ticket';
73 is $link->TargetObj->id, $parent->id, 'correct ticket';
75 isa_ok $link->TargetURI, 'RT::URI';
76 is $link->TargetURI->Scheme, 'fsck.com-rt', 'correct scheme';
77 is $link->TargetURI->URI,
78 'fsck.com-rt://example.com/ticket/'. $parent->id,
81 ok $link->TargetURI->IsLocal, 'local object';
82 is $link->TargetURI->AsHREF,
83 RT::Test::Web->rt_base_url .'Ticket/Display.html?id='. $parent->id,
87 isa_ok $link->BaseObj, 'RT::Ticket';
88 is $link->BaseObj->id, $child->id, 'correct ticket';
90 isa_ok $link->BaseURI, 'RT::URI';
91 is $link->BaseURI->Scheme, 'fsck.com-rt', 'correct scheme';
92 is $link->BaseURI->URI,
93 'fsck.com-rt://example.com/ticket/'. $child->id,
96 ok $link->BaseURI->IsLocal, 'local object';
97 is $link->BaseURI->AsHREF,
98 RT::Test::Web->rt_base_url .'Ticket/Display.html?id='. $child->id,
105 my ($status, $msg) = $parent->AddLink(
106 Type => 'MemberOf', Base => $child->URI,
108 ok($status, "created a link: $msg");
110 my $children = $parent->Members;
111 $children->RedoSearch; $children->GotoFirstItem;
112 is $children->Count, 1, 'link is there';
114 my $link = $children->First;
115 ok $link->id, 'correct link';
117 is $link->Type, 'MemberOf', 'type';
118 is $link->LocalTarget, $parent->id, 'local target';
119 is $link->LocalBase, $child->id, 'local base';
120 is $link->Target, 'fsck.com-rt://example.com/ticket/'. $parent->id, 'local target';
121 is $link->Base, 'fsck.com-rt://example.com/ticket/'. $child->id, 'local base';
123 isa_ok $link->TargetObj, 'RT::Ticket';
124 is $link->TargetObj->id, $parent->id, 'correct ticket';
126 isa_ok $link->TargetURI, 'RT::URI';
127 is $link->TargetURI->Scheme, 'fsck.com-rt', 'correct scheme';
128 is $link->TargetURI->URI,
129 'fsck.com-rt://example.com/ticket/'. $parent->id,
132 ok $link->TargetURI->IsLocal, 'local object';
133 is $link->TargetURI->AsHREF,
134 RT::Test::Web->rt_base_url .'Ticket/Display.html?id='. $parent->id,
138 isa_ok $link->BaseObj, 'RT::Ticket';
139 is $link->BaseObj->id, $child->id, 'correct ticket';
141 isa_ok $link->BaseURI, 'RT::URI';
142 is $link->BaseURI->Scheme, 'fsck.com-rt', 'correct scheme';
143 is $link->BaseURI->URI,
144 'fsck.com-rt://example.com/ticket/'. $child->id,
147 ok $link->BaseURI->IsLocal, 'local object';
148 is $link->BaseURI->AsHREF,
149 RT::Test::Web->rt_base_url .'Ticket/Display.html?id='. $child->id,
156 my ($status, $msg) = $parent->AddLink(
157 Type => 'MemberOf', Base => 't:'. $child->id,
159 ok($status, "created a link: $msg");
161 my $children = $parent->Members;
162 $children->RedoSearch; $children->GotoFirstItem;
163 is $children->Count, 1, 'link is there';
165 my $link = $children->First;
166 ok $link->id, 'correct link';
168 is $link->Type, 'MemberOf', 'type';
169 is $link->LocalTarget, $parent->id, 'local target';
170 is $link->LocalBase, $child->id, 'local base';
171 is $link->Target, 'fsck.com-rt://example.com/ticket/'. $parent->id, 'local target';
172 is $link->Base, 'fsck.com-rt://example.com/ticket/'. $child->id, 'local base';
174 isa_ok $link->TargetObj, 'RT::Ticket';
175 is $link->TargetObj->id, $parent->id, 'correct ticket';
177 isa_ok $link->TargetURI, 'RT::URI';
178 is $link->TargetURI->Scheme, 'fsck.com-rt', 'correct scheme';
179 is $link->TargetURI->URI,
180 'fsck.com-rt://example.com/ticket/'. $parent->id,
183 ok $link->TargetURI->IsLocal, 'local object';
184 is $link->TargetURI->AsHREF,
185 RT::Test::Web->rt_base_url .'Ticket/Display.html?id='. $parent->id,
189 isa_ok $link->BaseObj, 'RT::Ticket';
190 is $link->BaseObj->id, $child->id, 'correct ticket';
192 isa_ok $link->BaseURI, 'RT::URI';
193 is $link->BaseURI->Scheme, 'fsck.com-rt', 'correct scheme';
194 is $link->BaseURI->URI,
195 'fsck.com-rt://example.com/ticket/'. $child->id,
198 ok $link->BaseURI->IsLocal, 'local object';
199 is $link->BaseURI->AsHREF,
200 RT::Test::Web->rt_base_url .'Ticket/Display.html?id='. $child->id,
207 $child->SetStatus('deleted');
209 my ($status, $msg) = $parent->AddLink(
210 Type => 'MemberOf', Base => $child->id,
212 ok(!$status, "can't link to deleted ticket: $msg");
214 $child->SetStatus('new');
215 ($status, $msg) = $parent->AddLink(
216 Type => 'MemberOf', Base => $child->id,
218 ok($status, "created a link: $msg");
220 $child->SetStatus('deleted');
221 my $children = $parent->Members;
222 $children->RedoSearch;
225 $total++ while $children->Next;
226 is( $total, 0, 'Next skips deleted tickets' );
228 is( @{ $children->ItemsArrayRef },
229 0, 'ItemsArrayRef skips deleted tickets' );
231 # back to active status
232 $child->SetStatus('new');
236 my $links = RT::Links->new( RT->SystemUser );
238 while ( my $link = $links->Next ) {
239 my ($status, $msg) = $link->Delete;
240 $RT::Logger->error("Couldn't delete a link: $msg")