Skip to content

Commit bf5f9e3

Browse files
Johnetordoffcslzchen
authored andcommitted
Add/update tests/fixtures for metadata id property
1 parent aaff576 commit bf5f9e3

File tree

14 files changed

+138
-10
lines changed

14 files changed

+138
-10
lines changed

tests/core/fixtures.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import pytest
2+
3+
from tests import utils
4+
from waterbutler.core.path import WaterButlerPath
5+
6+
7+
@pytest.fixture
8+
def provider1():
9+
return utils.MockProvider1({'user': 'name'}, {'pass': 'word'}, {})
10+
11+
12+
@pytest.fixture
13+
def provider2():
14+
return utils.MockProvider2({'user': 'name'}, {'pass': 'phrase'}, {})
15+
16+
17+
@pytest.fixture
18+
def dest_path():
19+
return WaterButlerPath('/older folder/new folder/')
20+
21+
@pytest.fixture
22+
def folder_children():
23+
return [utils.MockFileMetadata(), utils.MockFolderMetadata(), utils.MockFileMetadata()]
24+
25+
@pytest.fixture
26+
def src_path():
27+
return WaterButlerPath('/folder with children/')
28+
29+
@pytest.fixture
30+
def mock_folder():
31+
return utils.MockFolderMetadata()

tests/core/test_provider.py

Lines changed: 81 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,14 @@
55
from waterbutler.core import metadata
66
from waterbutler.core import exceptions
77

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+
)
1816

1917
class TestBaseProvider:
2018

@@ -481,3 +479,76 @@ def test_build_range_header(self, provider1):
481479
assert 'bytes=10-' == provider1._build_range_header((10, None))
482480
assert 'bytes=10-100' == provider1._build_range_header((10, 100))
483481
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)

tests/providers/bitbucket/test_metadata.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ def test_build_file_metadata(self, file_metadata, owner, repo):
2727
except Exception as exc:
2828
pytest.fail(str(exc))
2929

30+
assert metadata.id == full_path
3031
assert metadata.name == name
3132
assert metadata.path == full_path
3233
assert metadata.kind == 'file'

tests/providers/box/test_metadata.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ def test_file_metadata(self, root_provider_fixtures):
1616
item = root_provider_fixtures['file_metadata']['entries'][0]
1717
dest_path = WaterButlerPath('/charmander/name.txt', _ids=('0', item['id'], item['id']))
1818
data = BoxFileMetadata(item, dest_path)
19+
assert data.id == '5000948880'
1920
assert data.name == 'tigers.jpeg'
2021
assert data.path == '/5000948880'
2122
assert data.provider == 'box'

tests/providers/cloudfiles/test_metadata.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ def test_header_metadata(self, file_header_metadata_txt):
3939

4040
path = WaterButlerPath('/file.txt')
4141
data = CloudFilesHeaderMetadata(file_header_metadata_txt, path.path)
42+
assert data.id == '/file.txt'
4243
assert data.name == 'file.txt'
4344
assert data.path == '/file.txt'
4445
assert data.provider == 'cloudfiles'

tests/providers/dataverse/test_metadata.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ def test_revision_metadata(self, revision_metadata_object):
3232
class TestFileMetadata:
3333

3434
def test_file_metadata(self, file_metadata_object):
35+
assert file_metadata_object.id == '20'
3536
assert file_metadata_object.is_file
3637
assert not file_metadata_object.is_folder
3738
assert file_metadata_object.provider == 'dataverse'

tests/providers/dropbox/test_metadata.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ class TestDropboxMetadata:
1212
def test_file_metadata(self, provider_fixtures):
1313
data = DropboxFileMetadata(provider_fixtures['file_metadata'], '/Photos')
1414

15+
assert data.id == 'id:8y8sAJlrhuAAAAAAAAAAAQ'
1516
assert data.name == 'Getting_Started.pdf'
1617
assert data.path == '/Getting_Started.pdf'
1718
assert data.size == 124778
@@ -88,6 +89,7 @@ def test_file_metadata(self, provider_fixtures):
8889
def test_folder_metadata(self, provider_fixtures):
8990
data = DropboxFolderMetadata(provider_fixtures['folder_metadata'], '/Photos')
9091

92+
assert data.id == 'id:67BLXqRKo-gAAAAAAAADZg'
9193
assert data.name == 'newfolder'
9294
assert data.path == '/newfolder/'
9395
assert data.etag is None

tests/providers/filesystem/test_metadata.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ class TestMetadata:
3939

4040
def test_file_metadata(self, file_metadata):
4141
data = FileSystemFileMetadata(file_metadata, '/')
42+
assert data.id == '/code/website/osfstoragecache/77094244-aa24-48da-9437-d8ce6f7a94e9'
4243
assert data.path == '/code/website/osfstoragecache/77094244-aa24-48da-9437-d8ce6f7a94e9'
4344
assert data.provider == 'filesystem'
4445
assert data.modified == 'Wed, 20 Sep 2017 15:16:02 +0000'

tests/providers/github/test_metadata.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ def test_build_file_metadata_from_tree(self, metadata_fixtures):
2020
except Exception as exc:
2121
pytest.fail(str(exc))
2222

23+
assert metadata.id == '/README.md'
2324
assert metadata.name == 'README.md'
2425
assert metadata.path == '/README.md'
2526
assert metadata.modified is None
@@ -45,6 +46,7 @@ def test_build_file_metadata_from_contents(self, metadata_fixtures):
4546
except Exception as exc:
4647
pytest.fail(str(exc))
4748

49+
assert metadata.id == '/epsilon'
4850
assert metadata.name == 'epsilon'
4951
assert metadata.path == '/epsilon'
5052
assert metadata.modified is None
@@ -70,6 +72,7 @@ def test_build_folder_metadata_from_tree(self, metadata_fixtures):
7072
except Exception as exc:
7173
pytest.fail(str(exc))
7274

75+
assert metadata.id == '/foldera/folderb/lorch/'
7376
assert metadata.name == 'lorch'
7477
assert metadata.path == '/foldera/folderb/lorch/'
7578
assert metadata.extra == {}
@@ -84,6 +87,7 @@ def test_build_folder_metadata_from_content(self, metadata_fixtures):
8487
except Exception as exc:
8588
pytest.fail(str(exc))
8689

90+
assert metadata.id == '/manyfiles/'
8791
assert metadata.name == 'manyfiles'
8892
assert metadata.path == '/manyfiles/'
8993
assert metadata.extra == {}
@@ -98,6 +102,7 @@ def test_file_metadata_with_ref(self, metadata_fixtures):
98102
except Exception as exc:
99103
pytest.fail(str(exc))
100104

105+
assert metadata.id == '/README.md'
101106
assert metadata.name == 'README.md'
102107
assert metadata.path == '/README.md'
103108
assert metadata.modified is None

tests/providers/onedrive/test_metadata.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ def test_build_file_metadata(self, root_provider_fixtures):
2323
'etag': 'aRjRENTBFNDAwREZFN0Q0RSEyOTEuMg',
2424
'webView': 'https://1drv.ms/t/s!AE59_g1ADtX0giM',
2525
}
26+
assert metadata.id == 'F4D50E400DFE7D4E!291'
2627
assert metadata.name == 'toes.txt'
2728
assert metadata.path == '/{}'.format(root_provider_fixtures['file_id'])
2829
assert metadata.size == 11
@@ -45,6 +46,7 @@ def test_build_folder_metadata(self, root_provider_fixtures):
4546

4647
metadata = OneDriveFolderMetadata(root_provider_fixtures['folder_metadata'], od_path)
4748
assert metadata.provider == 'onedrive'
49+
assert metadata.id == 'F4D50E400DFE7D4E!290'
4850
assert metadata.name == 'teeth'
4951
assert metadata.path == '/F4D50E400DFE7D4E!290/'
5052
assert metadata.etag == 'aRjRENTBFNDAwREZFN0Q0RSEyOTAuMA'

0 commit comments

Comments
 (0)