Skip to content

Commit 54c2ef8

Browse files
committed
Add tests for shredding users with attributes
Test that shredding a user with a RecentlyViewedTickets attribute (their own) succeeds without a resolver, and that shredding a user who created an attribute on another user correctly updates the Creator/LastUpdatedBy fields when replace_relations is set.
1 parent 624f6a0 commit 54c2ef8

2 files changed

Lines changed: 64 additions & 0 deletions

File tree

t/shredder/02user.t

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,4 +67,22 @@ $test->create_savepoint('aucreate'); # after user create
6767
cmp_deeply( $test->dump_current_and_savepoint('aucreate'), "current DB equal to savepoint");
6868
}
6969

70+
{ # Shred a user who has a RecentlyViewedTickets attribute (their own attribute)
71+
diag "Shred a user with a RecentlyViewedTickets attribute";
72+
73+
my $user = RT::User->new( RT->SystemUser );
74+
my ( $uid, $msg ) = $user->Create( Name => 'user_with_attr', Privileged => 1, Disabled => 0 );
75+
ok( $uid, "created user" ) or diag "error: $msg";
76+
77+
$user->AddRecentlyViewedTicket($ticket);
78+
ok( $user->FirstAttribute('RecentlyViewedTickets'), "user has RecentlyViewedTickets attribute" );
79+
80+
my $shredder = $test->shredder_new();
81+
eval { $shredder->Wipeout( Object => $user ) };
82+
is( $@, '', "shredding user with RecentlyViewedTickets attribute does not throw" );
83+
}
84+
85+
cmp_deeply( $test->dump_current_and_savepoint('aucreate'),
86+
"current DB equal to savepoint after shredding user with own attribute" );
87+
7088
done_testing;

t/shredder/03plugin_users.t

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,4 +193,50 @@ diag "Shred a user who owns 2 tickets";
193193
}
194194
cmp_deeply( $test->dump_current_and_savepoint('clean'), "current DB equal to savepoint");
195195

196+
diag "Shred a user who created an attribute on another user, replacing relations";
197+
{
198+
my $user_a = RT::User->new( RT->SystemUser );
199+
my ( $uid_a, $msg ) = $user_a->Create( Name => 'user_attr_owner', Privileged => 1, Disabled => 0 );
200+
ok( $uid_a, "created user A" ) or diag "error: $msg";
201+
202+
my $user_b = RT::User->new( RT->SystemUser );
203+
my ($uid_b);
204+
( $uid_b, $msg ) = $user_b->Create( Name => 'user_attr_target', Privileged => 1, Disabled => 0 );
205+
ok( $uid_b, "created user B" ) or diag "error: $msg";
206+
207+
# Simulate user_b having an attribute whose Creator is user_a
208+
$user_b->SetAttribute( Name => 'SomeAttr', Content => 'value' );
209+
my $attr = $user_b->FirstAttribute('SomeAttr');
210+
ok( $attr, "attribute created on user B" );
211+
$attr->__Set( Field => 'Creator', Value => $uid_a );
212+
$attr->__Set( Field => 'LastUpdatedBy', Value => $uid_a );
213+
is( $attr->Creator, $uid_a, "attribute Creator is user A" );
214+
215+
my $plugin = RT::Shredder::Plugin::Users->new;
216+
my ($status);
217+
( $status, $msg ) = $plugin->TestArgs( status => 'any', name => 'user_attr_owner', replace_relations => $uid_b );
218+
ok( $status, "plugin arguments ok" ) or diag "error: $msg";
219+
220+
my $shredder = $test->shredder_new();
221+
my @objs;
222+
( $status, @objs ) = $plugin->Run;
223+
ok( $status, "plugin ran ok" ) or diag "error: @objs";
224+
@objs = RT::Shredder->CastObjectsToRecords( Objects => \@objs );
225+
226+
( $status, $msg ) = $plugin->SetResolvers( Shredder => $shredder );
227+
ok( $status, "set resolvers" ) or diag "error: $msg";
228+
229+
$shredder->PutObjects( Objects => \@objs );
230+
eval { $shredder->WipeoutAll };
231+
is( $@, '', "shredding user who created another user's attribute does not throw" );
232+
233+
$attr->Load( $attr->id );
234+
is( $attr->Creator, $uid_b, "attribute Creator updated to user B" );
235+
is( $attr->LastUpdatedBy, $uid_b, "attribute LastUpdatedBy updated to user B" );
236+
237+
$shredder->Wipeout( Object => $user_b );
238+
}
239+
cmp_deeply( $test->dump_current_and_savepoint('clean'),
240+
"current DB equal to savepoint after shredding user who created another's attribute" );
241+
196242
done_testing();

0 commit comments

Comments
 (0)