t9001-send-email.sh 4.2 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
test_done