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