14fab44b5e366289e8295a2e41505c5e8b8e4fad
[freeside.git] / rt / t / mail / extractsubjecttag.t
1 use strict;
2 use warnings;
3 use utf8;
4
5 use RT::Test tests => 18;
6
7 my $queue = RT::Test->load_or_create_queue(
8     Name              => 'Regression',
9     CorrespondAddress => 'rt-recipient@example.com',
10     CommentAddress    => 'rt-recipient@example.com',
11 );
12 my $subject_tag = 'Windows/Servers-Desktops';
13 ok $queue && $queue->id, 'loaded or created queue';
14
15 diag "Set Subject Tag";
16 {
17     is(RT->System->SubjectTag($queue), undef, 'No Subject Tag yet');
18     my ($status, $msg) = $queue->SetSubjectTag( $subject_tag );
19     ok $status, "set subject tag for the queue" or diag "error: $msg";
20     is(RT->System->SubjectTag($queue), $subject_tag, "Set Subject Tag to $subject_tag");
21 }
22
23 my $original_ticket = RT::Ticket->new( RT->SystemUser );
24 diag "Create a ticket and make sure it has the subject tag";
25 {
26     $original_ticket->Create(
27         Queue => $queue->id,
28         Subject => 'test',
29         Requestor => 'root@localhost'
30     );
31     my @mails = RT::Test->fetch_caught_mails;
32     ok @mails, "got some outgoing emails";
33
34     my $status = 1;
35     foreach my $mail ( @mails ) {
36         my $entity = parse_mail( $mail );
37         my $subject = $entity->head->get('Subject');
38         $subject =~ /\[\Q$subject_tag\E #\d+\]/
39             or do { $status = 0; diag "wrong subject: $subject" };
40     }
41     ok $status, "Correctly added subject tag to ticket";
42 }
43
44
45 diag "Test that a reply with a Subject Tag doesn't change the subject";
46 {
47     my $ticketid = $original_ticket->Id;
48     my $text = <<EOF;
49 From: root\@localhost
50 To: general\@$RT::rtname
51 Subject: [$subject_tag #$ticketid] test
52
53 reply with subject tag
54 EOF
55     my ($status, $id) = RT::Test->send_via_mailgate($text, queue => $queue->Name);
56     is ($status >> 8, 0, "The mail gateway exited normally");
57     is ($id, $ticketid, "Replied to ticket $id correctly");
58
59     my $freshticket = RT::Ticket->new( RT->SystemUser );
60     $freshticket->LoadById($id);
61     is($original_ticket->Subject,$freshticket->Subject,'Stripped Queue Subject Tag correctly');
62
63 }
64
65 diag "Test that a reply with another RT's subject tag changes the subject";
66 {
67     my $ticketid = $original_ticket->Id;
68     my $text = <<EOF;
69 From: root\@localhost
70 To: general\@$RT::rtname
71 Subject: [$subject_tag #$ticketid] [remote-rt-system #79] test
72
73 reply with subject tag and remote rt subject tag
74 EOF
75     my ($status, $id) = RT::Test->send_via_mailgate($text, queue => $queue->Name);
76     is ($status >> 8, 0, "The mail gateway exited normally");
77     is ($id, $ticketid, "Replied to ticket $id correctly");
78
79     my $freshticket = RT::Ticket->new( RT->SystemUser );
80     $freshticket->LoadById($id);
81     like($freshticket->Subject,qr/\[remote-rt-system #79\]/,"Kept remote rt's subject tag");
82     unlike($freshticket->Subject,qr/\[\Q$subject_tag\E #$ticketid\]/,'Stripped Queue Subject Tag correctly');
83
84 }
85
86 diag "Test that extraction of another RT's subject tag grabs only tag";
87 {
88     my $ticketid = $original_ticket->Id;
89     my $text = <<EOF;
90 From: root\@localhost
91 To: general\@$RT::rtname
92 Subject: [$subject_tag #$ticketid] [comment] [remote-rt-system #79] test
93
94 reply with subject tag and remote rt subject tag
95 EOF
96     my ($status, $id) = RT::Test->send_via_mailgate($text, queue => $queue->Name);
97     is ($status >> 8, 0, "The mail gateway exited normally");
98     is ($id, $ticketid, "Replied to ticket $id correctly");
99
100     my $freshticket = RT::Ticket->new( RT->SystemUser );
101     $freshticket->LoadById($id);
102     like($freshticket->Subject,qr/\[remote-rt-system #79\]/,"Kept remote rt's subject tag");
103     unlike($freshticket->Subject,qr/comment/,"doesn't grab comment");
104     unlike($freshticket->Subject,qr/\[\Q$subject_tag\E #$ticketid\]/,'Stripped Queue Subject Tag correctly');
105 }
106