diff options
| author | ivan <ivan> | 2008-03-02 04:11:51 +0000 | 
|---|---|---|
| committer | ivan <ivan> | 2008-03-02 04:11:51 +0000 | 
| commit | c648976f0b7975f2328ebd7ba8c711fad0ca4195 (patch) | |
| tree | f3d176ec300a46c253ba25a988b897bce02fe174 /rt/lib/t/regression/14linking.t | |
| parent | 5e05724a635a22776f1b973f5d7e77989da4e048 (diff) | |
| parent | 8103c1fc1b2c27a6855feadf26f91b980a54bc52 (diff) | |
This commit was generated by cvs2svn to compensate for changes in r6255,
which included commits to RCS files with non-trunk default branches.
Diffstat (limited to 'rt/lib/t/regression/14linking.t')
| -rw-r--r-- | rt/lib/t/regression/14linking.t | 112 | 
1 files changed, 106 insertions, 6 deletions
| 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 { | 
