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