#!/bin/sh
######################################################
#
# Test repl -convertarg
#
######################################################

set -e

if test -z "${MH_OBJ_DIR}"; then
    srcdir=`dirname $0`/../..
    MH_OBJ_DIR=`cd $srcdir && pwd`; export MH_OBJ_DIR
fi

. "${srcdir}/test/post/test-post-common.sh"

expected="$MH_TEST_DIR/test-convert$$.expected"
actual=`mhpath +`/draft

printf 'Local-Mailbox: recipient@example.com\n' >>"$MH"


#### Make sure that this works with 7-bit encoding.
LC_ALL=C; export LC_ALL


# check -convertarg with multiple parts and additional text in draft
start_test '-convertarg with multiple parts and additional text in draft'
cat >"$expected" <<'EOF'
From: recipient@example.com
To: sender@example.com
cc: 
Fcc: +outbox
Subject: Re: test
Comments: In-reply-to sender@example.com
   message dated "Thu, 11 Dec 2014 08:19:02 -0600."
MIME-Version: 1.0
Content-Type: text/plain; charset="US-ASCII"

> This is part 1.

> This is part 2.
EOF

cat >`mhpath new` <<'EOF'
From: sender@example.com
To: recipient@example.com
Subject: test
Date: Thu, 11 Dec 2014 08:19:02 -0600
Content-Type: multipart/mixed; boundary="_001_"
MIME-Version: 1.0

--_001_
Content-Type: text/plain

This is part 1.

--_001_
Content-Type: text/plain

This is part 2.

--_001_
Content-Type: text/enriched

This should not appear in the reply
because the content type isn't matched.

--_001_--
EOF

repl -noformat -convertarg text/plain '' -nowhatnowproc last
mhbuild -auto "$actual"
check "$actual" "$expected"


start_test "test ability to edit prior to encoding"
cat >"$expected" <<'EOF'
From: recipient@example.com
To: sender@example.com
cc: 
Fcc: +outbox
Subject: Re: test
Comments: In-reply-to sender@example.com
   message dated "Thu, 11 Dec 2014 08:19:02 -0600."
Nmh-check-text-encoding: unencoded
MIME-Version: 1.0
Content-Type: text/plain; charset="US-ASCII"

sender@example.com writes:

> This is a very, very, very, very, very, very, very, very, very, very, very, long line.
EOF

cat >`mhpath new` <<'EOF'
From: sender@example.com
To: recipient@example.com
Subject: test
Date: Thu, 11 Dec 2014 08:19:02 -0600
Content-Type: multipart/mixed; boundary="_001_"
MIME-Version: 1.0

--_001_
Content-Type: text/plain

This is a very, very, very, very, very, very, very, very, very, very, very, long line.

--_001_--
EOF

#### Just prefix the text with "> ".
cp "${MH}" "${MH}.new"
cat >>"${MH}.new" <<EOF
mhbuild-convert-text: sed 's/^\(.\)/> \1/; s/^$/>/;' <%F
EOF
repl -filter mhl.replywithoutbody -convertarg text/plain '' \
     -nowhatnowproc last
MH="${MH}.new" mhbuild "$actual"
check "$actual" "$expected"


# check that text is quoted-printable encoded due to long text line
# This tests the setting of reply_ct->c_reqencoding and
# (*text_plain_ct)->c_reqencoding in expand_pseudoheader().
start_test "encode text as quoted-printable due to long text line"
cat >"$expected" <<'EOF'
From: recipient@example.com
To: sender@example.com
cc: 
Fcc: +outbox
Subject: Re: test
Comments: In-reply-to sender@example.com
   message dated "Thu, 11 Dec 2014 08:19:02 -0600."
MIME-Version: 1.0
Content-Type: text/plain; charset="US-ASCII"
Content-Transfer-Encoding: quoted-printable

sender@example.com writes:

> This is a very, very, very, very, very, very, very, very, very, very, ve=
ry, long line.
EOF

repl -filter mhl.replywithoutbody -convertarg text/plain '' \
     -nowhatnowproc last
MH="${MH}.new" mhbuild -auto "$actual"
rm "${MH}.new"
check "$actual" "$expected"


#### Make sure that this works with 8-bit encoding.
finish_test
require_locale $en_locales


# check -convertarg with multiple parts, 7 bit
start_test '-convertarg with multiple parts, 7 bit'
cat >"$expected" <<'EOF'
From: recipient@example.com
To: sender@example.com
cc: 
Fcc: +outbox
Subject: Re: test
Comments: In-reply-to sender@example.com
   message dated "Thu, 11 Dec 2014 08:19:02 -0600."
MIME-Version: 1.0
Content-Type: text/plain; charset="UTF-8"

sender@example.com writes:

> This is part 1.

> This is part 2.
EOF

cat >`mhpath new` <<'EOF'
From: sender@example.com
To: recipient@example.com
Subject: test
Date: Thu, 11 Dec 2014 08:19:02 -0600
Content-Type: multipart/mixed; boundary="_001_"
MIME-Version: 1.0

--_001_
Content-Type: text/plain

This is part 1.

--_001_
Content-Type: text/plain; charset="UTF-8"

This is part 2.

--_001_--
EOF

repl -filter mhl.replywithoutbody -convertarg text/plain '' -nowhatnowproc last
mhbuild -auto "$actual"
check "$actual" "$expected"


# check -convertarg with multiple parts, 8 bit
start_test '-convertarg with multiple parts, 8 bit'
cat >"$expected" <<'EOF'
From: recipient@example.com
To: sender@example.com
cc: 
Fcc: +outbox
Subject: Re: test
Comments: In-reply-to sender@example.com
   message dated "Thu, 11 Dec 2014 08:19:02 -0600."
MIME-Version: 1.0
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit

sender@example.com writes:

> This is part 1.

> This is §2, with a non-ASCII character.
EOF

cat >`mhpath new` <<'EOF'
From: sender@example.com
To: recipient@example.com
Subject: test
Date: Thu, 11 Dec 2014 08:19:02 -0600
Content-Type: multipart/mixed; boundary="_001_"
MIME-Version: 1.0

--_001_
Content-Type: text/plain

This is part 1.

--_001_
Content-Type: text/plain; charset="UTF-8"

This is §2, with a non-ASCII character.

--_001_--
EOF

repl -filter mhl.replywithoutbody -convertarg text/plain '' -nowhatnowproc last
mhbuild -auto "$actual"
check "$actual" "$expected"


# check message with text part in multipart/related
start_test 'check message with text part in multipart/related'
cat >"$expected" <<'EOF'
From: recipient@example.com
To: sender@example.com
cc: 
Fcc: +outbox
Subject: Re: test with text part in multipart/related
Comments: In-reply-to sender@example.com
   message dated "."
MIME-Version: 1.0
Content-Type: text/plain; charset="UTF-8"

sender@example.com writes:

> This is a test.
EOF

cat >`mhpath new` <<'EOF'
From: sender@example.com
To: recipient@example.com
Subject: test with text part in multipart/related
Content-Type: multipart/alternative; boundary="_001_"
MIME-Version: 1.0

--_001_
Content-Type: multipart/related; type="text/plain"; boundary="_002_"

--_002_
Content-Type: text/plain; charset="UTF-8"

This is a test.

--_002_--

--_001_--
EOF

repl -filter mhl.replywithoutbody -convertarg text/plain '' -nowhatnowproc last
mhbuild -auto "$actual"
check "$actual" "$expected"


# check reply to calendar request
start_test 'check reply to calendar request'
cat >"$expected" <<'EOF'
From: recipient@example.com
To: sender@example.com
cc: 
Fcc: +outbox
Subject: Re: test iCalendar reply
Comments: In-reply-to sender@example.com
   message dated "."
MIME-Version: 1.0
Content-Type: text/calendar; method="REPLY"; charset="UTF-8"

BEGIN:VCALENDAR
METHOD:REPLY
PRODID:nmh mhical v0.5
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Eastern Standard Time
BEGIN:STANDARD
DTSTART:16010101T020000
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=11
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:16010101T020000
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=2SU;BYMONTH=3
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
ORGANIZER;CN=Requester:MAILTO:requester@example.com
ATTENDEE;PARTSTAT=ACCEPTED;CN=Recip:MAILTO:recipient@example.com
SUMMARY;LANGUAGE=en-US:Accepted: test request
DTSTART;TZID=Eastern Standard Time:20150105T090000
DTEND;TZID=Eastern Standard Time:20150105T093000
UID:0123456789
CLASS:PUBLIC
PRIORITY:5
TRANSP:OPAQUE
STATUS:CONFIRMED
SEQUENCE:0
LOCATION;LANGUAGE=en-US:
END:VEVENT
END:VCALENDAR
EOF

cat >`mhpath new` <<'EOF'
From: sender@example.com
To: recipient@example.com
Subject: test iCalendar reply
Content-Type: text/calendar; charset="UTF-8"
MIME-Version: 1.0

BEGIN:VCALENDAR
METHOD:REQUEST
PRODID:test-convert
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Eastern Standard Time
BEGIN:STANDARD
DTSTART:16010101T020000
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=11
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:16010101T020000
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=2SU;BYMONTH=3
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
ORGANIZER;CN=Requester:MAILTO:requester@example.com
ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=Requestee1
 :MAILTO:requestee1@example.com
ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=Requestee2
 :MAILTO:requestee2@example.com
ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=Requestee3
 :MAILTO:requestee3@example.com
SUMMARY;LANGUAGE=en-US:test request
DTSTART;TZID=Eastern Standard Time:20150105T090000
DTEND;TZID=Eastern Standard Time:20150105T093000
UID:0123456789
CLASS:PUBLIC
PRIORITY:5
DTSTAMP:20150101T171600Z
TRANSP:OPAQUE
STATUS:CONFIRMED
SEQUENCE:0
LOCATION;LANGUAGE=en-US:
BEGIN:VALARM
ACTION:DISPLAY
DESCRIPTION:REMINDER
TRIGGER;RELATED=START:-PT15M
END:VALARM
END:VEVENT
END:VCALENDAR
EOF

actual="$MH_TEST_DIR/test-convert$$.actual"
repl -noformat \
     -convertargs text/calendar '-reply accept -contenttype' -nowhatnowproc last
SIGNATURE=Recip mhbuild -auto - <`mhpath +`/draft | grep -v '^DTSTAMP:' >"$actual"
check "$actual" "$expected"


finish_test
exit $failed
