|
18 | 18 | from corehttp.rest import HttpRequest
|
19 | 19 | from corehttp.runtime.policies import SansIOHTTPPolicy
|
20 | 20 | from rest_client import MockRestClient
|
| 21 | +from utils import NamedIo |
21 | 22 |
|
22 | 23 |
|
23 | 24 | @pytest.fixture
|
@@ -448,3 +449,97 @@ def remaining(self):
|
448 | 449 | def test_stream_input():
|
449 | 450 | data_stream = Stream(length=4)
|
450 | 451 | HttpRequest(method="PUT", url="http://www.example.com", content=data_stream) # ensure we can make this HttpRequest
|
| 452 | + |
| 453 | + |
| 454 | +@pytest.fixture |
| 455 | +def filebytes(): |
| 456 | + file_path = os.path.join(os.path.dirname(__file__), "./conftest.py") |
| 457 | + return open(file_path, "rb") |
| 458 | + |
| 459 | + |
| 460 | +def test_multipart_bytes(filebytes): |
| 461 | + request = HttpRequest("POST", url="http://example.org", files={"file": filebytes}) |
| 462 | + |
| 463 | + assert request.content == {"file": ("conftest.py", filebytes, "application/octet-stream")} |
| 464 | + |
| 465 | + |
| 466 | +def test_multipart_filename_and_bytes(filebytes): |
| 467 | + files = ("specifiedFileName", filebytes) |
| 468 | + request = HttpRequest("POST", url="http://example.org", files={"file": files}) |
| 469 | + |
| 470 | + assert request.content == {"file": ("specifiedFileName", filebytes)} |
| 471 | + |
| 472 | + |
| 473 | +def test_multipart_filename_and_bytes_and_content_type(filebytes): |
| 474 | + files = ("specifiedFileName", filebytes, "application/json") |
| 475 | + request = HttpRequest("POST", url="http://example.org", files={"file": files}) |
| 476 | + |
| 477 | + assert request.content == {"file": ("specifiedFileName", filebytes, "application/json")} |
| 478 | + |
| 479 | + |
| 480 | +def test_multipart_incorrect_tuple_entry(filebytes): |
| 481 | + files = ("specifiedFileName", filebytes, "application/json", "extra") |
| 482 | + with pytest.raises(ValueError): |
| 483 | + HttpRequest("POST", url="http://example.org", files={"file": files}) |
| 484 | + |
| 485 | + |
| 486 | +def test_multipart_tuple_input_single(filebytes): |
| 487 | + request = HttpRequest("POST", url="http://example.org", files=[("file", filebytes)]) |
| 488 | + |
| 489 | + assert request.content == [("file", ("conftest.py", filebytes, "application/octet-stream"))] |
| 490 | + |
| 491 | + |
| 492 | +def test_multipart_tuple_input_multiple(filebytes): |
| 493 | + request = HttpRequest("POST", url="http://example.org", files=[("file", filebytes), ("file2", filebytes)]) |
| 494 | + |
| 495 | + assert request.content == [ |
| 496 | + ("file", ("conftest.py", filebytes, "application/octet-stream")), |
| 497 | + ("file2", ("conftest.py", filebytes, "application/octet-stream")), |
| 498 | + ] |
| 499 | + |
| 500 | + |
| 501 | +def test_multipart_tuple_input_multiple_with_filename_and_content_type(filebytes): |
| 502 | + request = HttpRequest( |
| 503 | + "POST", |
| 504 | + url="http://example.org", |
| 505 | + files=[("file", ("first file", filebytes, "image/pdf")), ("file2", ("second file", filebytes, "image/png"))], |
| 506 | + ) |
| 507 | + |
| 508 | + assert request.content == [ |
| 509 | + ("file", ("first file", filebytes, "image/pdf")), |
| 510 | + ("file2", ("second file", filebytes, "image/png")), |
| 511 | + ] |
| 512 | + |
| 513 | + |
| 514 | +def test_multipart_tuple_input_multiple_same_name(client): |
| 515 | + request = HttpRequest( |
| 516 | + "POST", |
| 517 | + url="/multipart/tuple-input-multiple-same-name", |
| 518 | + files=[ |
| 519 | + ("file", ("firstFileName", NamedIo("firstFile"), "image/pdf")), |
| 520 | + ("file", ("secondFileName", NamedIo("secondFile"), "image/png")), |
| 521 | + ], |
| 522 | + ) |
| 523 | + client.send_request(request).raise_for_status() |
| 524 | + |
| 525 | + |
| 526 | +def test_multipart_tuple_input_multiple_same_name_with_tuple_file_value(client): |
| 527 | + request = HttpRequest( |
| 528 | + "POST", |
| 529 | + url="/multipart/tuple-input-multiple-same-name-with-tuple-file-value", |
| 530 | + files=[("images", ("foo.png", NamedIo("notMyName.pdf"), "image/png")), ("images", NamedIo("foo.png"))], |
| 531 | + ) |
| 532 | + client.send_request(request).raise_for_status() |
| 533 | + |
| 534 | + |
| 535 | +def test_data_and_file_input_same_name(client): |
| 536 | + request = HttpRequest( |
| 537 | + "POST", |
| 538 | + url="/multipart/data-and-file-input-same-name", |
| 539 | + data={"message": "Hello, world!"}, |
| 540 | + files=[ |
| 541 | + ("file", ("firstFileName", NamedIo("firstFile"), "image/pdf")), |
| 542 | + ("file", ("secondFileName", NamedIo("secondFile"), "image/png")), |
| 543 | + ], |
| 544 | + ) |
| 545 | + client.send_request(request).raise_for_status() |
0 commit comments