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