RT 4.0.13
[freeside.git] / rt / t / customfields / access_via_queue.t
1
2 use strict;
3 use warnings;
4
5 use RT::Test nodata => 1, tests => 47;
6 use RT::Ticket;
7 use RT::CustomField;
8
9 my $queue_name = "CFSortQueue-$$";
10 my $queue = RT::Test->load_or_create_queue( Name => $queue_name );
11 ok($queue && $queue->id, "$queue_name - test queue creation");
12
13 diag "create a CF";
14 my $cf_name = "Rights$$";
15 my $cf;
16 {
17     $cf = RT::CustomField->new( RT->SystemUser );
18     my ($ret, $msg) = $cf->Create(
19         Name  => $cf_name,
20         Queue => $queue->id,
21         Type  => 'FreeformSingle',
22     );
23     ok($ret, "Custom Field Order created");
24 }
25
26 my $tester = RT::Test->load_or_create_user(
27     Name => 'tester', Password => 'password',
28 );
29 ok $tester && $tester->id, 'loaded or created user';
30
31 my $cc_role = RT::Group->new( $queue->CurrentUser );
32 $cc_role->LoadQueueRoleGroup( Type => 'Cc', Queue => $queue->id );
33
34 my $owner_role = RT::Group->new( $queue->CurrentUser );
35 $owner_role->LoadQueueRoleGroup( Type => 'Owner', Queue => $queue->id );
36
37 ok( RT::Test->set_rights(
38     { Principal => $tester, Right => [qw(SeeQueue ShowTicket CreateTicket ReplyToTicket Watch OwnTicket TakeTicket)] },
39     { Principal => $cc_role, Object => $queue, Right => [qw(SeeCustomField)] },
40     { Principal => $owner_role, Object => $queue, Right => [qw(ModifyCustomField)] },
41 ), 'set rights');
42
43 {
44     my $ticket = RT::Ticket->new( $tester );
45     my ($tid, $msg) = $ticket->Create( Queue => $queue, Subject => 'test' );
46     ok $tid, "created ticket";
47
48     ok !$ticket->CustomFields->First, "see no fields";
49 }
50
51 {
52     my $ticket = RT::Ticket->new( $tester );
53     my ($tid, $msg) = $ticket->Create( Queue => $queue, Subject => 'test', Cc => $tester->id );
54     ok $tid, "created ticket";
55
56     my $cf = $ticket->CustomFields->First;
57     ok $cf, "Ccs see cf";
58 }
59
60 {
61     my $ticket = RT::Ticket->new( $tester );
62     my ($tid, $msg) = $ticket->Create( Queue => $queue, Subject => 'test', Cc => $tester->id );
63     ok $tid, "created ticket";
64
65     (my $status, $msg) = $ticket->AddCustomFieldValue( Field => $cf->Name, Value => 'test' );
66     ok !$status, "Can not change CF";
67 }
68
69 {
70     my $ticket = RT::Ticket->new( $tester );
71     my ($tid, $msg) = $ticket->Create( Queue => $queue, Subject => 'test', Cc => $tester->id, Owner => $tester->id );
72     ok $tid, "created ticket";
73
74     (my $status, $msg) = $ticket->AddCustomFieldValue( Field => $cf->Name, Value => 'test' );
75     ok $status, "Changed CF";
76     is $ticket->FirstCustomFieldValue( $cf->Name ), 'test';
77
78     ($status, $msg) = $ticket->DeleteCustomFieldValue( Field => $cf->Name, Value => 'test' );
79     ok $status, "Changed CF";
80     is $ticket->FirstCustomFieldValue( $cf->Name ), undef;
81 }
82
83 {
84     my $ticket = RT::Ticket->new( $tester );
85     my ($tid, $msg) = $ticket->Create( Queue => $queue, Subject => 'test', Cc => $tester->id, Owner => $tester->id );
86     ok $tid, "created ticket";
87
88     (my $status, $msg) = $ticket->AddCustomFieldValue( Field => $cf->id, Value => 'test' );
89     ok $status, "Changed CF";
90     is $ticket->FirstCustomFieldValue( $cf->id ), 'test';
91
92     ($status, $msg) = $ticket->DeleteCustomFieldValue( Field => $cf->id, Value => 'test' );
93     ok $status, "Changed CF";
94     is $ticket->FirstCustomFieldValue( $cf->id ), undef;
95 }
96
97 my ($baseurl, $m) = RT::Test->started_ok;
98 ok $m->login( tester => 'password' ), 'logged in';
99
100 diag "check that we don't have the cf on create";
101 {
102     $m->submit_form(
103         form_name => "CreateTicketInQueue",
104         fields => { Queue => $queue->Name },
105     );
106
107     my $form = $m->form_name("TicketCreate");
108     my $cf_field = "Object-RT::Ticket--CustomField-". $cf->id ."-Value";
109     ok !$form->find_input( $cf_field ), 'no form field on the page';
110
111     $m->submit_form(
112         form_name => "TicketCreate",
113         fields => { Subject => 'test' },
114     );
115     my ($tid) = ($m->content =~ /Ticket (\d+) created/i);
116     ok $tid, "created a ticket succesfully";
117     $m->content_lacks($cf_name, "don't see CF");
118
119     $m->follow_link( id => 'page-basics');
120     $form = $m->form_name('TicketModify');
121     $cf_field = "Object-RT::Ticket-$tid-CustomField-". $cf->id ."-Value";
122     ok !$form->find_input( $cf_field ), 'no form field on the page';
123 }
124
125 diag "check that we see CF as Cc";
126 {
127     my $ticket = RT::Ticket->new( $tester );
128     my ($tid, $msg) = $ticket->Create( Queue => $queue, Subject => 'test', Cc => $tester->id );
129     ok $tid, "created ticket";
130
131     ok $m->goto_ticket( $tid ), "opened ticket";
132     $m->content_contains($cf_name, "see CF");
133 }
134
135 diag "check that owner can see and edit CF";
136 {
137     my $ticket = RT::Ticket->new( $tester );
138     my ($tid, $msg) = $ticket->Create( Queue => $queue, Subject => 'test', Cc => $tester->id, Owner => $tester->id );
139     ok $tid, "created ticket";
140
141     ok $m->goto_ticket( $tid ), "opened ticket";
142     $m->content_contains($cf_name, "see CF");
143
144     $m->follow_link( id => 'page-basics');
145     my $form = $m->form_name('TicketModify');
146     my $cf_field = "Object-RT::Ticket-$tid-CustomField-". $cf->id ."-Value";
147     ok $form->find_input( $cf_field ), 'form field on the page';
148
149     $m->submit_form(
150         form_name => 'TicketModify',
151         fields => {
152             $cf_field => "changed cf",
153         },
154     );
155
156     ok $m->goto_ticket( $tid ), "opened ticket";
157     $m->content_contains($cf_name, "changed cf");
158 }
159
160 note 'make sure CF is not reset to no value';
161 {
162     my $t = RT::Test->create_ticket(
163         Queue => $queue->id,
164         Subject => 'test',
165         'CustomField-'.$cf->id => '2012-02-12',
166         Cc => $tester->id,
167         Owner => $tester->id,
168     );
169     ok $t && $t->id, 'created ticket';
170     is $t->FirstCustomFieldValue($cf_name), '2012-02-12';
171
172     $m->goto_ticket($t->id);
173     $m->follow_link_ok({id => 'page-basics'});
174     my $form = $m->form_name('TicketModify');
175     my $input = $form->find_input(
176         'Object-RT::Ticket-'. $t->id .'-CustomField-'. $cf->id .'-Value'
177     );
178     ok $input, 'found input';
179     $m->click('SubmitTicket');
180
181     my $tid = $t->id;
182     $t = RT::Ticket->new( $RT::SystemUser );
183     $t->Load( $tid );
184     is $t->FirstCustomFieldValue($cf_name), '2012-02-12';
185 }
186