[Rt-commit] rt branch, 4.0/forbid-linking-deleted-tickets, updated. rt-4.0.0-190-g81fdc25

? sunnavy sunnavy at bestpractical.com
Mon May 9 03:40:38 EDT 2011


The branch, 4.0/forbid-linking-deleted-tickets has been updated
       via  81fdc254820c40bf41aa61b73a8189b6cd2ae787 (commit)
       via  42404aeeefd1a3a13458e2b6485fc599056caeb3 (commit)
      from  abbdf26605d5c6277145ca0fa09a9aee755edede (commit)

Summary of changes:
 lib/RT/Ticket.pm     |   22 +++++++---
 t/web/ticket_links.t |  111 ++++++++++++++++++++++++++++++-------------------
 2 files changed, 84 insertions(+), 49 deletions(-)

- Log -----------------------------------------------------------------
commit 42404aeeefd1a3a13458e2b6485fc599056caeb3
Author: sunnavy <sunnavy at bestpractical.com>
Date:   Mon May 9 15:28:59 2011 +0800

    forbid to link to deleted tickets, as we don't show them in page either. see also #17013

diff --git a/lib/RT/Ticket.pm b/lib/RT/Ticket.pm
index 3ad34cc..16225ec 100644
--- a/lib/RT/Ticket.pm
+++ b/lib/RT/Ticket.pm
@@ -613,20 +613,27 @@ sub Create {
         foreach my $link (
             ref( $args{$type} ) ? @{ $args{$type} } : ( $args{$type} ) )
         {
+            my ( $val, $msg, $obj ) = $self->__GetTicketFromURI( URI => $link );
+            unless ($val) {
+                push @non_fatal_errors, $msg;
+                next;
+            }
+
             # Check rights on the other end of the link if we must
             # then run _AddLink that doesn't check for ACLs
             if ( RT->Config->Get( 'StrictLinkACL' ) ) {
-                my ($val, $msg, $obj) = $self->__GetTicketFromURI( URI => $link );
-                unless ( $val ) {
-                    push @non_fatal_errors, $msg;
-                    next;
-                }
                 if ( $obj && !$obj->CurrentUserHasRight('ModifyTicket') ) {
                     push @non_fatal_errors, $self->loc('Linking. Permission denied');
                     next;
                 }
             }
-            
+
+            if ( $obj && $obj->Status eq 'deleted' ) {
+                push @non_fatal_errors,
+                  $self->loc("Linking. Can't link to a deleted ticket");
+                next;
+            }
+
             my ( $wval, $wmsg ) = $self->_AddLink(
                 Type                          => $LINKTYPEMAP{$type}->{'Type'},
                 $LINKTYPEMAP{$type}->{'Mode'} => $link,
@@ -2498,6 +2505,9 @@ sub AddLink {
         return ( 0, $self->loc("Permission Denied") );
     }
 
+    return ( 0, "Can't link to a deleted ticket" )
+      if $other_ticket && $other_ticket->Status eq 'deleted';
+
     return $self->_AddLink(%args);
 }
 

commit 81fdc254820c40bf41aa61b73a8189b6cd2ae787
Author: sunnavy <sunnavy at bestpractical.com>
Date:   Mon May 9 15:29:40 2011 +0800

    test linknig deleted tickets

diff --git a/t/web/ticket_links.t b/t/web/ticket_links.t
index 4071dde..ffa83ee 100644
--- a/t/web/ticket_links.t
+++ b/t/web/ticket_links.t
@@ -1,12 +1,12 @@
 use strict;
 use warnings;
-use RT::Test tests => 73;
+use RT::Test tests => 97;
 
 my ( $baseurl, $m ) = RT::Test->started_ok;
 ok( $m->login, "Logged in" );
 
 my $queue = RT::Test->load_or_create_queue( Name => 'General' );
-ok( $queue->Id, "loaded the General queue" );
+ok( $queue->id, "loaded the General queue" );
 
 my ( $deleted, $active, $inactive ) = RT::Test->create_tickets(
     { Queue   => 'General' },
@@ -26,51 +26,75 @@ is( $inactive->Status, 'resolved', 'resolved $inactive_id' );
 
 for my $type ( "DependsOn", "MemberOf", "RefersTo" ) {
     for my $c (qw/base target/) {
-        my $ticket = RT::Test->create_ticket(
-            Queue   => 'General',
-            Subject => "test $type $c",
-        );
-        my $id = $ticket->id;
+        my $id;
 
-        $m->goto_ticket($id);
-        $m->follow_link_ok( { text => 'Links' }, "Followed link to Links" );
+        diag "create ticket with links of type $type $c";
+        {
+            ok( $m->goto_create_ticket($queue), "go to create ticket" );
+            $m->form_name('TicketCreate');
+            $m->field( Subject => "test ticket creation with $type $c" );
+            if ( $c eq 'base' ) {
+                $m->field( "new-$type", "$deleted_id $active_id $inactive_id" );
+            }
+            else {
+                $m->field( "$type-new", "$deleted_id $active_id $inactive_id" );
+            }
 
-        ok( $m->form_with_fields("$id-DependsOn"), "found the form" );
-        if ( $c eq 'base' ) {
-            $m->field( "$id-$type", "$deleted_id $active_id $inactive_id" );
+            $m->submit;
+            $m->content_like(qr/Ticket \d+ created/, 'created ticket');
+            $m->content_contains("Can&#39;t link to a deleted ticket");
+            $id = RT::Test->last_ticket->id;
         }
-        else {
-            $m->field( "$type-$id", "$deleted_id $active_id $inactive_id" );
-        }
-        $m->submit;
 
-        if ( $c eq 'base' ) {
-            $m->content_like(
-                qr{"DeleteLink--$type-.*?ticket/$active_id"},
-                "$c for $type: has active ticket",
-            );
-            $m->content_like(
-                qr{"DeleteLink--$type-.*?ticket/$inactive_id"},
-                "base for $type: has inactive ticket",
-            );
-            $m->content_unlike(
-                qr{"DeleteLink--$type-.*?ticket/$deleted_id"},
-                "base for $type: no deleted ticket",
-            );
-        }
-        else {
-            $m->content_like(
-                qr{"DeleteLink-.*?ticket/$active_id-$type-"},
-                "$c for $type: has active ticket",
-            );
-            $m->content_like(
-                qr{"DeleteLink-.*?ticket/$inactive_id-$type-"},
-                "base for $type: has inactive ticket",
-            );
-            $m->content_unlike(
-                qr{"DeleteLink-.*?ticket/$deleted_id-$type-"},
-                "base for $type: no deleted ticket",
+        diag "add ticket links of type $type $c";
+        {
+            my $ticket = RT::Test->create_ticket(
+                Queue   => 'General',
+                Subject => "test $type $c",
             );
+            $id = $ticket->id;
+
+            $m->goto_ticket($id);
+            $m->follow_link_ok( { text => 'Links' }, "Followed link to Links" );
+
+            ok( $m->form_with_fields("$id-DependsOn"), "found the form" );
+            if ( $c eq 'base' ) {
+                $m->field( "$id-$type", "$deleted_id $active_id $inactive_id" );
+            }
+            else {
+                $m->field( "$type-$id", "$deleted_id $active_id $inactive_id" );
+            }
+            $m->submit;
+            $m->content_contains("Can&#39;t link to a deleted ticket");
+
+            if ( $c eq 'base' ) {
+                $m->content_like(
+                    qr{"DeleteLink--$type-.*?ticket/$active_id"},
+                    "$c for $type: has active ticket",
+                );
+                $m->content_like(
+                    qr{"DeleteLink--$type-.*?ticket/$inactive_id"},
+                    "base for $type: has inactive ticket",
+                );
+                $m->content_unlike(
+                    qr{"DeleteLink--$type-.*?ticket/$deleted_id"},
+                    "base for $type: no deleted ticket",
+                );
+            }
+            else {
+                $m->content_like(
+                    qr{"DeleteLink-.*?ticket/$active_id-$type-"},
+                    "$c for $type: has active ticket",
+                );
+                $m->content_like(
+                    qr{"DeleteLink-.*?ticket/$inactive_id-$type-"},
+                    "base for $type: has inactive ticket",
+                );
+                $m->content_unlike(
+                    qr{"DeleteLink-.*?ticket/$deleted_id-$type-"},
+                    "base for $type: no deleted ticket",
+                );
+            }
         }
 
         $m->goto_ticket($id);
@@ -79,7 +103,8 @@ for my $type ( "DependsOn", "MemberOf", "RefersTo" ) {
             qr{$inactive_id:.*?\[resolved\]},
             "has inactive ticket",
         );
-        $m->content_unlike( qr{$deleted_id.*?\[deleted\]}, "no deleted ticket", );
+        $m->content_unlike( qr{$deleted_id.*?\[deleted\]}, "no deleted ticket",
+        );
     }
 }
 

-----------------------------------------------------------------------


More information about the Rt-commit mailing list