|
5 | 5 | from waterbutler.core import metadata |
6 | 6 | from waterbutler.core import exceptions |
7 | 7 |
|
8 | | - |
9 | | -@pytest.fixture |
10 | | -def provider1(): |
11 | | - return utils.MockProvider1({'user': 'name'}, {'pass': 'word'}, {}) |
12 | | - |
13 | | - |
14 | | -@pytest.fixture |
15 | | -def provider2(): |
16 | | - return utils.MockProvider2({'user': 'name'}, {'pass': 'phrase'}, {}) |
17 | | - |
| 8 | +from tests.core.fixtures import ( |
| 9 | + provider1, |
| 10 | + provider2, |
| 11 | + src_path, |
| 12 | + dest_path, |
| 13 | + folder_children, |
| 14 | + mock_folder |
| 15 | +) |
18 | 16 |
|
19 | 17 | class TestBaseProvider: |
20 | 18 |
|
@@ -481,3 +479,76 @@ def test_build_range_header(self, provider1): |
481 | 479 | assert 'bytes=10-' == provider1._build_range_header((10, None)) |
482 | 480 | assert 'bytes=10-100' == provider1._build_range_header((10, 100)) |
483 | 481 | assert 'bytes=-255' == provider1._build_range_header((None, 255)) |
| 482 | + |
| 483 | + |
| 484 | +class TestFolderFileOp: |
| 485 | + |
| 486 | + @pytest.mark.asyncio |
| 487 | + async def test_folder_file_op_overwrite(self, |
| 488 | + provider1, |
| 489 | + provider2, |
| 490 | + src_path, |
| 491 | + dest_path, |
| 492 | + mock_folder, |
| 493 | + folder_children): |
| 494 | + provider2.create_folder = utils.MockCoroutine(return_value=mock_folder) |
| 495 | + provider1.metadata = utils.MockCoroutine(return_value=folder_children) |
| 496 | + provider1.copy = utils.MockCoroutine(return_value=(utils.MockFolderMetadata(), True)) |
| 497 | + |
| 498 | + folder, created = await provider1._folder_file_op(provider1.copy, |
| 499 | + provider2, |
| 500 | + src_path, |
| 501 | + dest_path) |
| 502 | + |
| 503 | + provider2.create_folder.assert_called_with(dest_path, folder_precheck=False) |
| 504 | + provider1.metadata.assert_called_with(src_path) |
| 505 | + |
| 506 | + assert (folder, created) == (mock_folder, False) |
| 507 | + |
| 508 | + # The order of these lists does not matter, but they should contain all the same elements. |
| 509 | + assert all(child for child in folder.children if child in folder_children) |
| 510 | + assert all(child for child in folder_children if child in folder.children) |
| 511 | + |
| 512 | + @pytest.mark.asyncio |
| 513 | + async def test_folder_file_op_new(self, |
| 514 | + provider1, |
| 515 | + provider2, |
| 516 | + src_path, |
| 517 | + dest_path, |
| 518 | + mock_folder, |
| 519 | + folder_children): |
| 520 | + provider2.create_folder = utils.MockCoroutine(return_value=mock_folder) |
| 521 | + provider2.delete = utils.MockCoroutine(side_effect=exceptions.ProviderError('test message', |
| 522 | + code=404)) |
| 523 | + provider1.metadata = utils.MockCoroutine(return_value=folder_children) |
| 524 | + provider1.copy = utils.MockCoroutine(return_value=(utils.MockFolderMetadata(), True)) |
| 525 | + |
| 526 | + folder, created = await provider1._folder_file_op(provider1.copy, |
| 527 | + provider2, |
| 528 | + src_path, |
| 529 | + dest_path) |
| 530 | + provider2.create_folder.assert_called_with(dest_path, folder_precheck=False) |
| 531 | + provider1.metadata.assert_called_with(src_path) |
| 532 | + |
| 533 | + assert (folder, created) == (mock_folder, True) |
| 534 | + |
| 535 | + # The order of these lists does not matter, but they should contain all the same elements. |
| 536 | + assert all(child for child in folder.children if child in folder_children) |
| 537 | + assert all(child for child in folder_children if child in folder.children) |
| 538 | + |
| 539 | + @pytest.mark.asyncio |
| 540 | + async def test_folder_file_op_raises(self, |
| 541 | + provider1, |
| 542 | + provider2, |
| 543 | + src_path, |
| 544 | + dest_path, |
| 545 | + mock_folder, |
| 546 | + folder_children): |
| 547 | + provider2.create_folder = utils.MockCoroutine(return_value=mock_folder) |
| 548 | + provider2.delete = utils.MockCoroutine(side_effect=exceptions.ProviderError('test message', |
| 549 | + code=500)) |
| 550 | + provider1.metadata = utils.MockCoroutine(return_value=folder_children) |
| 551 | + provider1.copy = utils.MockCoroutine(return_value=(utils.MockFolderMetadata(), True)) |
| 552 | + |
| 553 | + with pytest.raises(exceptions.ProviderError): |
| 554 | + await provider1._folder_file_op(provider1.copy, provider2, src_path, dest_path) |
0 commit comments