[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'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'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