RT 4.2.11, ticket#13852
[freeside.git] / rt / t / articles / set-subject.t
1 use strict;
2 use warnings;
3
4 use RT::Test tests => undef;
5
6 use RT::CustomField;
7 use RT::EmailParser;
8 use RT::Queue;
9 use RT::Ticket;
10 use_ok 'RT::Class';
11 use_ok 'RT::Topic';
12 use_ok 'RT::Article';
13
14 # Variables to test return values
15 my ($ret, $msg);
16
17 # Create a test class
18 my $class = RT::Class->new($RT::SystemUser);
19 ($ret, $msg) = $class->Create('Name' => 'TestClass-'.$$,
20                               'Description' => 'A general-purpose test class');
21 ok($ret, "Test class created: $msg");
22 # because id 0 represents global, it uses an empty Queue object...
23 ($ret, $msg) = $class->AddToObject(RT::Queue->new($RT::SystemUser));
24 ok($ret, "Applied Class globally: $msg");
25
26 # Create some article custom fields
27 my $bodyCF    = RT::CustomField->new($RT::SystemUser);
28 my $subjectCF = RT::CustomField->new($RT::SystemUser);
29 ($ret, $msg) = $subjectCF->Create('Name' => 'Subject-'.$$,
30                            'Type' => 'Text',
31                            'MaxValues' => 1,
32                            'LookupType' => 'RT::Class-RT::Article',
33                            'Description' => 'The subject to be answered',
34                            'Disabled' => 0);
35 ok($ret, "Question CF created: $msg");
36 ($ret, $msg) = $bodyCF->Create('Name' => 'Body-'.$$,
37                          'Type' => 'Text',
38                          'MaxValues' => 1,
39                          'LookupType' => 'RT::Class-RT::Article',
40                          'Description' => 'The body to the subject',
41                          'Disabled' => 0);
42 ok($ret, "Answer CF created: $msg");
43 my ($sid, $bid) = ($subjectCF->Id, $bodyCF->Id);
44
45 # Attach the custom fields to our class
46 ($ret, $msg) = $subjectCF->AddToObject($class);
47 ok($ret, "Subject CF added to class: $msg");
48 ($ret, $msg) = $bodyCF->AddToObject($class);
49 ok($ret, "Body CF added to class: $msg");
50
51 my $article = RT::Article->new($RT::SystemUser);
52 ($ret, $msg) = $article->Create(Name => 'First article '.$$,
53                                 Summary => 'blah blah 1',
54                                 Class => $class->Id,
55                                 "CustomField-$bid" => 'This goes in the body', 
56                                 "CustomField-$sid" => 'This clobbers your subject',
57                             );
58 ok($ret, "article 1 created: $msg");
59
60 # Create a ticket.
61 my $parser = RT::EmailParser->new();
62 $parser->ParseMIMEEntityFromScalar('From: root@localhost
63 To: rt@example.com
64 Subject: test ticket for articles
65
66 This is some form of new request.
67 May as well say something about Africa.');
68
69 my $ticket = RT::Ticket->new($RT::SystemUser);
70 my $obj;
71 ($ret, $obj, $msg) = $ticket->Create(Queue => 'General',
72                                      Subject => 'test ticket for articles '.$$,
73                                      MIMEObj => $parser->Entity);
74 ok($ret, "Test ticket for articles created: $msg");
75
76
77 #### Right.  That's our data.  Now begin the real testing.
78
79 my ($url, $m) = RT::Test->started_ok;
80 ok($m->login, 'logged in');
81
82 $m->get_ok( '/Ticket/Update.html?Action=Comment&id=' . $ticket->id,
83     'ticket update page' );
84 is($m->form_number(3)->find_input('UpdateSubject')->value,$ticket->Subject,'Ticket Subject Found');
85 $m->submit_form(
86     form_number => 3,
87     fields      => { 'Articles-Include-Article-Named' => $article->Id },
88     button      => 'Go',
89 );
90 is($m->form_number(3)->find_input('UpdateSubject')->value,$ticket->Subject,'Ticket Subject Not Clobbered');
91
92 $m->get_ok("$url/Admin/Articles/Classes/");
93 $m->follow_link_ok( { text => 'TestClass-'.$$ } );
94 $m->submit_form_ok({
95     form_number => 3,
96     fields => { SubjectOverride => $sid },
97 });
98 $m->content_contains("Added Subject Override: Subject-$$");
99
100 $m->get_ok( '/Ticket/Update.html?Action=Comment&id=' . $ticket->id,
101     'ticket update page' );
102 is($m->form_number(3)->find_input('UpdateSubject')->value,$ticket->Subject,'Ticket Subject Found');
103 $m->submit_form(
104     form_number => 3,
105     fields      => { 'Articles-Include-Article-Named' => $article->Name },
106     button      => 'Go',
107 );
108 is($m->form_number(3)->find_input('UpdateSubject')->value,$article->FirstCustomFieldValue("Subject-$$"),'Ticket Subject Clobbered');
109 undef $m;
110 done_testing;