RT 4.0.22
[freeside.git] / rt / t / web / command_line_cf_edge_cases.t
1 use strict;
2 use warnings;
3 use Test::Expect;
4 use RT::Test tests => 100, actual_server => 1;
5 my ( $baseurl, $m ) = RT::Test->started_ok;
6
7 my $rt_tool_path = "$RT::BinPath/rt";
8
9 $ENV{'RTUSER'}   = 'root';
10 $ENV{'RTPASSWD'} = 'password';
11 $ENV{'RTSERVER'} = RT->Config->Get('WebBaseURL');
12 $ENV{'RTDEBUG'}  = '1';
13 $ENV{'RTCONFIG'} = '/dev/null';
14
15 my @cfs = (
16     'foo=bar',  'foo.bar', 'foo:bar', 'foo bar',
17     'foo{bar}', 'foo-bar', 'foo()bar',
18 );
19 for my $name (@cfs) {
20     RT::Test->load_or_create_custom_field(
21         Name      => $name,
22         Type      => 'Freeform',
23         MaxValues => 1,
24         Queue     => 0,
25     );
26 }
27
28 expect_run(
29     command => "$rt_tool_path shell",
30     prompt  => 'rt> ',
31     quit    => 'quit',
32 );
33
34 # create a ticket
35 for my $name (@cfs) {
36     expect_send(
37 qq{create -t ticket set subject='test cf $name' 'CF.{$name}=foo:b a.r=baz'},
38         "creating a ticket for cf $name"
39     );
40
41     expect_handle->before() =~ /Ticket (\d+) created/;
42     my $ticket_id = $1;
43
44     expect_send( "show ticket/$ticket_id -f 'CF.{$name}'",
45         'checking new value' );
46     expect_like( qr/CF\.{\Q$name\E}: foo:b a\.r=baz/i, 'verified change' );
47
48     expect_send( "edit ticket/$ticket_id set 'CF.{$name}=bar'",
49         "changing cf $name to bar" );
50     expect_like( qr/Ticket $ticket_id updated/, 'changed cf' );
51     expect_send( "show ticket/$ticket_id -f 'CF.{$name}'",
52         'checking new value' );
53     expect_like( qr/CF\.{\Q$name\E}: bar/i, 'verified change' );
54
55     expect_send(
56 qq{create -t ticket set subject='test cf $name' 'CF-$name=foo:b a.r=baz'},
57         "creating a ticket for cf $name"
58     );
59     expect_handle->before() =~ /Ticket (\d+) created/;
60     $ticket_id = $1;
61
62     expect_send( "show ticket/$ticket_id -f 'CF-$name'", 'checking new value' );
63     if ( $name eq 'foo=bar' ) {
64         expect_like( qr/CF\.{\Q$name\E}: $/mi,
65             "can't use = in cf name with old style" );
66     }
67     else {
68         expect_like( qr/CF\.{\Q$name\E}: foo:b a\.r=baz/i, 'verified change' );
69         expect_send( "edit ticket/$ticket_id set 'CF-$name=bar'",
70             "changing cf $name to bar" );
71         expect_like( qr/Ticket $ticket_id updated/, 'changed cf' );
72         expect_send( "show ticket/$ticket_id -f 'CF-$name'",
73             'checking new value' );
74         expect_like( qr/CF\.{\Q$name\E}: bar/i, 'verified change' );
75     }
76 }
77
78 my @invalid = ('foo,bar');
79 for my $name (@invalid) {
80     expect_send(
81         qq{create -t ticket set subject='test cf $name' 'CF.{$name}=foo'},
82         "creating a ticket for cf $name" );
83     expect_like( qr/You shouldn't specify objects as arguments to create/i,
84         '$name is not a valid cf name' );
85 }
86
87 expect_quit();