[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