t / t9001-send-email.shon commit Merge git://repo.or.cz/git-gui (77ad7a4)
   1#!/bin/sh
   2
   3test_description='git-send-email'
   4. ./test-lib.sh
   5
   6PROG='git send-email'
   7test_expect_success \
   8    'prepare reference tree' \
   9    'echo "1A quick brown fox jumps over the" >file &&
  10     echo "lazy dog" >>file &&
  11     git add file &&
  12     GIT_AUTHOR_NAME="A" git commit -a -m "Initial."'
  13
  14test_expect_success \
  15    'Setup helper tool' \
  16    '(echo "#!/bin/sh"
  17      echo shift
  18      echo output=1
  19      echo "while test -f commandline\$output; do output=\$((\$output+1)); done"
  20      echo for a
  21      echo do
  22      echo "  echo \"!\$a!\""
  23      echo "done >commandline\$output"
  24      echo "cat > msgtxt\$output"
  25      ) >fake.sendmail &&
  26     chmod +x ./fake.sendmail &&
  27     git add fake.sendmail &&
  28     GIT_AUTHOR_NAME="A" git commit -a -m "Second."'
  29
  30clean_fake_sendmail() {
  31        rm -f commandline* msgtxt*
  32}
  33
  34test_expect_success 'Extract patches' '
  35    patches=`git format-patch -n HEAD^1`
  36'
  37
  38test_expect_success 'Send patches' '
  39     git send-email --from="Example <nobody@example.com>" --to=nobody@example.com --smtp-server="$(pwd)/fake.sendmail" $patches 2>errors
  40'
  41
  42cat >expected <<\EOF
  43!nobody@example.com!
  44!author@example.com!
  45EOF
  46test_expect_success \
  47    'Verify commandline' \
  48    'diff commandline1 expected'
  49
  50cat >expected-show-all-headers <<\EOF
  510001-Second.patch
  52(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
  53Dry-OK. Log says:
  54Server: relay.example.com
  55MAIL FROM:<from@example.com>
  56RCPT TO:<to@example.com>,<cc@example.com>,<author@example.com>,<bcc@example.com>
  57From: Example <from@example.com>
  58To: to@example.com
  59Cc: cc@example.com, A <author@example.com>
  60Subject: [PATCH 1/1] Second.
  61Date: DATE-STRING
  62Message-Id: MESSAGE-ID-STRING
  63X-Mailer: X-MAILER-STRING
  64In-Reply-To: <unique-message-id@example.com>
  65References: <unique-message-id@example.com>
  66
  67Result: OK
  68EOF
  69
  70test_expect_success 'Show all headers' '
  71        git send-email \
  72                --dry-run \
  73                --from="Example <from@example.com>" \
  74                --to=to@example.com \
  75                --cc=cc@example.com \
  76                --bcc=bcc@example.com \
  77                --in-reply-to="<unique-message-id@example.com>" \
  78                --smtp-server relay.example.com \
  79                $patches |
  80        sed     -e "s/^\(Date:\).*/\1 DATE-STRING/" \
  81                -e "s/^\(Message-Id:\).*/\1 MESSAGE-ID-STRING/" \
  82                -e "s/^\(X-Mailer:\).*/\1 X-MAILER-STRING/" \
  83                >actual-show-all-headers &&
  84        test_cmp expected-show-all-headers actual-show-all-headers
  85'
  86
  87z8=zzzzzzzz
  88z64=$z8$z8$z8$z8$z8$z8$z8$z8
  89z512=$z64$z64$z64$z64$z64$z64$z64$z64
  90test_expect_success 'reject long lines' '
  91        clean_fake_sendmail &&
  92        cp $patches longline.patch &&
  93        echo $z512$z512 >>longline.patch &&
  94        ! git send-email \
  95                --from="Example <nobody@example.com>" \
  96                --to=nobody@example.com \
  97                --smtp-server="$(pwd)/fake.sendmail" \
  98                $patches longline.patch \
  99                2>errors &&
 100        grep longline.patch errors
 101'
 102
 103test_expect_success 'no patch was sent' '
 104        ! test -e commandline1
 105'
 106
 107test_expect_success 'allow long lines with --no-validate' '
 108        git send-email \
 109                --from="Example <nobody@example.com>" \
 110                --to=nobody@example.com \
 111                --smtp-server="$(pwd)/fake.sendmail" \
 112                --no-validate \
 113                $patches longline.patch \
 114                2>errors
 115'
 116
 117test_expect_success 'Invalid In-Reply-To' '
 118        clean_fake_sendmail &&
 119        git send-email \
 120                --from="Example <nobody@example.com>" \
 121                --to=nobody@example.com \
 122                --in-reply-to=" " \
 123                --smtp-server="$(pwd)/fake.sendmail" \
 124                $patches
 125                2>errors
 126        ! grep "^In-Reply-To: < *>" msgtxt1
 127'
 128
 129test_expect_success 'Valid In-Reply-To when prompting' '
 130        clean_fake_sendmail &&
 131        (echo "From Example <from@example.com>"
 132         echo "To Example <to@example.com>"
 133         echo ""
 134        ) | env GIT_SEND_EMAIL_NOTTY=1 git send-email \
 135                --smtp-server="$(pwd)/fake.sendmail" \
 136                $patches 2>errors &&
 137        ! grep "^In-Reply-To: < *>" msgtxt1
 138'
 139
 140test_expect_success 'setup fake editor' '
 141        (echo "#!/bin/sh" &&
 142         echo "echo fake edit >>\$1"
 143        ) >fake-editor &&
 144        chmod +x fake-editor
 145'
 146
 147test_expect_success '--compose works' '
 148        clean_fake_sendmail &&
 149        echo y | \
 150                GIT_EDITOR=$(pwd)/fake-editor \
 151                GIT_SEND_EMAIL_NOTTY=1 \
 152                git send-email \
 153                --compose --subject foo \
 154                --from="Example <nobody@example.com>" \
 155                --to=nobody@example.com \
 156                --smtp-server="$(pwd)/fake.sendmail" \
 157                $patches \
 158                2>errors
 159'
 160
 161test_expect_success 'first message is compose text' '
 162        grep "^fake edit" msgtxt1
 163'
 164
 165test_expect_success 'second message is patch' '
 166        grep "Subject:.*Second" msgtxt2
 167'
 168
 169test_done