+ is $link->Type, 'MemberOf', 'type';
+ is $link->LocalTarget, $parent->id, 'local target';
+ is $link->LocalBase, $child->id, 'local base';
+ is $link->Target, 'fsck.com-rt://example.com/ticket/'. $parent->id, 'local target';
+ is $link->Base, 'fsck.com-rt://example.com/ticket/'. $child->id, 'local base';
+
+ isa_ok $link->TargetObj, 'RT::Ticket';
+ is $link->TargetObj->id, $parent->id, 'correct ticket';
+
+ isa_ok $link->TargetURI, 'RT::URI';
+ is $link->TargetURI->Scheme, 'fsck.com-rt', 'correct scheme';
+ is $link->TargetURI->URI,
+ 'fsck.com-rt://example.com/ticket/'. $parent->id,
+ 'correct URI'
+ ;
+ ok $link->TargetURI->IsLocal, 'local object';
+ is $link->TargetURI->AsHREF,
+ RT::Test::Web->rt_base_url .'Ticket/Display.html?id='. $parent->id,
+ 'correct href'
+ ;
+
+ isa_ok $link->BaseObj, 'RT::Ticket';
+ is $link->BaseObj->id, $child->id, 'correct ticket';
+
+ isa_ok $link->BaseURI, 'RT::URI';
+ is $link->BaseURI->Scheme, 'fsck.com-rt', 'correct scheme';
+ is $link->BaseURI->URI,
+ 'fsck.com-rt://example.com/ticket/'. $child->id,
+ 'correct URI'
+ ;
+ ok $link->BaseURI->IsLocal, 'local object';
+ is $link->BaseURI->AsHREF,
+ RT::Test::Web->rt_base_url .'Ticket/Display.html?id='. $child->id,
+ 'correct href'
+ ;
+}
+
+{
+ clean_links();
+ my ($status, $msg) = $parent->AddLink(
+ Type => 'MemberOf', Base => 't:'. $child->id,
+ );
+ ok($status, "created a link: $msg");
+
+ my $children = $parent->Members;
+ $children->RedoSearch; $children->GotoFirstItem;
+ is $children->Count, 1, 'link is there';
+
+ my $link = $children->First;
+ ok $link->id, 'correct link';
+
+ is $link->Type, 'MemberOf', 'type';
+ is $link->LocalTarget, $parent->id, 'local target';
+ is $link->LocalBase, $child->id, 'local base';
+ is $link->Target, 'fsck.com-rt://example.com/ticket/'. $parent->id, 'local target';
+ is $link->Base, 'fsck.com-rt://example.com/ticket/'. $child->id, 'local base';
+
+ isa_ok $link->TargetObj, 'RT::Ticket';
+ is $link->TargetObj->id, $parent->id, 'correct ticket';
+
+ isa_ok $link->TargetURI, 'RT::URI';
+ is $link->TargetURI->Scheme, 'fsck.com-rt', 'correct scheme';
+ is $link->TargetURI->URI,
+ 'fsck.com-rt://example.com/ticket/'. $parent->id,
+ 'correct URI'
+ ;
+ ok $link->TargetURI->IsLocal, 'local object';
+ is $link->TargetURI->AsHREF,
+ RT::Test::Web->rt_base_url .'Ticket/Display.html?id='. $parent->id,
+ 'correct href'
+ ;
+
+ isa_ok $link->BaseObj, 'RT::Ticket';
+ is $link->BaseObj->id, $child->id, 'correct ticket';
+
+ isa_ok $link->BaseURI, 'RT::URI';
+ is $link->BaseURI->Scheme, 'fsck.com-rt', 'correct scheme';
+ is $link->BaseURI->URI,
+ 'fsck.com-rt://example.com/ticket/'. $child->id,
+ 'correct URI'
+ ;
+ ok $link->BaseURI->IsLocal, 'local object';
+ is $link->BaseURI->AsHREF,
+ RT::Test::Web->rt_base_url .'Ticket/Display.html?id='. $child->id,
+ 'correct href'
+ ;
+}
+
+{
+ clean_links();
+ $child->SetStatus('deleted');
+
+ my ($status, $msg) = $parent->AddLink(
+ Type => 'MemberOf', Base => $child->id,
+ );
+ ok(!$status, "can't link to deleted ticket: $msg");
+
+ $child->SetStatus('new');
+ ($status, $msg) = $parent->AddLink(
+ Type => 'MemberOf', Base => $child->id,
+ );
+ ok($status, "created a link: $msg");
+
+ $child->SetStatus('deleted');
+ my $children = $parent->Members;
+ $children->RedoSearch;
+
+ my $total = 0;
+ $total++ while $children->Next;
+ is( $total, 0, 'Next skips deleted tickets' );
+
+ is( @{ $children->ItemsArrayRef },
+ 0, 'ItemsArrayRef skips deleted tickets' );
+
+ # back to active status
+ $child->SetStatus('new');
+}