|
| 1 | +import base64 |
1 | 2 | import json
|
2 | 3 | import os
|
3 | 4 | import platform
|
4 |
| -from unittest import TestCase |
| 5 | +from tempfile import NamedTemporaryFile |
| 6 | +from unittest import TestCase, mock |
5 | 7 |
|
6 | 8 | import pytest
|
7 | 9 | import responses
|
@@ -155,26 +157,69 @@ class GithubReleaseTests(TestCase):
|
155 | 157 | )
|
156 | 158 |
|
157 | 159 | @responses.activate
|
158 |
| - @mock.patch("semantic_release.hvcs.Github.token", return_value="super-token") |
159 |
| - def test_should_post_changelog(self, mock_token): |
160 |
| - def request_callback(request): |
161 |
| - payload = json.loads(request.body) |
162 |
| - self.assertEqual(payload["tag_name"], "v1.0.0") |
163 |
| - self.assertEqual(payload["body"], "text") |
164 |
| - self.assertEqual(payload["draft"], False) |
165 |
| - self.assertEqual(payload["prerelease"], False) |
166 |
| - self.assertEqual("token super-token", request.headers["Authorization"]) |
| 160 | + @mock.patch("semantic_release.hvcs.Github.token", return_value='super-token') |
| 161 | + def test_should_post_changelog_using_github_token(self, mock_token): |
| 162 | + with NamedTemporaryFile('w') as netrc_file: |
| 163 | + netrc_file.write('machine api.github.com\n') |
| 164 | + netrc_file.write('login username\n') |
| 165 | + netrc_file.write('password password\n') |
| 166 | + |
| 167 | + netrc_file.flush() |
| 168 | + |
| 169 | + def request_callback(request): |
| 170 | + payload = json.loads(request.body) |
| 171 | + self.assertEqual(payload["tag_name"], "v1.0.0") |
| 172 | + self.assertEqual(payload["body"], "text") |
| 173 | + self.assertEqual(payload["draft"], False) |
| 174 | + self.assertEqual(payload["prerelease"], False) |
| 175 | + self.assertEqual('token super-token', request.headers.get("Authorization")) |
| 176 | + |
| 177 | + return 201, {}, json.dumps({}) |
| 178 | + |
| 179 | + responses.add_callback( |
| 180 | + responses.POST, |
| 181 | + self.url, |
| 182 | + callback=request_callback, |
| 183 | + content_type="application/json", |
| 184 | + ) |
167 | 185 |
|
168 |
| - return 201, {}, json.dumps({}) |
| 186 | + with mock.patch.dict(os.environ, {'NETRC': netrc_file.name}): |
| 187 | + status = Github.post_release_changelog("relekang", "rmoq", "1.0.0", "text") |
| 188 | + self.assertTrue(status) |
169 | 189 |
|
170 |
| - responses.add_callback( |
171 |
| - responses.POST, |
172 |
| - self.url, |
173 |
| - callback=request_callback, |
174 |
| - content_type="application/json", |
175 |
| - ) |
176 |
| - status = Github.post_release_changelog("relekang", "rmoq", "1.0.0", "text") |
177 |
| - self.assertTrue(status) |
| 190 | + @responses.activate |
| 191 | + @mock.patch("semantic_release.hvcs.Github.token", return_value=None) |
| 192 | + def test_should_post_changelog_using_netrc(self, mock_token): |
| 193 | + with NamedTemporaryFile('w') as netrc_file: |
| 194 | + netrc_file.write('machine api.github.com\n') |
| 195 | + netrc_file.write('login username\n') |
| 196 | + netrc_file.write('password password\n') |
| 197 | + |
| 198 | + netrc_file.flush() |
| 199 | + |
| 200 | + def request_callback(request): |
| 201 | + payload = json.loads(request.body) |
| 202 | + self.assertEqual(payload["tag_name"], "v1.0.0") |
| 203 | + self.assertEqual(payload["body"], "text") |
| 204 | + self.assertEqual(payload["draft"], False) |
| 205 | + self.assertEqual(payload["prerelease"], False) |
| 206 | + self.assertEqual( |
| 207 | + "Basic " + base64.encodebytes(b"username:password").decode('ascii').strip(), |
| 208 | + request.headers.get("Authorization") |
| 209 | + ) |
| 210 | + |
| 211 | + return 201, {}, json.dumps({}) |
| 212 | + |
| 213 | + responses.add_callback( |
| 214 | + responses.POST, |
| 215 | + self.url, |
| 216 | + callback=request_callback, |
| 217 | + content_type="application/json", |
| 218 | + ) |
| 219 | + |
| 220 | + with mock.patch.dict(os.environ, {'NETRC': netrc_file.name}): |
| 221 | + status = Github.post_release_changelog("relekang", "rmoq", "1.0.0", "text") |
| 222 | + self.assertTrue(status) |
178 | 223 |
|
179 | 224 | @responses.activate
|
180 | 225 | def test_should_return_false_status_if_it_failed(self):
|
@@ -217,7 +262,7 @@ def request_callback(request):
|
217 | 262 | self.assertEqual(request.body.decode().replace("\r\n", "\n"), dummy_content)
|
218 | 263 | self.assertEqual(request.url, self.asset_url_params)
|
219 | 264 | self.assertEqual(request.headers["Content-Type"], "text/markdown")
|
220 |
| - self.assertEqual("token super-token", request.headers["Authorization"]) |
| 265 | + self.assertEqual("token super-token", request.headers.get("Authorization")) |
221 | 266 |
|
222 | 267 | return 201, {}, json.dumps({})
|
223 | 268 |
|
@@ -246,7 +291,7 @@ def request_callback(request):
|
246 | 291 | self.assertEqual(request.body.decode().replace("\r\n", "\n"), dummy_content)
|
247 | 292 | self.assertEqual(request.url, self.dist_asset_url_params)
|
248 | 293 | self.assertEqual(request.headers["Content-Type"], "text/markdown")
|
249 |
| - self.assertEqual("token super-token", request.headers["Authorization"]) |
| 294 | + self.assertEqual("token super-token", request.headers.get("Authorization")) |
250 | 295 |
|
251 | 296 | return 201, {}, json.dumps({})
|
252 | 297 |
|
|
0 commit comments