fix ticketing system error on bootstrap of new install
[freeside.git] / rt / t / web / cf_groupings_user.t
1 use strict;
2 use warnings;
3
4 use RT::Test tests => undef;
5
6 RT->Config->Set( 'CustomFieldGroupings',
7     'RT::User' => {
8         Identity         => ['TestIdentity'],
9         'Access control' => ['TestAccessControl'],
10         Location         => ['TestLocation'],
11         Phones           => ['TestPhones'],
12         More             => ['TestMore'],
13     },
14 );
15
16 my %CF;
17
18 while (my ($group,$cfs) = each %{ RT->Config->Get('CustomFieldGroupings')->{'RT::User'} } ) {
19     my $name = $cfs->[0];
20     my $cf = RT::CustomField->new( RT->SystemUser );
21     my ($id, $msg) = $cf->Create(
22         Name => $name,
23         Description => 'A custom field',
24         LookupType => RT::User->new( $RT::SystemUser )->CustomFieldLookupType,
25         Type => 'FreeformSingle',
26         Pattern => '^(?!bad value).*$',
27     );
28     ok $id, "custom field '$name' correctly created";
29
30     ($id, $msg) = $cf->AddToObject( RT::User->new( $cf->CurrentUser ) );
31     ok $id, "applied custom field" or diag "error: $msg";
32
33     $group =~ s/\W//g;
34     $CF{$name} = "$group-" . $cf->Id;
35 }
36
37 my ( $baseurl, $m ) = RT::Test->started_ok;
38 ok $m->login, 'logged in as root';
39
40 my %location = (
41     Identity      => ".user-info-identity",
42     AccessControl => ".user-info-access-control",
43     Location      => ".user-info-location",
44     Phones        => ".user-info-phones",
45     More          => ".user-info-cfs",
46 );
47 {
48     note "testing Create";
49     $m->follow_link_ok({id => 'admin-users-create'}, 'Create ');
50
51     my $dom = $m->dom;
52     $m->form_name('UserCreate');
53
54     $m->field( 'Name', 'user1' );
55
56     my $prefix = 'Object-RT::User--CustomField:';
57     for my $name (keys %location) {
58         my $input_name = $prefix . $CF{"Test$name"} .'-Value';
59         is $dom->find(qq{input[name="$input_name"]})->size, 1, "only one CF input on the page";
60         ok $dom->at(qq{$location{$name} input[name="$input_name"]}), "CF is in the right place";
61         $m->field( $input_name, "Test${name}Value" );
62     }
63
64     $m->submit;
65     $m->content_like(qr{User created});
66 }
67
68 my ($id) = ($m->uri =~ /id=(\d+)/);
69 ok $id, "found user's id #$id";
70
71 {
72     note "testing values on Modify page and on the object";
73     my $user = RT::User->new( RT->SystemUser );
74     $user->Load( $id );
75     ok $user->id, "loaded user";
76
77     my $dom = $m->dom;
78     $m->form_name('UserModify');
79     my $prefix = "Object-RT::User-$id-CustomField:";
80     foreach my $name ( keys %location ) {
81         is $user->FirstCustomFieldValue("Test$name"), "Test${name}Value",
82             "correct value of Test$name CF";
83         my $input_name = $prefix . $CF{"Test$name"} .'-Value';
84         is $m->value($input_name), "Test${name}Value",
85             "correct value in UI";
86         $m->field( $input_name, "Test${name}Changed" );
87         ok $dom->at(qq{$location{$name} input[name="$input_name"]}), "CF is in the right place";
88     }
89     $m->submit;
90 }
91
92 {
93     note "testing that update works";
94     my $user = RT::User->new( RT->SystemUser );
95     $user->Load( $id );
96     ok $user->id, "loaded user";
97
98     $m->form_name('UserModify');
99     my $prefix = "Object-RT::User-$id-CustomField:";
100     foreach my $name ( keys %location ) {
101         is $user->FirstCustomFieldValue("Test$name"), "Test${name}Changed",
102             "correct value of Test$name CF";
103         my $input = $prefix . $CF{"Test$name"} .'-Value';
104         is $m->value($input), "Test${name}Changed",
105             "correct value in UI";
106     }
107 }
108
109 undef $m;
110 done_testing;