[Rt-commit] rt branch, 4.0/loose-cf-name-in-rest, created. rt-4.0.8-140-gc5a2b45
Alex Vandiver
alexmv at bestpractical.com
Wed Nov 14 02:16:28 EST 2012
The branch, 4.0/loose-cf-name-in-rest has been created
at c5a2b457abd855e238d58247a43e77131cc7c7f2 (commit)
- Log -----------------------------------------------------------------
commit 824c63cc3e7be2c3a05e54f9ffe0e143c65ebab5
Author: sunnavy <sunnavy at bestpractical.com>
Date: Mon Feb 13 17:04:02 2012 +0800
remove limitation of cf name in rest
diff --git a/bin/rt.in b/bin/rt.in
index 24edec4..80a3321 100644
--- a/bin/rt.in
+++ b/bin/rt.in
@@ -120,7 +120,7 @@ sub DEBUG { warn @_ if $config{debug} >= shift }
# (XXX: Ask Autrijus how i18n changes these definitions.)
my $name = '[\w.-]+';
-my $CF_name = '[\sa-z0-9_ :()/-]+';
+my $CF_name = '.+';
my $field = '(?i:[a-z][a-z0-9_-]*|C(?:ustom)?F(?:ield)?-'.$CF_name.'|CF\.\{'.$CF_name.'\})';
my $label = '[^,\\/]+';
my $labels = "(?:$label,)*$label";
diff --git a/lib/RT/Interface/REST.pm b/lib/RT/Interface/REST.pm
index aed8f39..eadc6d4 100644
--- a/lib/RT/Interface/REST.pm
+++ b/lib/RT/Interface/REST.pm
@@ -58,8 +58,7 @@ sub custom_field_spec {
my $self = shift;
my $capture = shift;
- my $CF_char = '[\sa-z0-9_ :()/-]';
- my $CF_name = $CF_char . '+';
+ my $CF_name = '.+';
$CF_name = '(' . $CF_name . ')' if $capture;
my $new_style = 'CF\.\{'.$CF_name.'\}';
commit 2af173931da0b61c2aacd75cc01b47ce7e25e546
Author: sunnavy <sunnavy at bestpractical.com>
Date: Tue Feb 14 01:31:10 2012 +0800
we use "," to split fields, so "," can't be allowed
diff --git a/bin/rt.in b/bin/rt.in
index 80a3321..16ff35a 100644
--- a/bin/rt.in
+++ b/bin/rt.in
@@ -120,7 +120,7 @@ sub DEBUG { warn @_ if $config{debug} >= shift }
# (XXX: Ask Autrijus how i18n changes these definitions.)
my $name = '[\w.-]+';
-my $CF_name = '.+';
+my $CF_name = '[^,]+';
my $field = '(?i:[a-z][a-z0-9_-]*|C(?:ustom)?F(?:ield)?-'.$CF_name.'|CF\.\{'.$CF_name.'\})';
my $label = '[^,\\/]+';
my $labels = "(?:$label,)*$label";
diff --git a/lib/RT/Interface/REST.pm b/lib/RT/Interface/REST.pm
index eadc6d4..87bf8cd 100644
--- a/lib/RT/Interface/REST.pm
+++ b/lib/RT/Interface/REST.pm
@@ -58,7 +58,7 @@ sub custom_field_spec {
my $self = shift;
my $capture = shift;
- my $CF_name = '.+';
+ my $CF_name = '[^,]+';
$CF_name = '(' . $CF_name . ')' if $capture;
my $new_style = 'CF\.\{'.$CF_name.'\}';
commit 6977b6e241586b5f69d981f441b5ef94b613591f
Author: sunnavy <sunnavy at bestpractical.com>
Date: Tue Feb 14 02:37:27 2012 +0800
non-greedy regex is more right in splitting cf's name and value
e.g. in "CF.{foobar}=ab{cd}=e", splitting from the first "=" is more resonable
as cf names usually don't contain "}=", but values do.
diff --git a/bin/rt.in b/bin/rt.in
index 16ff35a..7fbbb07 100644
--- a/bin/rt.in
+++ b/bin/rt.in
@@ -120,7 +120,7 @@ sub DEBUG { warn @_ if $config{debug} >= shift }
# (XXX: Ask Autrijus how i18n changes these definitions.)
my $name = '[\w.-]+';
-my $CF_name = '[^,]+';
+my $CF_name = '[^,]+?';
my $field = '(?i:[a-z][a-z0-9_-]*|C(?:ustom)?F(?:ield)?-'.$CF_name.'|CF\.\{'.$CF_name.'\})';
my $label = '[^,\\/]+';
my $labels = "(?:$label,)*$label";
commit c5a2b457abd855e238d58247a43e77131cc7c7f2
Author: sunnavy <sunnavy at bestpractical.com>
Date: Tue Feb 14 17:33:12 2012 +0800
test cf name edge cases in rest
diff --git a/t/web/command_line_cf_edge_cases.t b/t/web/command_line_cf_edge_cases.t
new file mode 100644
index 0000000..d7c7777
--- /dev/null
+++ b/t/web/command_line_cf_edge_cases.t
@@ -0,0 +1,87 @@
+use strict;
+use warnings;
+use Test::Expect;
+use RT::Test tests => 100, actual_server => 1;
+my ( $baseurl, $m ) = RT::Test->started_ok;
+
+my $rt_tool_path = "$RT::BinPath/rt";
+
+$ENV{'RTUSER'} = 'root';
+$ENV{'RTPASSWD'} = 'password';
+$ENV{'RTSERVER'} = RT->Config->Get('WebBaseURL');
+$ENV{'RTDEBUG'} = '1';
+$ENV{'RTCONFIG'} = '/dev/null';
+
+my @cfs = (
+ 'foo=bar', 'foo.bar', 'foo:bar', 'foo bar',
+ 'foo{bar}', 'foo-bar', 'foo()bar',
+);
+for my $name (@cfs) {
+ RT::Test->load_or_create_custom_field(
+ Name => $name,
+ Type => 'Freeform',
+ MaxValues => 1,
+ Queue => 0,
+ );
+}
+
+expect_run(
+ command => "$rt_tool_path shell",
+ prompt => 'rt> ',
+ quit => 'quit',
+);
+
+# create a ticket
+for my $name (@cfs) {
+ expect_send(
+qq{create -t ticket set subject='test cf $name' 'CF.{$name}=foo:b a.r=baz'},
+ "creating a ticket for cf $name"
+ );
+
+ expect_handle->before() =~ /Ticket (\d+) created/;
+ my $ticket_id = $1;
+
+ expect_send( "show ticket/$ticket_id -f 'CF.{$name}'",
+ 'checking new value' );
+ expect_like( qr/CF\.{\Q$name\E}: foo:b a\.r=baz/i, 'verified change' );
+
+ expect_send( "edit ticket/$ticket_id set 'CF.{$name}=bar'",
+ "changing cf $name to bar" );
+ expect_like( qr/Ticket $ticket_id updated/, 'changed cf' );
+ expect_send( "show ticket/$ticket_id -f 'CF.{$name}'",
+ 'checking new value' );
+ expect_like( qr/CF\.{\Q$name\E}: bar/i, 'verified change' );
+
+ expect_send(
+qq{create -t ticket set subject='test cf $name' 'CF-$name=foo:b a.r=baz'},
+ "creating a ticket for cf $name"
+ );
+ expect_handle->before() =~ /Ticket (\d+) created/;
+ $ticket_id = $1;
+
+ expect_send( "show ticket/$ticket_id -f 'CF-$name'", 'checking new value' );
+ if ( $name eq 'foo=bar' ) {
+ expect_like( qr/CF\.{\Q$name\E}: $/mi,
+ "can't use = in cf name with old style" );
+ }
+ else {
+ expect_like( qr/CF\.{\Q$name\E}: foo:b a\.r=baz/i, 'verified change' );
+ expect_send( "edit ticket/$ticket_id set 'CF-$name=bar'",
+ "changing cf $name to bar" );
+ expect_like( qr/Ticket $ticket_id updated/, 'changed cf' );
+ expect_send( "show ticket/$ticket_id -f 'CF-$name'",
+ 'checking new value' );
+ expect_like( qr/CF\.{\Q$name\E}: bar/i, 'verified change' );
+ }
+}
+
+my @invalid = ('foo,bar');
+for my $name (@invalid) {
+ expect_send(
+ qq{create -t ticket set subject='test cf $name' 'CF.{$name}=foo'},
+ "creating a ticket for cf $name" );
+ expect_like( qr/You shouldn't specify objects as arguments to create/i,
+ '$name is not a valid cf name' );
+}
+
+expect_quit();
-----------------------------------------------------------------------
More information about the Rt-commit
mailing list