t9001-send-email.sh 5.6 KB
Newer Older
1 2 3 4 5 6 7 8 9 10
#!/bin/sh

test_description='git-send-email'
. ./test-lib.sh

PROG='git send-email'
test_expect_success \
    'prepare reference tree' \
    'echo "1A quick brown fox jumps over the" >file &&
     echo "lazy dog" >>file &&
J
Jeff King 已提交
11
     git add file &&
12 13 14 15
     GIT_AUTHOR_NAME="A" git commit -a -m "Initial."'

test_expect_success \
    'Setup helper tool' \
16 17
    '(echo "#!/bin/sh"
      echo shift
18 19
      echo output=1
      echo "while test -f commandline\$output; do output=\$((\$output+1)); done"
20 21 22
      echo for a
      echo do
      echo "  echo \"!\$a!\""
23 24
      echo "done >commandline\$output"
      echo "cat > msgtxt\$output"
J
Jeff King 已提交
25 26 27
      ) >fake.sendmail &&
     chmod +x ./fake.sendmail &&
     git add fake.sendmail &&
28 29
     GIT_AUTHOR_NAME="A" git commit -a -m "Second."'

30 31 32 33
clean_fake_sendmail() {
	rm -f commandline* msgtxt*
}

34 35 36 37 38
test_expect_success 'Extract patches' '
    patches=`git format-patch -n HEAD^1`
'

test_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

42 43 44 45
cat >expected <<\EOF
!nobody@example.com!
!author@example.com!
EOF
46 47
test_expect_success \
    'Verify commandline' \
48
    'diff commandline1 expected'
49

50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
cat >expected-show-all-headers <<\EOF
0001-Second.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
Dry-OK. Log says:
Server: relay.example.com
MAIL FROM:<from@example.com>
RCPT TO:<to@example.com>,<cc@example.com>,<author@example.com>,<bcc@example.com>
From: Example <from@example.com>
To: to@example.com
Cc: cc@example.com, A <author@example.com>
Subject: [PATCH 1/1] Second.
Date: DATE-STRING
Message-Id: MESSAGE-ID-STRING
X-Mailer: X-MAILER-STRING
In-Reply-To: <unique-message-id@example.com>
References: <unique-message-id@example.com>

Result: OK
EOF

test_expect_success 'Show all headers' '
	git send-email \
		--dry-run \
		--from="Example <from@example.com>" \
		--to=to@example.com \
		--cc=cc@example.com \
		--bcc=bcc@example.com \
		--in-reply-to="<unique-message-id@example.com>" \
		--smtp-server relay.example.com \
		$patches |
	sed	-e "s/^\(Date:\).*/\1 DATE-STRING/" \
		-e "s/^\(Message-Id:\).*/\1 MESSAGE-ID-STRING/" \
		-e "s/^\(X-Mailer:\).*/\1 X-MAILER-STRING/" \
		>actual-show-all-headers &&
84
	test_cmp expected-show-all-headers actual-show-all-headers
85 86
'

87 88 89 90
z8=zzzzzzzz
z64=$z8$z8$z8$z8$z8$z8$z8$z8
z512=$z64$z64$z64$z64$z64$z64$z64$z64
test_expect_success 'reject long lines' '
91
	clean_fake_sendmail &&
92 93 94 95 96 97 98 99 100 101 102 103
	cp $patches longline.patch &&
	echo $z512$z512 >>longline.patch &&
	! git send-email \
		--from="Example <nobody@example.com>" \
		--to=nobody@example.com \
		--smtp-server="$(pwd)/fake.sendmail" \
		$patches longline.patch \
		2>errors &&
	grep longline.patch errors
'

test_expect_success 'no patch was sent' '
104
	! test -e commandline1
105 106
'

J
Jeff King 已提交
107 108 109 110 111 112 113 114 115 116
test_expect_success 'allow long lines with --no-validate' '
	git send-email \
		--from="Example <nobody@example.com>" \
		--to=nobody@example.com \
		--smtp-server="$(pwd)/fake.sendmail" \
		--no-validate \
		$patches longline.patch \
		2>errors
'

117
test_expect_success 'Invalid In-Reply-To' '
118
	clean_fake_sendmail &&
119 120 121 122 123 124 125
	git send-email \
		--from="Example <nobody@example.com>" \
		--to=nobody@example.com \
		--in-reply-to=" " \
		--smtp-server="$(pwd)/fake.sendmail" \
		$patches
		2>errors
126
	! grep "^In-Reply-To: < *>" msgtxt1
127 128 129
'

test_expect_success 'Valid In-Reply-To when prompting' '
130
	clean_fake_sendmail &&
131 132 133 134 135 136
	(echo "From Example <from@example.com>"
	 echo "To Example <to@example.com>"
	 echo ""
	) | env GIT_SEND_EMAIL_NOTTY=1 git send-email \
		--smtp-server="$(pwd)/fake.sendmail" \
		$patches 2>errors &&
137
	! grep "^In-Reply-To: < *>" msgtxt1
138 139
'

140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168
test_expect_success 'setup fake editor' '
	(echo "#!/bin/sh" &&
	 echo "echo fake edit >>\$1"
	) >fake-editor &&
	chmod +x fake-editor
'

test_expect_success '--compose works' '
	clean_fake_sendmail &&
	echo y | \
		GIT_EDITOR=$(pwd)/fake-editor \
		GIT_SEND_EMAIL_NOTTY=1 \
		git send-email \
		--compose --subject foo \
		--from="Example <nobody@example.com>" \
		--to=nobody@example.com \
		--smtp-server="$(pwd)/fake.sendmail" \
		$patches \
		2>errors
'

test_expect_success 'first message is compose text' '
	grep "^fake edit" msgtxt1
'

test_expect_success 'second message is patch' '
	grep "Subject:.*Second" msgtxt2
'

169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212
test_expect_success '--compose adds MIME for utf8 body' '
	clean_fake_sendmail &&
	(echo "#!/bin/sh" &&
	 echo "echo utf8 body: àéìöú >>\$1"
	) >fake-editor-utf8 &&
	chmod +x fake-editor-utf8 &&
	echo y | \
	  GIT_EDITOR=$(pwd)/fake-editor-utf8 \
	  GIT_SEND_EMAIL_NOTTY=1 \
	  git send-email \
	  --compose --subject foo \
	  --from="Example <nobody@example.com>" \
	  --to=nobody@example.com \
	  --smtp-server="$(pwd)/fake.sendmail" \
	  $patches &&
	grep "^utf8 body" msgtxt1 &&
	grep "^Content-Type: text/plain; charset=utf-8" msgtxt1
'

test_expect_success '--compose respects user mime type' '
	clean_fake_sendmail &&
	(echo "#!/bin/sh" &&
	 echo "(echo MIME-Version: 1.0"
	 echo " echo Content-Type: text/plain\\; charset=iso-8859-1"
	 echo " echo Content-Transfer-Encoding: 8bit"
	 echo " echo Subject: foo"
	 echo " echo "
	 echo " echo utf8 body: àéìöú) >\$1"
	) >fake-editor-utf8-mime &&
	chmod +x fake-editor-utf8-mime &&
	echo y | \
	  GIT_EDITOR=$(pwd)/fake-editor-utf8-mime \
	  GIT_SEND_EMAIL_NOTTY=1 \
	  git send-email \
	  --compose --subject foo \
	  --from="Example <nobody@example.com>" \
	  --to=nobody@example.com \
	  --smtp-server="$(pwd)/fake.sendmail" \
	  $patches &&
	grep "^utf8 body" msgtxt1 &&
	grep "^Content-Type: text/plain; charset=iso-8859-1" msgtxt1 &&
	! grep "^Content-Type: text/plain; charset=utf-8" msgtxt1
'

213
test_done