[Rt-commit] rt branch, 4.4/serialize-json-initialdata, updated. rt-4.4.1-358-g79a7c65

Shawn Moore shawn at bestpractical.com
Mon Mar 20 18:07:11 EDT 2017


The branch, 4.4/serialize-json-initialdata has been updated
       via  79a7c65b0fdc6fcb093454eaa37879c15ef9c897 (commit)
      from  0f6da4e08f74651dd293198901ce28f70b3b5e1c (commit)

Summary of changes:
 lib/RT/Migrate/Serializer/JSON.pm | 16 ++++++++++++++
 t/api/initialdata-roundtrip.t     | 44 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 60 insertions(+)

- Log -----------------------------------------------------------------
commit 79a7c65b0fdc6fcb093454eaa37879c15ef9c897
Author: Shawn M Moore <shawn at bestpractical.com>
Date:   Mon Mar 20 22:07:02 2017 +0000

    Roundtrip group members (with tests)

diff --git a/lib/RT/Migrate/Serializer/JSON.pm b/lib/RT/Migrate/Serializer/JSON.pm
index e7e2a7a..452fd09 100644
--- a/lib/RT/Migrate/Serializer/JSON.pm
+++ b/lib/RT/Migrate/Serializer/JSON.pm
@@ -297,6 +297,21 @@ sub CanonicalizeUsers {
     }
 }
 
+sub CanonicalizeGroupMembers {
+    my $self = shift;
+
+    for my $record (values %{ $self->{Records}{'RT::GroupMember'} }) {
+        my $group = $self->_GetObjectByRef(delete $record->{GroupId});
+        $record->{Group} = $group->Object->Name;
+
+        my $member = $self->_GetObjectByRef(delete $record->{MemberId});
+        $record->{Class} = ref($member->Object);
+        $record->{Name} = $member->Object->Name;
+
+        delete @$record{qw/Creator Created LastUpdated LastUpdatedBy/};
+    }
+}
+
 sub CanonicalizeObjects {
     my $self = shift;
 
@@ -361,6 +376,7 @@ sub WriteFile {
     $self->CanonicalizeObjects;
     $self->CanonicalizeACLs;
     $self->CanonicalizeUsers;
+    $self->CanonicalizeGroupMembers;
 
     delete $self->{Records}{'RT::Attribute'};
 
diff --git a/t/api/initialdata-roundtrip.t b/t/api/initialdata-roundtrip.t
index 48c4079..96b89ff 100644
--- a/t/api/initialdata-roundtrip.t
+++ b/t/api/initialdata-roundtrip.t
@@ -27,6 +27,50 @@ my @tests = (
             is($group->Domain, 'UserDefined', 'Domain');
         },
     },
+    {
+        name => 'Group membership',
+        create => sub {
+            my $outer = RT::Group->new(RT->SystemUser);
+            my ($ok, $msg) = $outer->CreateUserDefinedGroup(Name => 'Outer');
+            ok($ok, $msg);
+
+            my $inner = RT::Group->new(RT->SystemUser);
+            ($ok, $msg) = $inner->CreateUserDefinedGroup(Name => 'Inner');
+            ok($ok, $msg);
+
+            my $user = RT::User->new(RT->SystemUser);
+            ($ok, $msg) = $user->Create(Name => 'User');
+            ok($ok, $msg);
+
+            ($ok, $msg) = $outer->AddMember($inner->PrincipalId);
+            ok($ok, $msg);
+
+            ($ok, $msg) = $inner->AddMember($user->PrincipalId);
+            ok($ok, $msg);
+        },
+        present => sub {
+            my $outer = RT::Group->new(RT->SystemUser);
+            $outer->LoadUserDefinedGroup('Outer');
+            ok($outer->Id, 'Loaded group');
+            is($outer->Name, 'Outer', 'Group name');
+
+            my $inner = RT::Group->new(RT->SystemUser);
+            $inner->LoadUserDefinedGroup('Inner');
+            ok($inner->Id, 'Loaded group');
+            is($inner->Name, 'Inner', 'Group name');
+
+            my $user = RT::User->new(RT->SystemUser);
+            $user->Load('User');
+            ok($user->Id, 'Loaded user');
+            is($user->Name, 'User', 'User name');
+
+            ok($outer->HasMember($inner->PrincipalId), 'outer hasmember inner');
+            ok($inner->HasMember($user->PrincipalId), 'inner hasmember user');
+            ok($outer->HasMemberRecursively($user->PrincipalId), 'outer hasmember user recursively');
+            ok(!$outer->HasMember($user->PrincipalId), 'outer does not have member user directly');
+            ok(!$inner->HasMember($outer->PrincipalId), 'inner does not have member outer');
+        },
+    },
 
     {
         name => 'Custom field on two queues',

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


More information about the rt-commit mailing list