[Rt-commit] rt branch, 4.0/rest-delete-custom-field-value, created. rt-4.0.8-306-g63447ee

Ruslan Zakirov ruz at bestpractical.com
Thu Dec 27 11:35:53 EST 2012


The branch, 4.0/rest-delete-custom-field-value has been created
        at  63447eea5437b7dbdac1ade8cfdc30b5ee0fa8e9 (commit)

- Log -----------------------------------------------------------------
commit 63447eea5437b7dbdac1ade8cfdc30b5ee0fa8e9
Author: Ruslan Zakirov <ruz at bestpractical.com>
Date:   Mon Jul 2 17:15:06 2012 +0300

    REST: delete CF value rather than add when value is empty
    
    AddCustomFieldValue doesn't handle empty case, caller should
    take care. If we don't then RT records that an empty value
    was added

diff --git a/share/html/REST/1.0/Forms/ticket/default b/share/html/REST/1.0/Forms/ticket/default
index ea420cb..58be6fb 100644
--- a/share/html/REST/1.0/Forms/ticket/default
+++ b/share/html/REST/1.0/Forms/ticket/default
@@ -376,7 +376,15 @@ else {
             else {
                 my $vals = $ticket->CustomFieldValues($cf->id);
 
-                if ( $cf->SingleValue ) {
+                if ( !defined $val || !length $val ) {
+                    while ( my $val = $vals->Next ) {
+                        ($n, $s) = $ticket->DeleteCustomFieldValue(
+                            Field => $cf, ValueId => $val->id,
+                        );
+                        $s =~ s/^# // if defined $s;
+                    }
+                }
+                elsif ( $cf->SingleValue ) {
                     my $old = $vals->Next;
                     if ( $old ) {
                         if ( $val ne $old->Content ) {
diff --git a/t/web/rest.t b/t/web/rest.t
index 27f9db9..beb24e8 100644
--- a/t/web/rest.t
+++ b/t/web/rest.t
@@ -2,14 +2,14 @@ use strict;
 use warnings;
 use RT::Interface::REST;
 
-use RT::Test tests => 22;
+use RT::Test tests => 27;
 
 my ($baseurl, $m) = RT::Test->started_ok;
 
 for my $name ("severity", "fu()n:k/") {
     my $cf = RT::Test->load_or_create_custom_field(
         Name  => $name,
-        Type  => 'Freeform',
+        Type  => 'FreeformMultiple',
         Queue => 'General',
     );
     ok($cf->Id, "created a CustomField");
@@ -149,3 +149,72 @@ $m->post(
 );
 ($link) = $m->content =~ m|DependedOnBy:.*ticket/(\d+)|;
 is($link, 1, "Check ticket link.") or diag("'content' obtained:\n", $m->content);
+
+
+{
+    $m->post("$baseurl/REST/1.0/ticket/new", [
+        user    => 'root',
+        pass    => 'password',
+        format  => 'l',
+    ]);
+
+    my $text = $m->content;
+    my @lines = $text =~ m{.*}g;
+    shift @lines; # header
+    push @lines, "CF.{severity}: explosive";
+    push @lines, "CF.{severity}: very";
+    $text = join "\n", @lines;
+
+    $m->post("$baseurl/REST/1.0/ticket/edit", [
+        user    => 'root',
+        pass    => 'password',
+
+        content => $text,
+    ], Content_Type => 'form-data');
+
+    my ($id) = $m->content =~ /Ticket (\d+) created/;
+    ok($id, "got ticket #$id");
+
+    my $ticket = RT::Ticket->new(RT->SystemUser);
+    $ticket->Load($id);
+    is($ticket->Id, $id, "loaded the REST-created ticket");
+    is_deeply(
+        [sort map $_->Content, @{ $ticket->CustomFieldValues("severity")->ItemsArrayRef }],
+        ["explosive", "very"],
+        "CF successfully set"
+    );
+
+    $m->post(
+        "$baseurl/REST/1.0/ticket/show",
+        [
+            user   => 'root',
+            pass   => 'password',
+            format => 'l',
+            id     => "ticket/$id",
+        ]
+    );
+    $text = $m->content;
+    $text =~ s{CF\.{severity}:.*\n}{}img;
+    $text .= "CF.{severity}:\n";
+    $m->post(
+        "$baseurl/REST/1.0/ticket/edit",
+        [
+            user => 'root',
+            pass => 'password',
+            content => $text,
+        ],
+        Content_Type => 'form-data'
+    );
+    $m->content =~ /Ticket ($id) updated/;
+
+    $ticket->Load($id);
+    is_deeply(
+        [sort map $_->Content, @{ $ticket->CustomFieldValues("severity")->ItemsArrayRef }],
+        [],
+        "CF successfully set"
+    );
+
+    my @txns = map [$_->OldValue, $_->NewValue], grep $_->Type eq 'CustomField',
+        @{ $ticket->Transactions->ItemsArrayRef };
+    is_deeply(\@txns, [['explosive', undef], ['very', undef]]);
+}

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


More information about the Rt-commit mailing list