[Rt-commit] rt branch, 5.0/log-view-db-config-change-history, created. rt-4.4.4-884-g846c82b605
? sunnavy
sunnavy at bestpractical.com
Tue Mar 31 11:26:15 EDT 2020
The branch, 5.0/log-view-db-config-change-history has been created
at 846c82b60573f9f68af9eaa56e60a8cf146a3c23 (commit)
- Log -----------------------------------------------------------------
commit 62ee6030e6b9869e7833318083d36a4561306e3d
Author: sunnavy <sunnavy at bestpractical.com>
Date: Tue Mar 31 06:10:17 2020 +0800
Clean up RT::Configuration::_SerializeContent calls
_SerializeContent doesn't need config name and always returns serialized
value without error messages
diff --git a/lib/RT/Configuration.pm b/lib/RT/Configuration.pm
index 0d7c3ddf68..f79d9eb086 100644
--- a/lib/RT/Configuration.pm
+++ b/lib/RT/Configuration.pm
@@ -120,10 +120,7 @@ sub Create {
return ( 0, $msg ) unless $id;
if (ref ($args{'Content'}) ) {
- ($args{'Content'}, my $error) = $self->_SerializeContent($args{'Content'}, $args{'Name'});
- if ($error) {
- return (0, $error);
- }
+ $args{'Content'} = $self->_SerializeContent( $args{'Content'} );
$args{'ContentType'} = 'perl';
}
@@ -290,10 +287,7 @@ sub SetContent {
}
if (ref $value) {
- ($value, my $error) = $self->_SerializeContent($value);
- if ($error) {
- return (0, $error);
- }
+ $value = $self->_SerializeContent($value);
$content_type = 'perl';
}
commit 48a892509cb171e6e7fcfd5acd03f743f1551f6f
Author: Aaron Trevena <ast at bestpractical.com>
Date: Mon Mar 23 13:21:36 2020 +0000
Log DB config changes as transactions
Implementation of storing Configuration change history in transactions
diff --git a/lib/RT/Config.pm b/lib/RT/Config.pm
index 9362e2a667..8630974ff5 100644
--- a/lib/RT/Config.pm
+++ b/lib/RT/Config.pm
@@ -2542,7 +2542,7 @@ sub LoadConfigFromDatabase {
$database_config_cache_time = time;
my $settings = RT::Configurations->new(RT->SystemUser);
- $settings->UnLimit;
+ $settings->LimitToEnabled;
my %seen;
diff --git a/lib/RT/Configuration.pm b/lib/RT/Configuration.pm
index f79d9eb086..c8448acbb2 100644
--- a/lib/RT/Configuration.pm
+++ b/lib/RT/Configuration.pm
@@ -104,59 +104,50 @@ sub Create {
return (0, $self->loc("Permission Denied"))
unless $self->CurrentUserHasRight('SuperUser');
- unless ( $args{'Name'} ) {
- return ( 0, $self->loc("Must specify 'Name' attribute") );
+ if ( $args{'Name'} ) {
+ my ( $ok, $msg ) = $self->ValidateName( $args{'Name'} );
+ unless ($ok) {
+ return ($ok, $msg);
+ }
}
-
- my ( $id, $msg ) = $self->ValidateName( $args{'Name'} );
- return ( 0, $msg ) unless $id;
-
- my $meta = RT->Config->Meta($args{'Name'});
- if ($meta->{Immutable}) {
- return ( 0, $self->loc("You cannot update [_1] using database config; you must edit your site config", $args{'Name'}) );
+ else {
+ return ( 0, $self->loc("Must specify 'Name' attribute") );
}
- ( $id, $msg ) = $self->ValidateContent( Name => $args{'Name'}, Content => $args{'Content'} );
- return ( 0, $msg ) unless $id;
- if (ref ($args{'Content'}) ) {
- $args{'Content'} = $self->_SerializeContent( $args{'Content'} );
- $args{'ContentType'} = 'perl';
+ $RT::Handle->BeginTransaction;
+ my ( $id, $msg ) = $self->_Create(%args);
+ unless ($id) {
+ $RT::Handle->Rollback;
+ return ($id, $msg);
}
- my $old_value = RT->Config->Get($args{Name});
- unless (defined($old_value) && length($old_value)) {
- $old_value = $self->loc('(no value)');
+ my ($content, $error) = $self->Content;
+ unless (defined($content) && length($content)) {
+ $content = $self->loc('(no value)');
}
- ( $id, $msg ) = $self->SUPER::Create(
- map { $_ => $args{$_} } grep {exists $args{$_}}
- qw(Name Content ContentType),
+ my ( $Trans, $tx_msg, $TransObj ) = $self->_NewTransaction(
+ Type => 'SetConfig',
+ Field => $self->Name,
+ ObjectType => 'RT::Configuration',
+ ObjectId => $self->id,
+ ReferenceType => ref($self),
+ NewReference => $self->id,
);
- unless ($id) {
- return (0, $self->loc("Setting [_1] to [_2] failed: [_3]", $args{Name}, $args{Content}, $msg));
+ unless ($Trans) {
+ $RT::Handle->Rollback;
+ return (0, $self->loc("Setting [_1] to [_2] failed: [_3]", $args{Name}, $content, $tx_msg));
}
+ $RT::Handle->Commit;
RT->Config->ApplyConfigChangeToAllServerProcesses;
- my ($content, $error) = $self->Content;
- unless (defined($content) && length($content)) {
- $content = $self->loc('(no value)');
- }
-
+ my $old_value = RT->Config->Get($args{Name});
if ( ref $old_value ) {
$old_value = $self->_SerializeContent($old_value);
}
-
- RT->Logger->info(
- sprintf(
- '%s changed %s from "%s" to "%s"',
- $self->CurrentUser->Name,
- $self->Name,
- $old_value // '',
- $content // ''
- )
- );
+ RT->Logger->info($self->CurrentUser->Name . " changed " . $args{Name});
return ( $id, $self->loc( '[_1] changed from "[_2]" to "[_3]"', $self->Name, $old_value // '', $content // '' ) );
}
@@ -215,8 +206,8 @@ sub ValidateName {
return ( 0, $self->loc('empty name') ) unless defined $name && length $name;
- my $TempSetting = RT::Configuration->new( RT->SystemUser );
- $TempSetting->Load($name);
+ my $TempSetting = RT::Configuration->new( RT->SystemUser );
+ $TempSetting->LoadByCols(Name => $name, Disabled => 0);
if ( $TempSetting->id && ( !$self->id || $TempSetting->id != $self->id ) ) {
return ( 0, $self->loc('Name in use') );
@@ -236,10 +227,32 @@ processes.
sub Delete {
my $self = shift;
return (0, $self->loc("Permission Denied")) unless $self->CurrentUserCanSee;
- my ($ok, $msg) = $self->SUPER::Delete(@_);
- return ($ok, $msg) if !$ok;
+
+ $RT::Handle->BeginTransaction;
+ my ( $ok, $msg ) = $self->SetDisabled( 1 );
+ unless ($ok) {
+ $RT::Handle->Rollback;
+ return ($ok, $msg);
+ }
+
+ my ( $Trans, $tx_msg, $TransObj ) = $self->_NewTransaction(
+ Type => 'DeleteConfig',
+ Field => $self->Name,
+ ObjectType => 'RT::Configuration',
+ ObjectId => $self->Id,
+ ReferenceType => ref($self),
+ OldReference => $self->id,
+ );
+
+ unless ($Trans) {
+ $RT::Handle->Rollback();
+ return ( 0, $self->loc( "Deleting [_1] failed: [_2]", $self->Name, $tx_msg ) );
+ }
+
+ $RT::Handle->Commit;
RT->Config->ApplyConfigChangeToAllServerProcesses;
RT->Logger->info($self->CurrentUser->Name . " removed database setting for " . $self->Name);
+
return ($ok, $self->loc("Database setting removed."));
}
@@ -273,54 +286,71 @@ sub DecodedContent {
sub SetContent {
my $self = shift;
- my $value = shift;
+ my $raw_value = shift;
my $content_type = shift || '';
return (0, $self->loc("Permission Denied")) unless $self->CurrentUserCanSee;
- my ( $ok, $msg ) = $self->ValidateContent( Content => $value );
+ my ( $ok, $msg ) = $self->ValidateContent( Content => $raw_value );
return ( 0, $msg ) unless $ok;
- my ($old_value, $error) = $self->Content;
- unless (defined($old_value) && length($old_value)) {
- $old_value = $self->loc('(no value)');
- }
-
+ my $value = $raw_value;
if (ref $value) {
- $value = $self->_SerializeContent($value);
+ $value = $self->_SerializeContent($value, $self->Name);
$content_type = 'perl';
}
+ if ($self->Content eq $value) {
+ return (0, $self->loc("[_1] update: Nothing changed", ucfirst($self->Name)));
+ }
$RT::Handle->BeginTransaction;
+ ( $ok, $msg ) = $self->SetDisabled( 1 );
+ unless ($ok) {
+ $RT::Handle->Rollback;
+ return ($ok, $msg);
+ }
+
+ my ($old_value, $error) = $self->Content;
+ my $old_id = $self->id;
+ my ( $new_id, $new_msg ) = $self->_Create(
+ Name => $self->Name,
+ Content => $raw_value,
+ ContentType => $content_type,
+ );
- ($ok, $msg) = $self->_Set( Field => 'Content', Value => $value );
- if (!$ok) {
+ unless ($new_id) {
$RT::Handle->Rollback;
- return ($ok, $self->loc("Unable to update [_1]: [_2]", $self->Name, $msg));
+ return (0, $self->loc("Setting [_1] to [_2] failed: [_3]", $self->Name, $value, $new_msg));
}
- if ($self->ContentType ne $content_type) {
- ($ok, $msg) = $self->_Set( Field => 'ContentType', Value => $content_type );
- if (!$ok) {
- $RT::Handle->Rollback;
- return ($ok, $self->loc("Unable to update [_1]: [_2]", $self->Name, $msg));
- }
+ unless (defined($value) && length($value)) {
+ $value = $self->loc('(no value)');
+ }
+
+ my ( $Trans, $tx_msg, $TransObj ) = $self->_NewTransaction(
+ Type => 'SetConfig',
+ Field => $self->Name,
+ ObjectType => 'RT::Configuration',
+ ObjectId => $new_id,
+ ReferenceType => ref($self),
+ OldReference => $old_id,
+ NewReference => $new_id,
+ );
+ unless ($Trans) {
+ $RT::Handle->Rollback();
+ return (0, $self->loc("Setting [_1] to [_2] failed: [_3]", $self->Name, $value, $tx_msg));
}
$RT::Handle->Commit;
RT->Config->ApplyConfigChangeToAllServerProcesses;
- unless (defined($value) && length($value)) {
- $value = $self->loc('(no value)');
+ RT->Logger->info($self->CurrentUser->Name . " changed " . $self->Name);
+ unless (defined($old_value) && length($old_value)) {
+ $old_value = $self->loc('(no value)');
}
- if (!ref($value) && !ref($old_value)) {
- RT->Logger->info($self->CurrentUser->Name . " changed " . $self->Name . " from " . $old_value . " to " . $value);
- return ($ok, $self->loc('[_1] changed from "[_2]" to "[_3]"', $self->Name, $old_value, $value));
- } else {
- RT->Logger->info($self->CurrentUser->Name . " changed " . $self->Name);
- return ($ok, $self->loc("[_1] changed", $self->Name));
- }
+ return( 1, $self->loc('[_1] changed from "[_2]" to "[_3]"', $self->Name, $old_value // '', $value // '') );
+
}
=head2 ValidateContent
@@ -357,6 +387,43 @@ sub ValidateContent {
Documented for internal use only, do not call these from outside
RT::Configuration itself.
+=head2 _Create
+
+Checks that the field being created/updated is not immutable, before calling
+C<SUPER::Create> to save changes in a new row, returning id of new row on success
+ and 0, and message on failure.
+
+=cut
+
+sub _Create {
+ my $self = shift;
+ my %args = (
+ Name => '',
+ Content => '',
+ ContentType => '',
+ @_
+ );
+ my $meta = RT->Config->Meta($args{'Name'});
+ if ($meta->{Immutable}) {
+ return ( 0, $self->loc("You cannot update [_1] using database config; you must edit your site config", $args{'Name'}) );
+ }
+
+ if ( ref( $args{'Content'} ) ) {
+ $args{'Content'} = $self->_SerializeContent( $args{'Content'}, $args{'Name'} );
+ $args{'ContentType'} = 'perl';
+ }
+
+ my ( $id, $msg ) = $self->SUPER::Create(
+ map { $_ => $args{$_} } qw(Name Content ContentType),
+ );
+ unless ($id) {
+ return (0, $self->loc("Setting [_1] to [_2] failed: [_3]", $args{Name}, $args{Content}, $msg));
+ }
+
+ return ($id, $msg);
+}
+
+
=head2 _Set
Checks if the current user has I<SuperUser> before calling
@@ -397,6 +464,7 @@ sub _SerializeContent {
my $content = shift;
require Data::Dumper;
local $Data::Dumper::Terse = 1;
+ local $Data::Dumper::Sortkeys = 1;
my $frozen = Data::Dumper::Dumper($content);
chomp $frozen;
return $frozen;
diff --git a/share/html/Admin/Tools/EditConfig.html b/share/html/Admin/Tools/EditConfig.html
index 603c46ce8c..8a88ee22c8 100644
--- a/share/html/Admin/Tools/EditConfig.html
+++ b/share/html/Admin/Tools/EditConfig.html
@@ -138,16 +138,8 @@ if (delete $ARGS{Update}) {
}
my $setting = RT::Configuration->new($session{CurrentUser});
- $setting->Load($key);
+ $setting->LoadByCols(Name => $key, Disabled => 0);
if ($setting->Id) {
- if ($setting->Disabled) {
- my ($ok, $msg) = $setting->SetDisabled(0);
- if (!$ok) {
- push @results, $msg;
- $has_error++;
- }
- }
-
my ($ok, $msg) = $setting->SetContent($val);
push @results, $msg;
$has_error++ if !$ok;
commit 8d4c217599fdb546e4d3e541a1d111acaf941166
Author: Aaron Trevena <ast at bestpractical.com>
Date: Mon Mar 23 13:23:09 2020 +0000
Remove unused stringify function in configuration edit page
diff --git a/share/html/Admin/Tools/EditConfig.html b/share/html/Admin/Tools/EditConfig.html
index 8a88ee22c8..788e1806f3 100644
--- a/share/html/Admin/Tools/EditConfig.html
+++ b/share/html/Admin/Tools/EditConfig.html
@@ -62,19 +62,6 @@ my $active_context = {
my @results;
-use Data::Dumper;
-my $stringify = sub {
- my $value = shift;
- return "" if !defined($value);
-
- local $Data::Dumper::Terse = 1;
- local $Data::Dumper::Indent = 2;
- local $Data::Dumper::Sortkeys = 1;
- my $output = Dumper $value;
- chomp $output;
- return $output;
-};
-
if (delete $ARGS{Update}) {
RT->Config->BeginDatabaseConfigChanges;
$RT::Handle->BeginTransaction;
commit c238c86a5f0bdfe6aec278c40f355548136a13ee
Author: Aaron Trevena <ast at bestpractical.com>
Date: Mon Mar 23 14:39:30 2020 +0000
Page to view DB config transaction history
Added page to view transaction log or configurations
diff --git a/lib/RT/Interface/Web/MenuBuilder.pm b/lib/RT/Interface/Web/MenuBuilder.pm
index 5ce829c461..5731759eed 100644
--- a/lib/RT/Interface/Web/MenuBuilder.pm
+++ b/lib/RT/Interface/Web/MenuBuilder.pm
@@ -701,9 +701,10 @@ sub BuildMainNav {
$page->child( edit => raw_html => q[<a id="page-edit" class="menu-item" href="] . RT->Config->Get('WebPath') . qq[/Prefs/MyRT.html"><span class="fas fa-cog" alt="$alt" data-toggle="tooltip" data-placement="top" data-original-title="$alt"></span></a>] );
}
- if ( $request_path =~ m{^/Admin/Tools/(Configuration|EditConfig)} ) {
+ if ( $request_path =~ m{^/Admin/Tools/(Configuration|EditConfig|ConfigHistory)} ) {
$page->child( display => title => loc('View'), path => "/Admin/Tools/Configuration.html" );
- $page->child( history => title => loc('Edit'), path => "/Admin/Tools/EditConfig.html" );
+ $page->child( modify => title => loc('Edit'), path => "/Admin/Tools/EditConfig.html" );
+ $page->child( history => title => loc('History'), path => "/Admin/Tools/ConfigHistory.html" );
}
# due to historical reasons of always having been in /Elements/Tabs
diff --git a/lib/RT/Transaction.pm b/lib/RT/Transaction.pm
index 84297f47b4..5aa3233ca1 100644
--- a/lib/RT/Transaction.pm
+++ b/lib/RT/Transaction.pm
@@ -1380,6 +1380,32 @@ sub _CanonicalizeRoleName {
my $self = shift;
return "Attachment content modified";
},
+ SetConfig => sub {
+ my $self = shift;
+ my ($new_value, $old_value);
+
+ # pull in new value from reference if exists
+ if ( $self->NewReference ) {
+ my $newobj = RT::Configuration->new($self->CurrentUser);
+ $newobj->Load($self->NewReference);
+ $new_value = $newobj->Content;
+ }
+
+ # pull in old value from reference if exists
+ if ( $self->OldReference ) {
+ my $oldobj = RT::Configuration->new($self->CurrentUser);
+ $oldobj->Load($self->OldReference);
+ $old_value = $oldobj->Content;
+ return ('[_1] changed from "[_2]" to "[_3]"', $self->Field, $old_value // '', $new_value // ''); #loc()
+ }
+ else {
+ return ('[_1] changed to "[_2]"', $self->Field, $new_value // ''); #loc()
+ }
+ },
+ DeleteConfig => sub {
+ my $self = shift;
+ return ('[_1] deleted"', $self->Field); #loc()
+ }
);
diff --git a/share/html/Admin/Tools/ConfigHistory.html b/share/html/Admin/Tools/ConfigHistory.html
new file mode 100644
index 0000000000..6ea2904ba0
--- /dev/null
+++ b/share/html/Admin/Tools/ConfigHistory.html
@@ -0,0 +1,79 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+%# <sales at bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%INIT>
+my $title = loc('System Configuration');
+unless ($session{'CurrentUser'}->HasRight( Object=> $RT::System, Right => 'SuperUser')) {
+ Abort(loc('This feature is only available to system administrators'));
+}
+
+my $Transactions = RT::Transactions->new($session{CurrentUser});
+$Transactions->Limit(FIELD => 'ObjectType', VALUE => 'RT::Configuration');
+$Transactions->OrderBy(FIELD => 'Created', ORDER => 'DESC');
+</%INIT>
+<& /Admin/Elements/Header, Title => $title &>
+<& /Elements/Tabs &>
+<div class="configuration history">
+ <& /Admin/Elements/ConfigHelp &>
+ <&|/Widgets/TitleBox, title => loc('History') &>
+ <div class="history-container">
+% my $i = 1;
+% while (my $tx = $Transactions->Next()) {
+ <& /Elements/ShowTransaction,
+ Transaction => $tx,
+ ShowHeaders => 1,
+ ShowDisplayModes => 0,
+ ShowActions => 1,
+ DisplayPath => 'ConfigHistory.html',
+ HasTxnCFs => 0,
+ RowNum => $i
+ &>
+% $i++;
+% }
+ </div>
+ </&>
+</div>
commit 92d13312226e4445e3785b0e0edc75a9e871df1a
Author: Aaron Trevena <ast at bestpractical.com>
Date: Mon Mar 23 16:42:26 2020 +0000
Tests for DB config transactions and history
Added unit tests for storing and viewing Configuration history.
diff --git a/t/web/admin_tools_editconfig.t b/t/web/admin_tools_editconfig.t
index 5b4cbd43ac..c43913d6d1 100644
--- a/t/web/admin_tools_editconfig.t
+++ b/t/web/admin_tools_editconfig.t
@@ -10,6 +10,7 @@ my ( $url, $m ) = RT::Test->started_ok;
ok( $m->login(), 'logged in' );
$m->follow_link_ok( { text => 'System Configuration' }, 'followed link to "System Configuration"' );
+$m->follow_link_ok( { text => 'History' }, 'followed link to History page' );
$m->follow_link_ok( { text => 'Edit' }, 'followed link to Edit page' );
my $tests = [
@@ -41,6 +42,24 @@ my $tests = [
run_test( %{$_} ) for @{$tests};
+# check tx log for configuration
+my $transactions = RT::Transactions->new(RT->SystemUser);
+$transactions->Limit(FIELD => 'ObjectType', VALUE => 'RT::Configuration');
+$transactions->OrderBy(FIELD => 'Created', ORDER => 'ASC');
+my $tx_items = $transactions->ItemsArrayRef;
+
+my $i = 0;
+foreach my $change (@{$tests}) {
+ check_transaction( $tx_items->[$i++], $change );
+}
+
+# check config history page
+$m->get_ok( $url . '/Admin/Tools/ConfigHistory.html');
+$i = 0;
+foreach my $change (@{$tests}) {
+ check_history_page_item($tx_items->[$i++], $change );
+}
+
sub run_test {
my %args = @_;
@@ -74,6 +93,27 @@ sub run_test {
cmp_deeply( $rt_config_value, $args{new_value}, 'value from RT->Config->Get matches new value' );
}
+sub check_transaction {
+ my ($tx, $change) = @_;
+ is($tx->ObjectType, 'RT::Configuration', 'tx is config change');
+ is($tx->Field, $change->{setting}, 'tx matches field changed');
+ is($tx->NewValue, stringify($change->{new_value}), 'tx value matches');
+}
+
+sub check_history_page_item {
+ my ($tx, $change) = @_;
+ my $link = sprintf('ConfigHistory.html?id=%d#txn-%d', $tx->ObjectId, $tx->id);
+ ok($m->find_link(url => $link), 'found tx link in history');
+ $m->text_contains(compactify($change->{new_value}), 'fetched tx has new value');
+ $m->text_contains("$change->{setting} changed", 'fetched tx has changed field');
+}
+
+sub compactify {
+ my $value = stringify(shift);
+ $value =~ s/\s+/ /g;
+ return $value;
+}
+
sub stringify {
my $value = shift;
commit 846c82b60573f9f68af9eaa56e60a8cf146a3c23
Author: sunnavy <sunnavy at bestpractical.com>
Date: Tue Mar 31 04:40:05 2020 +0800
No need to compare 2 plain strings using cmp_deeply
diff --git a/t/web/admin_tools_editconfig.t b/t/web/admin_tools_editconfig.t
index c43913d6d1..826c8adf58 100644
--- a/t/web/admin_tools_editconfig.t
+++ b/t/web/admin_tools_editconfig.t
@@ -89,7 +89,7 @@ sub run_test {
my $rt_config_value = RT->Config->Get( $args{setting} );
- cmp_deeply( $rt_configuration_value, stringify($args{new_value}), 'value from RT::Configuration->Load matches new value' );
+ is( $rt_configuration_value, stringify($args{new_value}), 'value from RT::Configuration->Load matches new value' );
cmp_deeply( $rt_config_value, $args{new_value}, 'value from RT->Config->Get matches new value' );
}
-----------------------------------------------------------------------
More information about the rt-commit
mailing list