[Rt-commit] rt branch, 4.0/apply-scrips-to-multiple-queues, updated. rt-4.0.4-175-g1d9235f
Ruslan Zakirov
ruz at bestpractical.com
Mon Jan 9 08:57:02 EST 2012
The branch, 4.0/apply-scrips-to-multiple-queues has been updated
via 1d9235fbf96df3aa0ca5c19d37659d6d3b820a8b (commit)
via 9169d10222e2cb0f1835395eef34120b8e7f5196 (commit)
via 372f25884f8e6f273f1681219d5444f9a5c3fbcd (commit)
via 12593a58c3de3e51632b7f5ba1b050ba4c8ad28d (commit)
via 6b1d6b9629486c27b15bffc54cbb06708958330a (commit)
from 1dd9544bca48822e89a8e2082235ca47f3698593 (commit)
Summary of changes:
lib/RT/ObjectScrip.pm | 1 +
lib/RT/Scrip.pm | 42 ++++++++++++++-
t/api/scrip.t | 144 ++++++++++++++++++++++++++++++++++++------------
3 files changed, 149 insertions(+), 38 deletions(-)
- Log -----------------------------------------------------------------
commit 6b1d6b9629486c27b15bffc54cbb06708958330a
Author: Ruslan Zakirov <ruz at bestpractical.com>
Date: Mon Jan 9 16:32:11 2012 +0400
check rights when we apply/remove scrips to/from queues
diff --git a/lib/RT/Scrip.pm b/lib/RT/Scrip.pm
index c979d2b..5417182 100644
--- a/lib/RT/Scrip.pm
+++ b/lib/RT/Scrip.pm
@@ -243,16 +243,42 @@ sub AddToObject {
my $self = shift;
my %args = @_%2? (ObjectId => @_) : (@_);
+ my $queue;
+ if ( $args{'ObjectId'} ) {
+ $queue = RT::Queue->new( $self->CurrentUser );
+ $queue->Load( $args{'ObjectId'} );
+ return (0, $self->loc('Invalid queue'))
+ unless $queue->id;
+ }
+ return ( 0, $self->loc('Permission Denied') )
+ unless $self->CurrentUser->PrincipalObj->HasRight(
+ Object => $queue || $RT::System, Right => 'ModifyScrips',
+ )
+ ;
+
my $rec = RT::ObjectScrip->new( $self->CurrentUser );
return $rec->Apply( %args, Scrip => $self );
}
sub RemoveFromObject {
my $self = shift;
- my $object = shift;
+ my %args = @_%2? (ObjectId => @_) : (@_);
+
+ my $queue;
+ if ( $args{'ObjectId'} ) {
+ $queue = RT::Queue->new( $self->CurrentUser );
+ $queue->Load( $args{'ObjectId'} );
+ return (0, $self->loc('Invalid queue id'))
+ unless $queue->id;
+ }
+ return ( 0, $self->loc('Permission Denied') )
+ unless $self->CurrentUser->PrincipalObj->HasRight(
+ Object => $queue || $RT::System, Right => 'ModifyScrips',
+ )
+ ;
my $rec = RT::ObjectScrip->new( $self->CurrentUser );
- $rec->LoadByCols( Scrip => $self->id, ObjectId => $object );
+ $rec->LoadByCols( Scrip => $self->id, ObjectId => $args{'ObjectId'} );
return (0, $self->loc('Scrip is not applied') ) unless $rec->id;
return $rec->Delete;
}
commit 12593a58c3de3e51632b7f5ba1b050ba4c8ad28d
Author: Ruslan Zakirov <ruz at bestpractical.com>
Date: Mon Jan 9 17:54:21 2012 +0400
tidy test file
diff --git a/t/api/scrip.t b/t/api/scrip.t
index eb54347..147dc79 100644
--- a/t/api/scrip.t
+++ b/t/api/scrip.t
@@ -4,46 +4,39 @@ use warnings;
use RT;
use RT::Test tests => 25;
+my $queue = RT::Test->load_or_create_queue( Name => 'General' );
+ok $queue && $queue->id, 'loaded or created queue';
+note 'basic scrips functionality test: create+execute';
{
-
-ok (require RT::Scrip);
-
-
-my $q = RT::Queue->new(RT->SystemUser);
-$q->Create(Name => 'ScripTest');
-ok($q->Id, "Created a scriptest queue");
-
-my $s1 = RT::Scrip->new(RT->SystemUser);
-my ($val, $msg) =$s1->Create( Queue => $q->Id,
- ScripAction => 'User Defined',
- ScripCondition => 'User Defined',
- CustomIsApplicableCode => 'if ($self->TicketObj->Subject =~ /fire/) { return (1);} else { return(0)}',
- CustomPrepareCode => 'return 1',
- CustomCommitCode => '$self->TicketObj->SetPriority("87");',
- Template => 'Blank'
+ my $s1 = RT::Scrip->new(RT->SystemUser);
+ my ($val, $msg) = $s1->Create(
+ Queue => $queue->Id,
+ ScripAction => 'User Defined',
+ ScripCondition => 'User Defined',
+ CustomIsApplicableCode => '$self->TicketObj->Subject =~ /fire/? 1 : 0',
+ CustomPrepareCode => 'return 1',
+ CustomCommitCode => '$self->TicketObj->SetPriority("87");',
+ Template => 'Blank'
);
-ok($val,$msg);
-
-my $ticket = RT::Ticket->new(RT->SystemUser);
-my ($tv,$ttv,$tm) = $ticket->Create(Queue => $q->Id,
- Subject => "hair on fire",
- );
-ok($tv, $tm);
-
-is ($ticket->Priority , '87', "Ticket priority is set right");
-
-
-my $ticket2 = RT::Ticket->new(RT->SystemUser);
-my ($t2v,$t2tv,$t2m) = $ticket2->Create(Queue => $q->Id,
- Subject => "hair in water",
- );
-ok($t2v, $t2m);
-
-isnt ($ticket2->Priority , '87', "Ticket priority is set right");
+ ok($val,$msg);
+ my $ticket = RT::Ticket->new(RT->SystemUser);
+ my ($tv,$ttv,$tm) = $ticket->Create(
+ Queue => $queue->Id,
+ Subject => "hair on fire",
+ );
+ ok($tv, $tm);
+ is ($ticket->Priority , '87', "Ticket priority is set right");
+ my $ticket2 = RT::Ticket->new(RT->SystemUser);
+ my ($t2v,$t2tv,$t2m) = $ticket2->Create(
+ Queue => $queue->Id,
+ Subject => "hair in water",
+ );
+ ok($t2v, $t2m);
+ isnt ($ticket2->Priority , '87', "Ticket priority is set right");
}
commit 372f25884f8e6f273f1681219d5444f9a5c3fbcd
Author: Ruslan Zakirov <ruz at bestpractical.com>
Date: Mon Jan 9 17:55:04 2012 +0400
check that template exists when we apply scrip
diff --git a/lib/RT/Scrip.pm b/lib/RT/Scrip.pm
index 5417182..7086af5 100644
--- a/lib/RT/Scrip.pm
+++ b/lib/RT/Scrip.pm
@@ -256,6 +256,18 @@ sub AddToObject {
)
;
+ my $tname = $self->TemplateObj->Name;
+ my $template = RT::Template->new( $self->CurrentUser );
+ $template->LoadQueueTemplate( Queue => $queue? $queue->id : 0, Name => $tname );
+ $template->LoadGlobalTemplate( $tname ) if $queue && !$template->id;
+ unless ( $template->id ) {
+ if ( $queue ) {
+ return (0, $self->loc('No template [_1] in the queue', $tname));
+ } else {
+ return (0, $self->loc('No global template [_1]', $tname));
+ }
+ }
+
my $rec = RT::ObjectScrip->new( $self->CurrentUser );
return $rec->Apply( %args, Scrip => $self );
}
commit 9169d10222e2cb0f1835395eef34120b8e7f5196
Author: Ruslan Zakirov <ruz at bestpractical.com>
Date: Mon Jan 9 17:55:34 2012 +0400
test adding/removing scrips from queues
diff --git a/t/api/scrip.t b/t/api/scrip.t
index 147dc79..df15599 100644
--- a/t/api/scrip.t
+++ b/t/api/scrip.t
@@ -2,7 +2,7 @@
use strict;
use warnings;
use RT;
-use RT::Test tests => 25;
+use RT::Test tests => 61;
my $queue = RT::Test->load_or_create_queue( Name => 'General' );
ok $queue && $queue->id, 'loaded or created queue';
@@ -39,7 +39,7 @@ note 'basic scrips functionality test: create+execute';
isnt ($ticket2->Priority , '87', "Ticket priority is set right");
}
-
+note 'modify properties of a scrip';
{
my $scrip = RT::Scrip->new($RT::SystemUser);
my ( $val, $msg ) = $scrip->Create(
@@ -110,3 +110,82 @@ note 'basic scrips functionality test: create+execute';
ok( $scrip->Delete, 'delete the scrip' );
}
+
+my $queue_B = RT::Test->load_or_create_queue( Name => 'B' );
+ok $queue_B && $queue_B->id, 'loaded or created queue';
+
+note 'check applications vs. templates';
+{
+ my $template = RT::Template->new( RT->SystemUser );
+ my ($status, $msg) = $template->Create( Queue => $queue->id, Name => 'foo' );
+ ok $status, 'created a template';
+
+ my $scrip = RT::Scrip->new(RT->SystemUser);
+ ($status, $msg) = $scrip->Create(
+ Queue => $queue->Id,
+ ScripAction => 'User Defined',
+ ScripCondition => 'User Defined',
+ Template => 'bar',
+ );
+ ok(!$status, "couldn't create scrip, incorrect template");
+
+ ($status, $msg) = $scrip->Create(
+ Queue => $queue->Id,
+ ScripAction => 'User Defined',
+ ScripCondition => 'User Defined',
+ Template => 'foo',
+ );
+ ok($status, 'created a scrip') or diag "error: $msg";
+ main->check_applications($scrip, [$queue], [0, $queue_B]);
+
+ ($status, $msg) = $scrip->AddToObject( $queue_B->id );
+ ok(!$status, $msg);
+ main->check_applications($scrip, [$queue], [0, $queue_B]);
+
+ $template = RT::Template->new( RT->SystemUser );
+ ($status, $msg) = $template->Create( Queue => $queue_B->id, Name => 'foo' );
+ ok $status, 'created a template';
+
+ ($status, $msg) = $scrip->AddToObject( $queue_B->id );
+ ok($status, 'added scrip to another queue');
+ main->check_applications($scrip, [$queue, $queue_B], [0]);
+
+ ($status, $msg) = $scrip->RemoveFromObject( $queue_B->id );
+ ok($status, 'removed scrip from queue');
+
+ ($status, $msg) = $template->Delete;
+ ok $status, 'deleted template foo in queue B';
+
+ ($status, $msg) = $scrip->AddToObject( $queue_B->id );
+ ok(!$status, $msg);
+ main->check_applications($scrip, [$queue], [0, $queue_B]);
+
+ ($status, $msg) = $template->Create( Queue => 0, Name => 'foo' );
+ ok $status, 'created a global template';
+
+ ($status, $msg) = $scrip->AddToObject( $queue_B->id );
+ ok($status, 'added scrip');
+ main->check_applications($scrip, [$queue, $queue_B], [0]);
+}
+
+sub check_applications {
+ local $Test::Builder::Level = $Test::Builder::Level + 1;
+ my $self = shift;
+ my $scrip = shift;
+ my $to = shift || [];
+ my $not_to = shift || [];
+
+ ok($scrip->IsAdded(ref $_? $_->id : $_), 'added to queue' ) foreach @$to;
+ ok(!$scrip->IsAdded(ref $_? $_->id : $_), 'not added' ) foreach @$not_to;
+ is_deeply(
+ [sort map $_->id, @{ $scrip->AddedTo->ItemsArrayRef }],
+ [sort grep $_, map ref $_? $_->id : $_, @$to],
+ 'correct list of queues',
+ );
+ is_deeply(
+ [sort map $_->id, @{ $scrip->NotAddedTo->ItemsArrayRef }],
+ [sort grep $_, map ref $_? $_->id : $_, @$not_to],
+ 'correct list of queues',
+ );
+}
+
commit 1d9235fbf96df3aa0ca5c19d37659d6d3b820a8b
Author: Ruslan Zakirov <ruz at bestpractical.com>
Date: Mon Jan 9 17:56:17 2012 +0400
not sure why, undef is not replaced with default
diff --git a/lib/RT/ObjectScrip.pm b/lib/RT/ObjectScrip.pm
index 5059819..309a50f 100644
--- a/lib/RT/ObjectScrip.pm
+++ b/lib/RT/ObjectScrip.pm
@@ -13,6 +13,7 @@ sub ObjectCollectionClass {'RT::Queues'}
sub Create {
my $self = shift;
my %args = (@_);
+ $args{'Stage'} ||= 'TransactionCreate'; #XXX: why don't we turn undef into default?
return $self->SUPER::Create(
map { $_ => $args{ $_ } } qw(
Scrip Stage ObjectId
-----------------------------------------------------------------------
More information about the Rt-commit
mailing list