[Rt-commit] rt branch, 4.4/fix-shredder-uid-check, created. rt-4.4.3beta1-2-g1904c6a18

Craig Kaiser craig at bestpractical.com
Thu Jun 14 14:16:41 EDT 2018


The branch, 4.4/fix-shredder-uid-check has been created
        at  1904c6a18e356a52cd132bdfadf298e9347147e5 (commit)

- Log -----------------------------------------------------------------
commit 670c345892a7c8a5e8c84551774cf446a4f433bd
Author: Craig Kaiser <craig at bestpractical.com>
Date:   Tue May 22 11:02:34 2018 -0400

    Add test to hit shredder web UI
    
    Test shredder through the web UI, delete a user and a ticket object

diff --git a/t/web/shredder.t b/t/web/shredder.t
new file mode 100644
index 000000000..fd722fd1a
--- /dev/null
+++ b/t/web/shredder.t
@@ -0,0 +1,88 @@
+use strict;
+use warnings;
+
+use RT::Test;
+
+RT::Config->Set('ShredderStoragePath', RT::Test->temp_directory . '');
+
+my ( $baseurl, $agent ) = RT::Test->started_ok;
+
+diag("Test server running at $baseurl");
+
+$agent->login('root' => 'password');
+
+my $ticket_id;
+# Ticket created in block to avoid scope error on destroy
+{
+    my $ticket = RT::Test->create_ticket( Subject => 'test shredder', Queue => 1, );
+    ok( $ticket->Id, "created new ticket" );
+
+    $ticket_id = $ticket->id;
+}
+
+{
+    $agent->get_ok($baseurl . '/Admin/Tools/Shredder/');
+    $agent->submit_form_ok({
+        form_id     => 'shredder-search-form',
+        fields      => { Plugin => 'Tickets'},
+    }, "Select Tickets shredder plugin");
+
+    $agent->submit_form_ok({
+        form_id     => 'shredder-search-form',
+        fields      => {
+            'Tickets:query'  => 'id=' . $ticket_id,
+        },
+        button => 'Search',
+    }, "Search for ticket object");
+
+    $agent->submit_form_ok({
+        form_id     => 'shredder-search-form',
+        fields      => {
+            'WipeoutObject'     => 'RT::Ticket-example.com-1',
+        },
+        button => 'Wipeout',
+    }, "Select and destroy ticket object");
+
+    my $ticket = RT::Ticket->new(RT->SystemUser);
+    my ($ret, $msg) = $ticket->Load($ticket_id);
+
+    ok !$ret, 'Ticket successfully shredded';
+}
+
+# Shred RT::User
+{
+    my $user = RT::User->new(RT->SystemUser);
+    my ($ret, $msg) = $user->LoadOrCreateByEmail('test at example.com');
+    ok $ret;
+
+    my $id = $user->id;
+    ok $id;
+
+    $agent->get_ok($baseurl . '/Admin/Tools/Shredder/');
+    $agent->submit_form_ok({
+        form_id     => 'shredder-search-form',
+        fields      => { Plugin => 'Users'},
+    }, "Select Users shredder plugin");
+
+    $agent->submit_form_ok({
+        form_id     => 'shredder-search-form',
+        fields      => {
+            'Users:email'  => 'test at example.com',
+            'Users:status' => 'Enabled',
+        },
+        button => 'Search',
+    }, "Search for user");
+
+    $agent->submit_form_ok({
+        form_id     => 'shredder-search-form',
+        fields      => {
+            'WipeoutObject'     => 'RT::User-test at example.com',
+        },
+        button => 'Wipeout',
+    }, "Select and destroy searched user");
+
+    ($ret, $msg) = $user->Load($id);
+    ok !$ret, 'User successfully shredded';
+}
+
+done_testing();

commit 1904c6a18e356a52cd132bdfadf298e9347147e5
Author: Craig Kaiser <craig at bestpractical.com>
Date:   Tue May 22 11:03:14 2018 -0400

    Restrict Name checks to objects with name method available
    
    92dc904 updated the id check in Shredder to allow names to be
    passed in addition to numeric ids. However, it relies on the ->Name
    method and not all shreddable objects have that method, resulting
    in errors like:
    
    error: RT::Ticket::Name Unimplemented in RT::Shredder
    
    Restrict the ->Name check to only objects that have the Name method.

diff --git a/lib/RT/Shredder.pm b/lib/RT/Shredder.pm
index 8d99326b6..6f92204cf 100644
--- a/lib/RT/Shredder.pm
+++ b/lib/RT/Shredder.pm
@@ -364,11 +364,15 @@ sub CastObjectsToRecords
             RT::Shredder::Exception::Info->throw( 'CouldntLoadObject' );
         }
 
-        if ( $id =~ /^\d+$/ && $id ne $obj->Id ){
-            die 'Loaded object id ' . $obj->Id . " is different from passed id $id";
+        if ( $id =~ /^\d+$/ ) {
+            if ( $id ne $obj->Id ) {
+                die 'Loaded object id ' . $obj->Id . " is different from passed id $id";
+            }
         }
-        elsif ( $id ne $obj->Name ){
-            die 'Loaded object name ' . $obj->Name . " is different from passed name $id";
+        else {
+            if ( $obj->_Accessible( 'Name', 'read' ) && $id ne $obj->Name ) {
+                die 'Loaded object name ' . $obj->Name . " is different from passed name $id";
+            }
         }
         push @res, $obj;
     } else {

-----------------------------------------------------------------------


More information about the rt-commit mailing list