[Rt-commit] rt branch 5.0/dump-initialdata-include-configurations created. rt-5.0.1-428-gb487173a6c

BPS Git Server git at git.bestpractical.com
Wed Sep 8 14:37:08 UTC 2021


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "rt".

The branch, 5.0/dump-initialdata-include-configurations has been created
        at  b487173a6c15e0b04e6bc9ac2be61d00b096cec9 (commit)

- Log -----------------------------------------------------------------
commit b487173a6c15e0b04e6bc9ac2be61d00b096cec9
Author: craig kaiser <craig at bestpractical.com>
Date:   Wed Sep 8 10:04:02 2021 -0400

    Add tests for Configurations export/import

diff --git a/t/api/initialdata-roundtrip.t b/t/api/initialdata-roundtrip.t
index a5b2b68329..8045270959 100644
--- a/t/api/initialdata-roundtrip.t
+++ b/t/api/initialdata-roundtrip.t
@@ -1051,6 +1051,35 @@ my @tests = (
               );
         },
     },
+    {
+        name => 'Configurations',
+        create => sub {
+            my $configuration = RT::Configuration->new( RT->SystemUser );
+            my ($ok, $msg) = $configuration->Create(
+                Name        => 'PriorityAsString',
+                Content     => "{ 'Default' => { 'High' => 100, 'Low' => 0, 'Medium' => 50 } }",
+                ContentType => 'perl',
+            );
+            ok($ok, $msg);
+
+            ($ok, $msg) = $configuration->Create(
+                Name        => 'EnablePriorityAsString',
+                Content     => "1",
+            );
+            ok($ok, $msg);
+        },
+        present => sub {
+            my $configuration = RT::Configuration->new( RT->SystemUser );
+            $configuration->Load( 'PriorityAsString' );
+            ok($configuration->Id, 'Loaded PriorityAsString configuration');
+            is($configuration->Content, "{ 'Default' => { 'High' => 100, 'Low' => 0, 'Medium' => 50 } }", 'PriorityAsString content is correct');
+            is($configuration->ContentType, 'perl', 'ContentType is perl');
+
+            $configuration->Load( 'EnablePriorityAsString' );
+            ok($configuration->Id, 'Loaded EnablePriorityAsString configuration');
+            is($configuration->Content, "1", 'EnablePriorityAsString content is correct');
+        },
+    },
 );
 
 my $id = 0;

commit e1dd347335bcddb6cee4e6228c8504a86558472c
Author: craig kaiser <craig at bestpractical.com>
Date:   Tue Sep 7 13:20:04 2021 -0400

    Support import/export of @Configuration for JSON serializer

diff --git a/lib/RT/Handle.pm b/lib/RT/Handle.pm
index 5be8caa452..34e0ecae96 100644
--- a/lib/RT/Handle.pm
+++ b/lib/RT/Handle.pm
@@ -855,10 +855,10 @@ sub InsertData {
 
     # Slurp in stuff to insert from the datafile. Possible things to go in here:-
     our (@Groups, @Users, @Members, @ACL, @Queues, @Classes, @ScripActions, @ScripConditions,
-           @Templates, @CustomFields, @CustomRoles, @Scrips, @Attributes, @Initial, @Final,
+           @Templates, @CustomFields, @CustomRoles, @Scrips, @Attributes, @Configurations, @Initial, @Final,
            @Catalogs, @Assets, @Articles, @OCFVs, @Topics, @ObjectTopics);
     local (@Groups, @Users, @Members, @ACL, @Queues, @Classes, @ScripActions, @ScripConditions,
-           @Templates, @CustomFields, @CustomRoles, @Scrips, @Attributes, @Initial, @Final,
+           @Templates, @CustomFields, @CustomRoles, @Scrips, @Attributes, @Configurations, @Initial, @Final,
            @Catalogs, @Assets, @Articles, @OCFVs, @Topics, @ObjectTopics);
 
     local $@;
@@ -906,6 +906,7 @@ sub InsertData {
                 CustomRoles     => \@CustomRoles,
                 Scrips          => \@Scrips,
                 Attributes      => \@Attributes,
+                Configurations  => \@Configurations,
                 Initial         => \@Initial,
                 Final           => \@Final,
                 Catalogs        => \@Catalogs,
@@ -1853,6 +1854,29 @@ sub InsertData {
         }
         $RT::Logger->debug("done.");
     }
+
+    if ( @Configurations ) {
+        $RT::Logger->debug("Creating configurations...");
+        my $sys = RT::System->new( RT->SystemUser );
+        my $configuration_obj = RT::Configuration->new( RT->SystemUser );
+
+        foreach my $item ( @Configurations ) {
+            if ( $item->{_Updated} || $item->{_Deleted} ) {
+                $self->_UpdateOrDeleteObject( 'RT::Configuration', $item );
+                next;
+            }
+
+            my ( $return, $msg ) = $configuration_obj->Create ( %$item );
+            unless ( $return ) {
+                $RT::Logger->error( $msg );
+            }
+            else {
+                $RT::Logger->debug( $return ."." );
+            }
+        }
+        $RT::Logger->debug("done.");
+    }
+
     if ( @Final ) {
         $RT::Logger->debug("Running final actions...");
         for ( @Final ) {
@@ -2401,7 +2425,7 @@ sub _UpdateObject {
 
     my $original = delete $values->{_Original};
 
-    for my $type ( qw/Attributes CustomFields Topics/ ) {
+    for my $type ( qw/Attributes CustomFields Topics Configurations/ ) {
         if ( my $items = delete $values->{$type} ) {
             if ( $type eq 'Attributes' ) {
                 for my $item ( @$items ) {
@@ -2502,7 +2526,6 @@ sub _UpdateObject {
     }
 
     for my $field ( sort { $a eq 'ApplyTo' || $b eq 'ApplyTo' ? 1 : 0 } keys %$values ) {
-
         if ( $class eq 'RT::Attribute' ) {
             if ( $field eq 'Content' ) {
                 $self->_CanonilizeAttributeContent( $values );
@@ -2510,6 +2533,9 @@ sub _UpdateObject {
         }
 
         my $value = $values->{$field};
+        if ( $class eq 'RT::Configuration' ) {
+            $value = RT::Configuration->_DeserializeContent( $value );
+        }
 
         if ( $class eq 'RT::CustomField' ) {
             if ( $field eq 'ApplyTo' ) {
@@ -2631,7 +2657,7 @@ sub _UpdateObject {
             if ( $object->can( $set_method ) || $object->_Accessible( $field, 'write' ) ) {
                 my ( $ret, $msg );
                 if ( $object->can( $set_method ) ) {
-                    ( $ret, $msg ) = $object->$set_method( $values->{$field} );
+                    ( $ret, $msg ) = $object->$set_method( $value );
                 }
                 elsif ( $object->_Accessible( $field, 'write' ) ) {
                     ( $ret, $msg ) = $object->_Set( Field => $field, Value => $value );
@@ -2752,6 +2778,9 @@ sub _LoadObject {
     elsif ( $class eq 'RT::Scrip' ) {
         $object->LoadByCols( Description => $values->{_Original}{Description} );
     }
+    elsif ( $class eq 'RT::Configuration' ) {
+        $object->Load( $values->{_Original}{Name} );
+    }
     else {
         if ( $class eq 'RT::Group' ) {
             $object->LoadByCols( Domain => $values->{Domain}, Name => $values->{_Original}{Name} );
diff --git a/lib/RT/Migrate/Serializer.pm b/lib/RT/Migrate/Serializer.pm
index e967fdf5e9..7ff0c8cf51 100644
--- a/lib/RT/Migrate/Serializer.pm
+++ b/lib/RT/Migrate/Serializer.pm
@@ -191,6 +191,9 @@ sub PushAll {
 
     # Attributes
     $self->PushCollections(qw(Attributes));
+
+    # Configurations
+    $self->PushCollections(qw(Configurations));
 }
 
 sub PushCollections {
@@ -201,6 +204,7 @@ sub PushCollections {
 
         $class->require or next;
         my $collection = $class->new( RT->SystemUser );
+
         $collection->FindAllRows if $self->{FollowDisabled};
         $collection->CleanSlate;    # some collections (like groups and users) join in _Init
         $collection->UnLimit;
@@ -281,6 +285,10 @@ sub PushBasics {
     $attributes->LimitToObject( $RT::System );
     $self->PushObj( $attributes );
 
+    my $configurations = RT::Configurations->new( RT->SystemUser );
+    $configurations->UnLimit();
+    $self->PushObj( $configurations );
+
     # Global ACLs
     if ($self->{FollowACL}) {
         my $acls = RT::ACL->new( RT->SystemUser );
diff --git a/lib/RT/Migrate/Serializer/JSON.pm b/lib/RT/Migrate/Serializer/JSON.pm
index 6dde64ce3c..8edb846ae5 100644
--- a/lib/RT/Migrate/Serializer/JSON.pm
+++ b/lib/RT/Migrate/Serializer/JSON.pm
@@ -571,6 +571,10 @@ sub CanonicalizeAttributes {
     }
 }
 
+sub CanonicalizeConfigurations {
+    my $self = shift;
+}
+
 sub CanonicalizeObjects {
     my $self = shift;
 
@@ -711,6 +715,7 @@ sub WriteFile {
     $self->CanonicalizeCustomFields;
     $self->CanonicalizeArticles;
     $self->CanonicalizeAttributes;
+    $self->CanonicalizeConfigurations;
 
     my $all_records = $self->{Records};
     my $sync = $self->{Sync};
diff --git a/sbin/rt-dump-initialdata.in b/sbin/rt-dump-initialdata.in
index 1ecfa8449e..35c15e9de1 100644
--- a/sbin/rt-dump-initialdata.in
+++ b/sbin/rt-dump-initialdata.in
@@ -148,7 +148,7 @@ if (-t STDOUT and not $OPT{verbose} and not $OPT{quiet}) {
         bars   => [
             qw/Queue User Group GroupMember Attribute CustomField CustomFieldValue
               ObjectCustomField ObjectCustomFieldValue Catalog Asset ACE CustomRole
-              Class Article ScripAction ScripCondition Template Scrip/
+              Class Article ScripAction ScripCondition Template Scrip Configuration/
         ],
         max => { estimate() },
     );
@@ -193,7 +193,7 @@ sub estimate {
     my @types = map { "RT::$_" } qw/
       Queue User Group GroupMember Attribute CustomField CustomFieldValue
       ObjectCustomField ObjectCustomFieldValue Catalog Asset ACE CustomRole
-      Class Article ScripAction ScripCondition Template Scrip/;
+      Class Article ScripAction ScripCondition Template Scrip Configuration/;
 
     for my $class (@types) {
         print "Estimating $class count...";

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


hooks/post-receive
-- 
rt


More information about the rt-commit mailing list