2010-12-01 21:27:52 +01:00
#!/usr/bin/env bash
2010-06-10 08:48:03 +02:00
test_description = "\"notmuch reply\" in several variations"
2015-08-06 11:13:36 +02:00
. ./test-lib.sh || exit 1
2010-06-10 08:48:03 +02:00
2010-09-18 00:25:39 +02:00
test_begin_subtest "Basic reply"
add_message '[from]="Sender <sender@example.com>"' \
2012-01-11 17:53:59 +01:00
[ to] = test_suite@notmuchmail.org \
[ subject] = notmuch-reply-test \
'[date]="Tue, 05 Jan 2010 15:43:56 -0000"' \
'[body]="basic reply test"'
2010-06-10 08:48:03 +02:00
2017-07-14 22:14:22 +02:00
output = $( notmuch reply id:${ gen_msg_id } 2>& 1 && echo OK)
2010-09-18 00:25:39 +02:00
test_expect_equal " $output " " From: Notmuch Test Suite <test_suite@notmuchmail.org>
2010-06-10 08:48:03 +02:00
Subject: Re: notmuch-reply-test
To: Sender <sender@example.com>
In-Reply-To: <${ gen_msg_id } >
References: <${ gen_msg_id } >
2010-06-10 08:48:04 +02:00
On Tue, 05 Jan 2010 15:43:56 -0000, Sender <sender@example.com> wrote:
2017-07-14 22:14:22 +02:00
> basic reply test
OK"
2010-06-10 08:48:03 +02:00
2010-09-18 00:25:39 +02:00
test_begin_subtest "Multiple recipients"
add_message '[from]="Sender <sender@example.com>"' \
2012-01-11 17:53:59 +01:00
'[to]="test_suite@notmuchmail.org, Someone Else <someone@example.com>"' \
[ subject] = notmuch-reply-test \
'[date]="Tue, 05 Jan 2010 15:43:56 -0000"' \
'[body]="Multiple recipients"'
2010-06-10 08:48:03 +02:00
2017-07-14 22:14:22 +02:00
output = $( notmuch reply id:${ gen_msg_id } 2>& 1 && echo OK)
2010-09-18 00:25:39 +02:00
test_expect_equal " $output " " From: Notmuch Test Suite <test_suite@notmuchmail.org>
2010-06-10 08:48:03 +02:00
Subject: Re: notmuch-reply-test
To: Sender <sender@example.com>, Someone Else <someone@example.com>
In-Reply-To: <${ gen_msg_id } >
References: <${ gen_msg_id } >
2010-06-10 08:48:04 +02:00
On Tue, 05 Jan 2010 15:43:56 -0000, Sender <sender@example.com> wrote:
2017-07-14 22:14:22 +02:00
> Multiple recipients
OK"
2010-06-10 08:48:03 +02:00
2010-09-18 00:25:39 +02:00
test_begin_subtest "Reply with CC"
add_message '[from]="Sender <sender@example.com>"' \
2012-01-11 17:53:59 +01:00
[ to] = test_suite@notmuchmail.org \
'[cc]="Other Parties <cc@example.com>"' \
[ subject] = notmuch-reply-test \
'[date]="Tue, 05 Jan 2010 15:43:56 -0000"' \
'[body]="reply with CC"'
2010-06-10 08:48:03 +02:00
2017-07-14 22:14:22 +02:00
output = $( notmuch reply id:${ gen_msg_id } 2>& 1 && echo OK)
2010-09-18 00:25:39 +02:00
test_expect_equal " $output " " From: Notmuch Test Suite <test_suite@notmuchmail.org>
2010-06-10 08:48:03 +02:00
Subject: Re: notmuch-reply-test
To: Sender <sender@example.com>
Cc: Other Parties <cc@example.com>
In-Reply-To: <${ gen_msg_id } >
References: <${ gen_msg_id } >
2010-06-10 08:48:04 +02:00
On Tue, 05 Jan 2010 15:43:56 -0000, Sender <sender@example.com> wrote:
2017-07-14 22:14:22 +02:00
> reply with CC
OK"
2010-06-10 08:48:03 +02:00
2010-09-18 00:25:39 +02:00
test_begin_subtest "Reply from alternate address"
add_message '[from]="Sender <sender@example.com>"' \
2012-01-11 17:53:59 +01:00
[ to] = test_suite_other@notmuchmail.org \
[ subject] = notmuch-reply-test \
'[date]="Tue, 05 Jan 2010 15:43:56 -0000"' \
'[body]="reply from alternate address"'
2010-06-10 08:48:03 +02:00
2017-07-14 22:14:22 +02:00
output = $( notmuch reply id:${ gen_msg_id } 2>& 1 && echo OK)
2010-09-18 00:25:39 +02:00
test_expect_equal " $output " " From: Notmuch Test Suite <test_suite_other@notmuchmail.org>
2010-06-10 08:48:03 +02:00
Subject: Re: notmuch-reply-test
To: Sender <sender@example.com>
In-Reply-To: <${ gen_msg_id } >
References: <${ gen_msg_id } >
2010-06-10 08:48:04 +02:00
On Tue, 05 Jan 2010 15:43:56 -0000, Sender <sender@example.com> wrote:
2017-07-14 22:14:22 +02:00
> reply from alternate address
OK"
2010-06-10 08:48:03 +02:00
2012-01-14 22:49:49 +01:00
test_begin_subtest "Reply from address in named group list"
add_message '[from]="Sender <sender@example.com>"' \
'[to]=group:test_suite@notmuchmail.org,someone@example.com\;' \
[ cc] = test_suite_other@notmuchmail.org \
[ subject] = notmuch-reply-test \
'[date]="Tue, 05 Jan 2010 15:43:56 -0000"' \
'[body]="Reply from address in named group list"'
2017-07-14 22:14:22 +02:00
output = $( notmuch reply id:${ gen_msg_id } 2>& 1 && echo OK)
2012-01-14 22:49:49 +01:00
test_expect_equal " $output " " From: Notmuch Test Suite <test_suite@notmuchmail.org>
Subject: Re: notmuch-reply-test
To: Sender <sender@example.com>, someone@example.com
In-Reply-To: <${ gen_msg_id } >
References: <${ gen_msg_id } >
On Tue, 05 Jan 2010 15:43:56 -0000, Sender <sender@example.com> wrote:
2017-07-14 22:14:22 +02:00
> Reply from address in named group list
OK"
2012-01-14 22:49:49 +01:00
2010-09-18 00:25:39 +02:00
test_begin_subtest "Support for Reply-To"
add_message '[from]="Sender <sender@example.com>"' \
2012-01-11 17:53:59 +01:00
[ to] = test_suite@notmuchmail.org \
[ subject] = notmuch-reply-test \
'[date]="Tue, 05 Jan 2010 15:43:56 -0000"' \
'[body]="support for reply-to"' \
'[reply-to]="Sender <elsewhere@example.com>"'
2010-06-10 08:48:03 +02:00
2017-07-14 22:14:22 +02:00
output = $( notmuch reply id:${ gen_msg_id } 2>& 1 && echo OK)
2010-09-18 00:25:39 +02:00
test_expect_equal " $output " " From: Notmuch Test Suite <test_suite@notmuchmail.org>
2010-06-10 08:48:03 +02:00
Subject: Re: notmuch-reply-test
To: Sender <elsewhere@example.com>
In-Reply-To: <${ gen_msg_id } >
References: <${ gen_msg_id } >
2010-06-10 08:48:04 +02:00
On Tue, 05 Jan 2010 15:43:56 -0000, Sender <sender@example.com> wrote:
2017-07-14 22:14:22 +02:00
> support for reply-to
OK"
2010-06-10 08:48:03 +02:00
2010-09-18 00:25:39 +02:00
test_begin_subtest "Un-munging Reply-To"
add_message '[from]="Sender <sender@example.com>"' \
2012-01-11 17:53:59 +01:00
'[to]="Some List <list@example.com>"' \
[ subject] = notmuch-reply-test \
'[date]="Tue, 05 Jan 2010 15:43:56 -0000"' \
'[body]="Un-munging Reply-To"' \
'[reply-to]="Evil Munging List <list@example.com>"'
2010-06-10 08:48:03 +02:00
2017-07-14 22:14:22 +02:00
output = $( notmuch reply id:${ gen_msg_id } 2>& 1 && echo OK)
2010-09-18 00:25:39 +02:00
test_expect_equal " $output " " From: Notmuch Test Suite <test_suite@notmuchmail.org>
2010-06-10 08:48:03 +02:00
Subject: Re: notmuch-reply-test
To: Sender <sender@example.com>, Some List <list@example.com>
In-Reply-To: <${ gen_msg_id } >
References: <${ gen_msg_id } >
2010-06-10 08:48:04 +02:00
On Tue, 05 Jan 2010 15:43:56 -0000, Sender <sender@example.com> wrote:
2017-07-14 22:14:22 +02:00
> Un-munging Reply-To
OK"
2010-09-18 00:25:39 +02:00
2017-07-14 22:14:23 +02:00
test_begin_subtest "Un-munging Reply-To With Exact Match"
add_message '[from]="Sender <sender@example.com>"' \
'[to]="Some List <list@example.com>"' \
[ subject] = notmuch-reply-test \
'[date]="Tue, 05 Jan 2010 15:43:56 -0000"' \
'[body]="Un-munging Reply-To"' \
'[reply-to]="Some List <list@example.com>"'
output = $( notmuch reply id:${ gen_msg_id } 2>& 1 && echo OK)
test_expect_equal " $output " " From: Notmuch Test Suite <test_suite@notmuchmail.org>
Subject: Re: notmuch-reply-test
To: Sender <sender@example.com>, Some List <list@example.com>
In-Reply-To: <${ gen_msg_id } >
References: <${ gen_msg_id } >
On Tue, 05 Jan 2010 15:43:56 -0000, Sender <sender@example.com> wrote:
> Un-munging Reply-To
OK"
test_begin_subtest "Un-munging Reply-To With Raw addr-spec"
add_message '[from]="Sender <sender@example.com>"' \
'[to]="Some List <list@example.com>"' \
[ subject] = notmuch-reply-test \
'[date]="Tue, 05 Jan 2010 15:43:56 -0000"' \
'[body]="Un-munging Reply-To"' \
'[reply-to]="list@example.com"'
output = $( notmuch reply id:${ gen_msg_id } 2>& 1 && echo OK)
test_expect_equal " $output " " From: Notmuch Test Suite <test_suite@notmuchmail.org>
Subject: Re: notmuch-reply-test
To: Sender <sender@example.com>, Some List <list@example.com>
In-Reply-To: <${ gen_msg_id } >
References: <${ gen_msg_id } >
On Tue, 05 Jan 2010 15:43:56 -0000, Sender <sender@example.com> wrote:
> Un-munging Reply-To
OK"
2010-09-18 00:25:39 +02:00
test_begin_subtest "Message with header of exactly 200 bytes"
add_message '[subject]="This subject is exactly 200 bytes in length. Other than its length there is not much of note here. Note that the length of 200 bytes includes the Subject: and Re: prefixes with two spaces"' \
2012-01-11 17:53:59 +01:00
'[date]="Tue, 05 Jan 2010 15:43:56 -0000"' \
'[body]="200-byte header"'
2017-07-14 22:14:22 +02:00
output = $( notmuch reply id:${ gen_msg_id } 2>& 1 && echo OK)
2010-09-18 00:25:39 +02:00
test_expect_equal " $output " " From: Notmuch Test Suite <test_suite@notmuchmail.org>
reply: Use RFC 2822/MIME wholly for text format template
Previously, reply's default text format used an odd mix of RFC 2045
MIME encoding for the reply template's body and some made-up RFC
2822-like UTF-8 format for the headers. The intent was to present the
headers to the user in a nice, un-encoded format, but this assumed
that whatever ultimately sent the email would RFC 2047-encode the
headers, while at the same time the body was already RFC 2045 encoded,
so it assumed that whatever sent the email would *not* re-encode the
body.
This can be fixed by either producing a fully decoded UTF-8 reply
template, or a fully encoded MIME-compliant RFC 2822 message. This
patch does the latter because it is
a) Well-defined by RFC 2822 and MIME (while any UTF-8 format would be
ad hoc).
b) Ready to be piped to sendmail. The point of the text format is to
be minimal, so a user should be able to pop up the template in
whatever editor they want, edit it, and push it to sendmail.
c) Consistent with frontend capabilities. If a frontend has the
smarts to RFC 2047 encode the headers before sending the mail, it
probably has the smarts to RFC 2047 decode them before presenting
the template to a user for editing.
Also, as far as I know, nothing automated consumes the reply text
format, so changing this should not cause serious problems. (And if
anything does still consume this format, it probably gets these
encoding issues wrong anyway.)
2013-08-16 17:35:43 +02:00
Subject: Re: This subject is exactly 200 bytes in length. Other than its
length there is not much of note here. Note that the length of 200 bytes
includes the Subject: and Re: prefixes with two spaces
2010-06-10 08:48:03 +02:00
In-Reply-To: <${ gen_msg_id } >
References: <${ gen_msg_id } >
2010-06-10 08:48:04 +02:00
On Tue, 05 Jan 2010 15:43:56 -0000, Notmuch Test Suite <test_suite@notmuchmail.org> wrote:
2017-07-14 22:14:22 +02:00
> 200-byte header
OK"
2012-05-24 07:15:50 +02:00
test_begin_subtest "From guessing: Envelope-To"
add_message '[from]="Sender <sender@example.com>"' \
'[to]="Recipient <recipient@example.com>"' \
'[subject]="From guessing"' \
'[date]="Tue, 05 Jan 2010 15:43:56 -0000"' \
'[body]="From guessing"' \
'[header]="Envelope-To: test_suite_other@notmuchmail.org"'
2017-07-14 22:14:22 +02:00
output = $( notmuch reply id:${ gen_msg_id } 2>& 1 && echo OK)
2012-05-24 07:15:50 +02:00
test_expect_equal " $output " " From: Notmuch Test Suite <test_suite_other@notmuchmail.org>
Subject: Re: From guessing
To: Sender <sender@example.com>, Recipient <recipient@example.com>
In-Reply-To: <${ gen_msg_id } >
References: <${ gen_msg_id } >
On Tue, 05 Jan 2010 15:43:56 -0000, Sender <sender@example.com> wrote:
2017-07-14 22:14:22 +02:00
> From guessing
OK"
2012-05-24 07:15:50 +02:00
test_begin_subtest "From guessing: X-Original-To"
add_message '[from]="Sender <sender@example.com>"' \
'[to]="Recipient <recipient@example.com>"' \
'[subject]="From guessing"' \
'[date]="Tue, 05 Jan 2010 15:43:56 -0000"' \
'[body]="From guessing"' \
'[header]="X-Original-To: test_suite@otherdomain.org"'
2017-07-14 22:14:22 +02:00
output = $( notmuch reply id:${ gen_msg_id } 2>& 1 && echo OK)
2012-05-24 07:15:50 +02:00
test_expect_equal " $output " " From: Notmuch Test Suite <test_suite@otherdomain.org>
Subject: Re: From guessing
To: Sender <sender@example.com>, Recipient <recipient@example.com>
In-Reply-To: <${ gen_msg_id } >
References: <${ gen_msg_id } >
On Tue, 05 Jan 2010 15:43:56 -0000, Sender <sender@example.com> wrote:
2017-07-14 22:14:22 +02:00
> From guessing
OK"
2012-05-24 07:15:50 +02:00
test_begin_subtest "From guessing: Delivered-To"
add_message '[from]="Sender <sender@example.com>"' \
'[to]="Recipient <recipient@example.com>"' \
'[subject]="From guessing"' \
'[date]="Tue, 05 Jan 2010 15:43:56 -0000"' \
'[body]="From guessing"' \
'[header]="Delivered-To: test_suite_other@notmuchmail.org"'
2017-07-14 22:14:22 +02:00
output = $( notmuch reply id:${ gen_msg_id } 2>& 1 && echo OK)
2012-05-24 07:15:50 +02:00
test_expect_equal " $output " " From: Notmuch Test Suite <test_suite_other@notmuchmail.org>
Subject: Re: From guessing
To: Sender <sender@example.com>, Recipient <recipient@example.com>
In-Reply-To: <${ gen_msg_id } >
References: <${ gen_msg_id } >
On Tue, 05 Jan 2010 15:43:56 -0000, Sender <sender@example.com> wrote:
2017-07-14 22:14:22 +02:00
> From guessing
OK"
2012-05-24 07:15:50 +02:00
2013-08-16 17:35:41 +02:00
test_begin_subtest "Reply with RFC 2047-encoded headers"
add_message '[subject]="=?iso-8859-1?q?=e0=df=e7?="' \
'[from]="=?utf-8?q?=e2=98=83?= <snowman@example.com>"' \
'[date]="Tue, 05 Jan 2010 15:43:56 -0000"' \
'[body]="Encoding"'
2013-08-19 16:40:03 +02:00
# GMime happens to change from Q- to B-encoding. We canonicalize the
# case of the encoding and charset because different versions of GMime
# capitalize the encoding differently.
2017-07-14 22:14:22 +02:00
output = $( ( notmuch reply id:${ gen_msg_id } 2>& 1 && echo OK) | perl -pe 's/=\?[^?]+\?[bB]\?/lc($&)/ge' )
2013-08-16 17:35:41 +02:00
test_expect_equal " $output " " \
From: Notmuch Test Suite <test_suite@notmuchmail.org>
reply: Use RFC 2822/MIME wholly for text format template
Previously, reply's default text format used an odd mix of RFC 2045
MIME encoding for the reply template's body and some made-up RFC
2822-like UTF-8 format for the headers. The intent was to present the
headers to the user in a nice, un-encoded format, but this assumed
that whatever ultimately sent the email would RFC 2047-encode the
headers, while at the same time the body was already RFC 2045 encoded,
so it assumed that whatever sent the email would *not* re-encode the
body.
This can be fixed by either producing a fully decoded UTF-8 reply
template, or a fully encoded MIME-compliant RFC 2822 message. This
patch does the latter because it is
a) Well-defined by RFC 2822 and MIME (while any UTF-8 format would be
ad hoc).
b) Ready to be piped to sendmail. The point of the text format is to
be minimal, so a user should be able to pop up the template in
whatever editor they want, edit it, and push it to sendmail.
c) Consistent with frontend capabilities. If a frontend has the
smarts to RFC 2047 encode the headers before sending the mail, it
probably has the smarts to RFC 2047 decode them before presenting
the template to a user for editing.
Also, as far as I know, nothing automated consumes the reply text
format, so changing this should not cause serious problems. (And if
anything does still consume this format, it probably gets these
encoding issues wrong anyway.)
2013-08-16 17:35:43 +02:00
Subject: Re: = ?iso-8859-1?b?4N/n?=
2013-08-19 16:40:03 +02:00
To: = ?utf-8?b?4piD?= <snowman@example.com>
2013-08-16 17:35:41 +02:00
In-Reply-To: <${ gen_msg_id } >
References: <${ gen_msg_id } >
On Tue, 05 Jan 2010 15:43:56 -0000, ☃ <snowman@example.com> wrote:
2017-07-14 22:14:22 +02:00
> Encoding
OK"
2013-08-16 17:35:41 +02:00
test_begin_subtest "Reply with RFC 2047-encoded headers (JSON)"
2017-07-14 22:14:22 +02:00
output = $( echo '{"answer":' && notmuch reply --format= json id:${ gen_msg_id } 2>& 1 && echo ', "success": "OK"}' )
2013-08-16 17:35:41 +02:00
test_expect_equal_json " $output " '
2017-07-14 22:14:22 +02:00
{ "answer" : {
2013-08-16 17:35:41 +02:00
"original" : {
"body" : [
{
"content" : "Encoding\n" ,
"content-type" : "text/plain" ,
"id" : 1
}
] ,
"date_relative" : "2010-01-05" ,
"excluded" : false,
2017-07-14 22:14:23 +02:00
"filename" : [ " ' ${ MAIL_DIR } '/msg-014 " ] ,
2013-08-16 17:35:41 +02:00
"headers" : {
"Date" : "Tue, 05 Jan 2010 15:43:56 +0000" ,
"From" : "\u2603 <snowman@example.com>" ,
"Subject" : "\u00e0\u00df\u00e7" ,
"To" : "Notmuch Test Suite <test_suite@notmuchmail.org>"
} ,
"id" : " ' ${ gen_msg_id } ' " ,
"match" : false,
"tags" : [
"inbox" ,
"unread"
] ,
"timestamp" : 1262706236
} ,
"reply-headers" : {
"From" : "Notmuch Test Suite <test_suite@notmuchmail.org>" ,
"In-reply-to" : " <' ${ gen_msg_id } '> " ,
2013-08-16 17:35:42 +02:00
"References" : " <' ${ gen_msg_id } '> " ,
2013-08-16 17:35:41 +02:00
"Subject" : "Re: \u00e0\u00df\u00e7" ,
"To" : "\u2603 <snowman@example.com>"
}
2017-07-14 22:14:22 +02:00
} ,
"success" : "OK"
2013-08-16 17:35:41 +02:00
} '
2016-09-13 19:14:09 +02:00
test_begin_subtest "Reply to a message with multiple Cc headers"
add_email_corpus broken
2017-07-14 22:14:22 +02:00
output = $( notmuch reply id:multiple-cc@example.org 2>& 1 && echo OK)
2016-09-13 19:14:09 +02:00
test_expect_equal " $output " " From: Notmuch Test Suite <test_suite@notmuchmail.org>
Subject: Re: wowsers!
To: Alice <alice@example.org>, Daniel <daniel@example.org>
Cc: Bob <bob@example.org>, Charles <charles@example.org>
In-Reply-To: <multiple-cc@example.org>
References: <multiple-cc@example.org>
On Thu, 16 Jun 2016 22:14:41 -0400, Alice <alice@example.org> wrote:
2017-07-14 22:14:22 +02:00
> Note the Cc: and cc: headers.
OK"
2013-08-16 17:35:41 +02:00
2010-06-10 08:48:03 +02:00
test_done