#!/bin/sh
######################################################
#
# Test the use of the Attach: header
#
######################################################

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

. "$MH_OBJ_DIR/test/common.sh"

setup_test

LC_ALL=en_US.UTF-8; export LC_ALL

draft="$MH_TEST_DIR/$$.draft"
backup="${MH_TEST_DIR}/`mhparam sbackup`$$.draft.orig"
expected="$MH_TEST_DIR/$$.expected"

#
# Test out a simple draft, one part.
#

cat > "$draft" <<EOF
To: Mr Test <mrtest@example.com>
cc:
Fcc: +outbox
Attach: ${srcdir}/test/mhbuild/tiny.jpg
------
EOF

run_prog mhbuild "$draft"

cat > "$expected" <<EOF
To: Mr Test <mrtest@example.com>
cc:
Fcc: +outbox
MIME-Version: 1.0
Content-Type: image/jpeg; name="tiny.jpg"
Content-Description: tiny.jpg
Content-Disposition: attachment; filename="tiny.jpg"
Content-Transfer-Encoding: base64

/9g=
EOF

check "$draft" "$expected"

#
# Check out more common case, one (or more) attachments
# along with message text.
#

cat > "$draft" <<EOF
To: Mr Test <mrtest@example.com>
cc:
Fcc: +outbox
Attach: ${srcdir}/test/mhbuild/tiny.jpg
------
This is a test
EOF

run_prog mhbuild "$draft"

cat > "$expected" <<EOF
To: Mr Test <mrtest@example.com>
cc:
Fcc: +outbox
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="----- =_aaaaaaaaaa0"

------- =_aaaaaaaaaa0
Content-Type: text/plain; charset="us-ascii"

This is a test

------- =_aaaaaaaaaa0
Content-Type: image/jpeg; name="tiny.jpg"
Content-Description: tiny.jpg
Content-Disposition: attachment; filename="tiny.jpg"
Content-Transfer-Encoding: base64

/9g=

------- =_aaaaaaaaaa0--
EOF

check "$draft" "$expected"

#
# An empty Attach header
#

cat > "$draft" <<EOF
To: Mr Test <mrtest@example.com>
cc:
Fcc: +outbox
Attach:
------
This is a test of an empty attach header.
EOF

run_prog mhbuild "$draft"

cat > "$expected" <<EOF
To: Mr Test <mrtest@example.com>
cc:
Fcc: +outbox
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"

This is a test of an empty attach header.
EOF

check "$draft" "$expected"

#
# Check a completely empty message
#

cat > "$draft" <<EOF
To: Mr Test <mrtest@example.com>
cc:
Fcc: +outbox
Subject: Test of an empty body
EOF

run_prog mhbuild "$draft"

cat > "$expected" <<EOF
To: Mr Test <mrtest@example.com>
cc:
Fcc: +outbox
Subject: Test of an empty body
MIME-Version: 1.0
Content-Type: text/plain
EOF

check "$draft" "$expected"

#
# Make sure we fail if we run into a MIME-Version header
#

cat > "$draft" <<EOF
To: Mr Test <mrtest@example.com>
cc:
Fcc: +outbox
Subject: Test of an already-MIMEified message
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"

This is a preformatted MIME content test.
EOF

set +e
run_test 'eval mhbuild "$draft"' "mhbuild: draft shouldn't contain MIME-Version: field"
set -e

#
# Run it again using -auto
#

run_prog mhbuild -auto "$draft"

cat > "$expected" <<EOF
To: Mr Test <mrtest@example.com>
cc:
Fcc: +outbox
Subject: Test of an already-MIMEified message
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"

This is a preformatted MIME content test.
EOF

check "$draft" "$expected"

#
# Make sure -dist does nothing but encode headers
#

cat > "$draft" <<EOF
To: Señor Test <mrtest@example.com>
cc:
Fcc: +outbox
Subject: An empty dist test
EOF

run_prog mhbuild -dist "$draft"

cat > "$expected" <<EOF
To: =?UTF-8?Q?Se=C3=B1or_Test?= <mrtest@example.com>
cc:
Fcc: +outbox
Subject: An empty dist test
EOF

check "$draft" "$expected"

#
# Two parts, one attachment; make sure mixing of multiparts at different
# levels works
#

cat > "$draft" <<EOF
To: Mr Test <mrtest@example.com>
cc:
Fcc: +outbox
Subject: A more complete multipart test
Attach: ${srcdir}/test/mhbuild/tiny.jpg
--------
#begin alternative
#<text/plain
This is some tëxt.
#<text/html
<html>
<body>
This is some HTML tëxt.
</body>
</html>
#end
EOF

run_prog mhbuild "$draft"

cat > "$expected" <<EOF
To: Mr Test <mrtest@example.com>
cc:
Fcc: +outbox
Subject: A more complete multipart test
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="----- =_aaaaaaaaaa0"
Content-Transfer-Encoding: 8bit

------- =_aaaaaaaaaa0
Content-Type: multipart/alternative; boundary="----- =_aaaaaaaaaa1"
Content-Transfer-Encoding: 8bit

------- =_aaaaaaaaaa1
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit

This is some tëxt.

------- =_aaaaaaaaaa1
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: 8bit

<html>
<body>
This is some HTML tëxt.
</body>
</html>

------- =_aaaaaaaaaa1--

------- =_aaaaaaaaaa0
Content-Type: image/jpeg; name="tiny.jpg"
Content-Description: tiny.jpg
Content-Disposition: attachment; filename="tiny.jpg"
Content-Transfer-Encoding: base64

/9g=

------- =_aaaaaaaaaa0--
EOF

check "$draft" "$expected"

[ ${failed:=0} -eq 0 ]  &&  rm -f ${backup}

exit ${failed:-0}
