X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=rt%2Flib%2Ft%2Fregression%2F14linking.t;h=c8e57eaddbfc3e95c42f877df7831c932fd75972;hp=6fdf61405a342e303f018046e52e7728a63b5171;hb=ef20b2b6b1feb47ad02b5ff7525f1a0fd11d0fa4;hpb=a513c0bef534d05f03c1242831b6f3be19b97dae diff --git a/rt/lib/t/regression/14linking.t b/rt/lib/t/regression/14linking.t index 6fdf61405..c8e57eadd 100644 --- a/rt/lib/t/regression/14linking.t +++ b/rt/lib/t/regression/14linking.t @@ -1,4 +1,4 @@ -use Test::More tests => '39'; +use Test::More tests => '70'; use_ok('RT'); use_ok('RT::Ticket'); use_ok('RT::ScripConditions'); @@ -12,7 +12,9 @@ RT::Init(); use File::Temp qw/tempfile/; my ($fh, $filename) = tempfile( UNLINK => 1, SUFFIX => '.rt'); my $link_scrips_orig = $RT::LinkTransactionsRun1Scrip; +my $link_acl_chacks_orig = $RT::StrictLinkACL; $RT::LinkTransactionsRun1Scrip = 1; +$RT::StrictLinkACL = 1; my $condition = RT::ScripCondition->new( $RT::SystemUser ); $condition->Load('User Defined'); @@ -68,32 +70,123 @@ my $scrip = RT::Scrip->new($RT::SystemUser); ok($id, "Scrip created"); my $u1 = RT::User->new($RT::SystemUser); -($id,$msg) =$u1->Create(Name => "LinkTestUser.$$"); - +($id,$msg) = $u1->Create(Name => "LinkTestUser.$$"); ok ($id,$msg); +my $creator = RT::CurrentUser->new($u1->id); + ($id,$msg) = $u1->PrincipalObj->GrantRight ( Object => $q1, Right => 'CreateTicket'); ok ($id,$msg); + +diag('Create tickets without rights to link') if $ENV{'TEST_VERBOSE'}; +{ + # on q2 we have no rights, yet + my $parent = RT::Ticket->new( $RT::SystemUser ); + ($id,$tid,$msg) = $parent->Create( Subject => 'Link test 1', Queue => $q2->id ); + ok($id,$msg); + my $child = RT::Ticket->new( $creator ); + ($id,$tid,$msg) = $child->Create( Subject => 'Link test 1', Queue => $q1->id, MemberOf => $parent->id ); + ok($id,$msg); + $child->CurrentUser( $RT::SystemUser ); + is($child->_Links('Base')->Count, 0, 'link was not created, no permissions'); + is($child->_Links('Target')->Count, 0, 'link was not create, no permissions'); +} + +diag('Create tickets with rights checks on one end of a link') if $ENV{'TEST_VERBOSE'}; +{ + # on q2 we have no rights, but use checking one only on thing + local $RT::StrictLinkACL = 0; + my $parent = RT::Ticket->new( $RT::SystemUser ); + ($id,$tid,$msg) = $parent->Create( Subject => 'Link test 1', Queue => $q2->id ); + ok($id,$msg); + my $child = RT::Ticket->new( $creator ); + ($id,$tid,$msg) = $child->Create( Subject => 'Link test 1', Queue => $q1->id, MemberOf => $parent->id ); + ok($id,$msg); + $child->CurrentUser( $RT::SystemUser ); + is($child->_Links('Base')->Count, 1, 'link was created'); + is($child->_Links('Target')->Count, 0, 'link was created only one'); + # no scrip run on second ticket accroding to config option + is(link_count($filename), 0, "scrips ok"); +} + ($id,$msg) = $u1->PrincipalObj->GrantRight ( Object => $q1, Right => 'ModifyTicket'); ok ($id,$msg); -my $tid; +diag('try to add link without rights') if $ENV{'TEST_VERBOSE'}; +{ + # on q2 we have no rights, yet + my $parent = RT::Ticket->new( $RT::SystemUser ); + ($id,$tid,$msg) = $parent->Create( Subject => 'Link test 1', Queue => $q2->id ); + ok($id,$msg); + my $child = RT::Ticket->new( $creator ); + ($id,$tid,$msg) = $child->Create( Subject => 'Link test 1', Queue => $q1->id ); + ok($id,$msg); + my ($id, $msg) = $child->AddLink(Type => 'MemberOf', Target => $parent->id); + ok(!$id, $msg); + is(link_count($filename), 0, "scrips ok"); + $child->CurrentUser( $RT::SystemUser ); + is($child->_Links('Base')->Count, 0, 'link was not created, no permissions'); + is($child->_Links('Target')->Count, 0, 'link was not create, no permissions'); +} -my $creator = RT::CurrentUser->new($u1->id); +diag('add link with rights only on base') if $ENV{'TEST_VERBOSE'}; +{ + # on q2 we have no rights, but use checking one only on thing + local $RT::StrictLinkACL = 0; + my $parent = RT::Ticket->new( $RT::SystemUser ); + ($id,$tid,$msg) = $parent->Create( Subject => 'Link test 1', Queue => $q2->id ); + ok($id,$msg); + my $child = RT::Ticket->new( $creator ); + ($id,$tid,$msg) = $child->Create( Subject => 'Link test 1', Queue => $q1->id ); + ok($id,$msg); + my ($id, $msg) = $child->AddLink(Type => 'MemberOf', Target => $parent->id); + ok($id, $msg); + is(link_count($filename), 1, "scrips ok"); + $child->CurrentUser( $RT::SystemUser ); + is($child->_Links('Base')->Count, 1, 'link was created'); + is($child->_Links('Target')->Count, 0, 'link was created only one'); + $child->CurrentUser( $creator ); + + # turn off feature and try to delete link, we should fail + $RT::StrictLinkACL = 1; + my ($id, $msg) = $child->AddLink(Type => 'MemberOf', Target => $parent->id); + ok(!$id, $msg); + is(link_count($filename), 1, "scrips ok"); + $child->CurrentUser( $RT::SystemUser ); + $child->_Links('Base')->_DoCount; + is($child->_Links('Base')->Count, 1, 'link was not deleted'); + $child->CurrentUser( $creator ); + + # try to delete link, we should success as feature is active + $RT::StrictLinkACL = 0; + my ($id, $msg) = $child->DeleteLink(Type => 'MemberOf', Target => $parent->id); + ok($id, $msg); + is(link_count($filename), 0, "scrips ok"); + $child->CurrentUser( $RT::SystemUser ); + $child->_Links('Base')->_DoCount; + is($child->_Links('Base')->Count, 0, 'link was deleted'); +} +my $tid; my $ticket = RT::Ticket->new( $creator); ok($ticket->isa('RT::Ticket')); ($id,$tid, $msg) = $ticket->Create(Subject => 'Link test 1', Queue => $q1->id); ok ($id,$msg); +diag('try link to itself') if $ENV{'TEST_VERBOSE'}; +{ + my ($id, $msg) = $ticket->AddLink(Type => 'RefersTo', Target => $ticket->id); + ok(!$id, $msg); + is(link_count($filename), 0, "scrips ok"); +} my $ticket2 = RT::Ticket->new($RT::SystemUser); ($id, $tid, $msg) = $ticket2->Create(Subject => 'Link test 2', Queue => $q2->id); ok ($id, $msg); - ($id,$msg) =$ticket->AddLink(Type => 'RefersTo', Target => $ticket2->id); ok(!$id,$msg); ok(link_count($filename) == 0, "scrips ok"); + ($id,$msg) = $u1->PrincipalObj->GrantRight ( Object => $q2, Right => 'CreateTicket'); ok ($id,$msg); ($id,$msg) = $u1->PrincipalObj->GrantRight ( Object => $q2, Right => 'ModifyTicket'); @@ -104,6 +197,9 @@ ok(link_count($filename) == 1, "scrips ok"); ($id,$msg) =$ticket->AddLink(Type => 'RefersTo', Target => -1); ok(!$id,$msg); ok(link_count($filename) == 1, "scrips ok"); +($id,$msg) = $ticket->AddLink(Type => 'RefersTo', Target => $ticket2->id); +ok($id,$msg); +is(link_count($filename), 1, "scrips ok"); my $transactions = $ticket2->Transactions; $transactions->Limit( FIELD => 'Type', VALUE => 'AddLink' ); @@ -121,6 +217,7 @@ ok( $transactions->First->Field eq 'ReferredToBy'); ok( $transactions->First->OldValue eq $ticket->URI ); $RT::LinkTransactionsRun1Scrip = 0; + ($id,$msg) =$ticket->AddLink(Type => 'RefersTo', Target => $ticket2->id); ok($id,$msg); ok(link_count($filename) == 2, "scrips ok"); @@ -130,6 +227,9 @@ ok(link_count($filename) == 0, "scrips ok"); # restore $RT::LinkTransactionsRun1Scrip = $link_scrips_orig; +$RT::StrictLinkACL = $link_acl_checks_orig; + +exit(0); sub link_count {