Skip to content

Commit 6318684

Browse files
committed
Finish work on orphan overwrites
1 parent cd696db commit 6318684

File tree

9 files changed

+243
-172
lines changed

9 files changed

+243
-172
lines changed

tests/core/test_provider.py

Lines changed: 31 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -40,32 +40,44 @@ def test_can_intra_move(self, provider2):
4040

4141
@pytest.mark.asyncio
4242
async def test_will_orphan_dest_is_file(self, provider1):
43-
src_path = WaterButlerPath('/folder1/folder1/',
44-
_ids=['root', 'folder', 'Folder'],
45-
folder=True)
46-
dest_path = WaterButlerPath('/folder1/',
47-
_ids=['root','folder'],
48-
folder=False)
43+
src_path = WaterButlerPath(
44+
'/folder1/folder1/',
45+
_ids=['root', 'folder', 'Folder'],
46+
folder=True
47+
)
48+
dest_path = WaterButlerPath(
49+
'/folder1/',
50+
_ids=['root','folder'],
51+
folder=False
52+
)
4953
assert provider1.replace_will_orphan(src_path, dest_path) == False
5054

5155
@pytest.mark.asyncio
5256
async def test_will_orphan_dest_different_names(self, provider1):
53-
src_path = WaterButlerPath('/folder1/folder1/',
54-
_ids=['root', 'folder', 'Folder'],
55-
folder=True)
56-
dest_path = WaterButlerPath('/folder2/',
57-
_ids=['root','folder'],
58-
folder=True)
57+
src_path = WaterButlerPath(
58+
'/folder1/folder1/',
59+
_ids=['root', 'folder', 'Folder'],
60+
folder=True
61+
)
62+
dest_path = WaterButlerPath(
63+
'/folder2/',
64+
_ids=['root','folder'],
65+
folder=True
66+
)
5967
assert provider1.replace_will_orphan(src_path, dest_path) == False
6068

6169
@pytest.mark.asyncio
6270
async def test_will_orphan_dest_different_branch(self, provider1):
63-
src_path = WaterButlerPath('/other_folder/folder1/',
64-
_ids=['root', 'other_folder', 'Folder'],
65-
folder=True)
66-
dest_path = WaterButlerPath('/folder1/',
67-
_ids=['root','folder'],
68-
folder=True)
71+
src_path = WaterButlerPath(
72+
'/other_folder/folder1/',
73+
_ids=['root', 'other_folder', 'Folder'],
74+
folder=True
75+
)
76+
dest_path = WaterButlerPath(
77+
'/folder1/',
78+
_ids=['root','folder'],
79+
folder=True
80+
)
6981
assert provider1.replace_will_orphan(src_path, dest_path) == False
7082

7183
@pytest.mark.asyncio
@@ -482,6 +494,7 @@ async def test_intra_move_folder_orphan(self, provider1):
482494

483495
with pytest.raises(exceptions.OrphanSelfError) as exc:
484496
await provider1.move(provider1, src_path, dest_path)
497+
485498
assert exc.value.code == 400
486499
assert exc.typename == 'OrphanSelfError'
487500

tests/providers/box/test_provider.py

Lines changed: 77 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -164,13 +164,17 @@ async def test_validate_path_bad_path(self, provider):
164164
async def test_validate_path(self, provider, root_provider_fixtures):
165165
provider.folder = '0'
166166
folder_id = '0'
167+
response_body = root_provider_fixtures['revalidate_metadata']
168+
169+
good_url = provider.build_url(
170+
'folders',
171+
folder_id,
172+
'items',
173+
fields='id,name,type',
174+
limit=1000
175+
)
167176

168-
good_url = provider.build_url('folders', folder_id, 'items',
169-
fields='id,name,type', limit=1000)
170-
171-
aiohttpretty.register_json_uri('GET', good_url,
172-
body=root_provider_fixtures['revalidate_metadata'],
173-
status=200)
177+
aiohttpretty.register_json_uri('GET', good_url, body=response_body, status=200)
174178

175179
result = await provider.validate_path('/bulbasaur')
176180
assert result == WaterButlerPath('/bulbasaur', folder=False)
@@ -377,22 +381,23 @@ async def test_delete_root_no_confirm(self, provider, root_provider_fixtures):
377381
@pytest.mark.aiohttpretty
378382
async def test_delete_root(self, provider, root_provider_fixtures):
379383
item = root_provider_fixtures['file_metadata']['entries'][0]
384+
list_response_body = root_provider_fixtures['one_entry_folder_list_metadata']
380385
path = WaterButlerPath('/newfile', _ids=(provider.folder, item['id']))
381386
root_path = WaterButlerPath('/', _ids=('0'))
382387

383-
url = provider.build_url('folders', root_path.identifier, 'items',
384-
fields='id,name,size,modified_at,etag,total_count',
385-
offset=(0), limit=1000)
386-
aiohttpretty.register_json_uri(
387-
'GET',
388-
url,
389-
body=root_provider_fixtures['one_entry_folder_list_metadata']
388+
list_url = provider.build_url(
389+
'folders',
390+
root_path.identifier,
391+
'items',
392+
fields='id,name,size,modified_at,etag,total_count',
393+
offset=(0),
394+
limit=1000
390395
)
391-
392396
url = provider.build_url('files', item['id'], fields='id,name,path_collection')
393397
delete_url = provider.build_url('files', path.identifier)
394-
aiohttpretty.register_json_uri('get', url,
395-
body=root_provider_fixtures['file_metadata']['entries'][0])
398+
399+
aiohttpretty.register_json_uri('GET', list_url, body=list_response_body)
400+
aiohttpretty.register_json_uri('GET', url, body=item)
396401
aiohttpretty.register_json_uri('DELETE', delete_url, status=204)
397402

398403
await provider.delete(root_path, 1)
@@ -647,9 +652,10 @@ async def test_intra_copy_folder(self, provider, intra_fixtures, root_provider_f
647652
expected_folder = BoxFolderMetadata(item, dest_path)
648653
expected_folder._children = []
649654
for child_item in list_metadata['entries']:
650-
child_path = dest_path.child(child_item['name'],
651-
folder=(child_item['type'] == 'folder'))
652-
655+
child_path = dest_path.child(
656+
child_item['name'],
657+
folder=(child_item['type'] == 'folder')
658+
)
653659
serialized_child = provider._serialize_item(child_item, child_path)
654660
expected_folder._children.append(serialized_child)
655661
expected = (expected_folder, True)
@@ -660,10 +666,12 @@ async def test_intra_copy_folder(self, provider, intra_fixtures, root_provider_f
660666

661667
@pytest.mark.asyncio
662668
@pytest.mark.aiohttpretty
663-
async def test_intra_copy_folder_replace(self,
664-
provider,
665-
intra_fixtures,
666-
root_provider_fixtures):
669+
async def test_intra_copy_folder_replace(
670+
self,
671+
provider,
672+
intra_fixtures,
673+
root_provider_fixtures
674+
):
667675
item = intra_fixtures['intra_folder_metadata']
668676
list_metadata = root_provider_fixtures['folder_list_metadata']
669677

@@ -672,9 +680,14 @@ async def test_intra_copy_folder_replace(self,
672680

673681
file_url = provider.build_url('folders', src_path.identifier, 'copy')
674682
delete_url = provider.build_url('folders', dest_path.identifier, recursive=True)
675-
list_url = provider.build_url('folders', item['id'], 'items',
676-
fields='id,name,size,modified_at,etag,total_count',
677-
offset=0, limit=1000)
683+
list_url = provider.build_url(
684+
'folders',
685+
item['id'],
686+
'items',
687+
fields='id,name,size,modified_at,etag,total_count',
688+
offset=0,
689+
limit=1000
690+
)
678691

679692
aiohttpretty.register_json_uri('GET', list_url, body=list_metadata)
680693
aiohttpretty.register_uri('DELETE', delete_url, status=204)
@@ -683,9 +696,10 @@ async def test_intra_copy_folder_replace(self,
683696
expected_folder = BoxFolderMetadata(item, dest_path)
684697
expected_folder._children = []
685698
for child_item in list_metadata['entries']:
686-
child_path = dest_path.child(child_item['name'],
687-
folder=(child_item['type'] == 'folder'))
688-
699+
child_path = dest_path.child(
700+
child_item['name'],
701+
folder=(child_item['type'] == 'folder')
702+
)
689703
serialized_child = provider._serialize_item(child_item, child_path)
690704
expected_folder._children.append(serialized_child)
691705
expected = (expected_folder, False)
@@ -718,8 +732,10 @@ async def test_intra_move_file(self, provider, root_provider_fixtures):
718732
async def test_intra_move_file_replace(self, provider, root_provider_fixtures):
719733
item = root_provider_fixtures['file_metadata']['entries'][0]
720734
src_path = WaterButlerPath('/name.txt', _ids=(provider, item['id']))
721-
dest_path = WaterButlerPath('/charmander/name.txt',
722-
_ids=(provider, item['id'], 'YgzZejrj834j'))
735+
dest_path = WaterButlerPath(
736+
'/charmander/name.txt',
737+
_ids=(provider, item['id'], 'YgzZejrj834j')
738+
)
723739

724740
file_url = provider.build_url('files', src_path.identifier)
725741
delete_url = provider.build_url('files', dest_path.identifier)
@@ -765,21 +781,31 @@ async def test_intra_move_folder(self, provider, intra_fixtures, root_provider_f
765781

766782
@pytest.mark.asyncio
767783
@pytest.mark.aiohttpretty
768-
async def test_intra_move_folder_replace(self,
769-
provider,
770-
intra_fixtures,
771-
root_provider_fixtures):
784+
async def test_intra_move_folder_replace(
785+
self,
786+
provider,
787+
intra_fixtures,
788+
root_provider_fixtures
789+
):
772790
item = intra_fixtures['intra_folder_metadata']
773791
list_metadata = root_provider_fixtures['folder_list_metadata']
774792

775793
src_path = WaterButlerPath('/name/', _ids=(provider, item['id']))
776-
dest_path = WaterButlerPath('/charmander/name/', _ids=(provider, item['id'], '7759994812'))
794+
dest_path = WaterButlerPath(
795+
'/charmander/name/',
796+
_ids=(provider, item['id'], '7759994812')
797+
)
777798

778799
file_url = provider.build_url('folders', src_path.identifier)
779800
delete_url = provider.build_url('folders', dest_path.identifier, recursive=True)
780-
list_url = provider.build_url('folders', item['id'], 'items',
781-
fields='id,name,size,modified_at,etag,total_count',
782-
offset=0, limit=1000)
801+
list_url = provider.build_url(
802+
'folders',
803+
item['id'],
804+
'items',
805+
fields='id,name,size,modified_at,etag,total_count',
806+
offset=0,
807+
limit=1000
808+
)
783809

784810
aiohttpretty.register_json_uri('PUT', file_url, body=item)
785811
aiohttpretty.register_uri('DELETE', delete_url, status=204)
@@ -788,9 +814,10 @@ async def test_intra_move_folder_replace(self,
788814
expected_folder = BoxFolderMetadata(item, dest_path)
789815
expected_folder._children = []
790816
for child_item in list_metadata['entries']:
791-
child_path = dest_path.child(child_item['name'],
792-
folder=(child_item['type'] == 'folder'))
793-
817+
child_path = dest_path.child(
818+
child_item['name'],
819+
folder=(child_item['type'] == 'folder')
820+
)
794821
serialized_child = provider._serialize_item(child_item, child_path)
795822
expected_folder._children.append(serialized_child)
796823
expected = (expected_folder, False)
@@ -875,10 +902,14 @@ async def test_returns_metadata(self, provider, root_provider_fixtures):
875902
class TestOperations:
876903

877904
def test_will_self_overwrite(self, provider, other_provider):
878-
src_path = WaterButlerPath('/50 shades of nope.txt',
879-
_ids=(provider.folder, '12231'))
880-
dest_path = WaterButlerPath('/50 shades of nope2223.txt',
881-
_ids=(provider.folder, '2342sdfsd'))
905+
src_path = WaterButlerPath(
906+
'/50 shades of nope.txt',
907+
_ids=(provider.folder, '12231')
908+
)
909+
dest_path = WaterButlerPath(
910+
'/50 shades of nope2223.txt',
911+
_ids=(provider.folder, '2342sdfsd')
912+
)
882913

883914
result = provider.will_self_overwrite(other_provider, src_path, dest_path)
884915
assert result is False

tests/providers/dropbox/test_provider.py

Lines changed: 47 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -659,45 +659,45 @@ async def test_intra_copy_replace_file(
659659
provider_fixtures,
660660
error_fixtures
661661
):
662-
url = provider.build_url('files', 'delete_v2')
663-
path = await provider.validate_path('/The past')
664-
data = {'path': path.full_path}
665-
aiohttpretty.register_json_uri('POST', url, data=data, status=HTTPStatus.OK)
662+
delete_path = await provider.validate_path('/The past')
663+
delete_data = {'path': path.full_path}
664+
delete_url = provider.build_url('files', 'delete_v2')
665+
aiohttpretty.register_json_uri(
666+
'POST',
667+
delete_url,
668+
data=delete_data,
669+
status=HTTPStatus.OK
670+
)
666671

667672
src_path = WaterButlerPath('/pfile', prepend=provider.folder)
668673
dest_path = WaterButlerPath('/pfile_renamed', prepend=provider.folder)
669-
670-
url = provider.build_url('files', 'copy_v2')
671-
data = {
674+
rename_conflict_folder_metadata = error_fixtures['rename_conflict_folder_metadata']
675+
imc_metadata = provider_fixtures['intra_move_copy_file_metadata_v2']
676+
copy_data = {
672677
'from_path': src_path.full_path.rstrip('/'),
673678
'to_path': dest_path.full_path.rstrip('/')
674679
}
675-
aiohttpretty.register_json_uri('POST', url, **{
676-
"responses": [
677-
{
678-
'headers': {'Content-Type': 'application/json'},
679-
'data': data,
680-
'body': json.dumps(error_fixtures['rename_conflict_folder_metadata']).encode('utf-8'),
681-
'status': HTTPStatus.CONFLICT
682-
},
683-
{
684-
'headers': {'Content-Type': 'application/json'},
685-
'data': data,
686-
'body': json.dumps(provider_fixtures['intra_move_copy_file_metadata_v2']).encode('utf-8')
687-
},
688-
]
689-
})
680+
copy_responses = [
681+
{
682+
'headers': {'Content-Type': 'application/json'},
683+
'data': copy_data,
684+
'body': json.dumps(rename_conflict_folder_metadata).encode('utf-8'),
685+
'status': HTTPStatus.CONFLICT
686+
},
687+
{
688+
'headers': {'Content-Type': 'application/json'},
689+
'data': copy_data,
690+
'body': json.dumps(imc_metadata).encode('utf-8')
691+
},
692+
]
693+
copy_url = provider.build_url('files', 'copy_v2')
694+
aiohttpretty.register_json_uri('POST', copy_url, responses=copy_responses)
695+
696+
expected = (DropboxFileMetadata(imc_metadata['metadata'], provider.folder), False)
690697

691698
result = await provider.intra_copy(provider, src_path, dest_path)
692-
expected = (
693-
DropboxFileMetadata(
694-
provider_fixtures['intra_move_copy_file_metadata_v2']['metadata'],
695-
provider.folder
696-
),
697-
False
698-
)
699699

700-
assert expected == result
700+
assert result == expected
701701

702702
@pytest.mark.asyncio
703703
@pytest.mark.aiohttpretty
@@ -919,17 +919,27 @@ async def test_intra_move_casing_change(self, provider):
919919
class TestOperations:
920920

921921
def test_will_self_overwrite(self, provider, other_provider):
922-
src_path = WaterButlerPath('/50 shades of nope.txt',
923-
_ids=(provider.folder, '12231'))
924-
dest_path = WaterButlerPath('/50 shades of nope2223.txt',
925-
_ids=(provider.folder, '2342sdfsd'))
926-
927-
result = provider.will_self_overwrite(other_provider, src_path, dest_path)
928-
assert result is False
922+
src_path = WaterButlerPath(
923+
'/50 shades of nope.txt',
924+
_ids=(provider.folder, '12231')
925+
)
929926

930927
result = provider.will_self_overwrite(other_provider, src_path, src_path)
931928
assert result is True
932929

930+
def test_wont_self_overwrite(self, provider, other_provider):
931+
src_path = WaterButlerPath(
932+
'/50 shades of nope.txt',
933+
_ids=(provider.folder, '12231')
934+
)
935+
dest_path = WaterButlerPath(
936+
'/50 shades of nope2223.txt',
937+
_ids=(provider.folder, '2342sdfsd')
938+
)
939+
940+
result = provider.will_self_overwrite(other_provider, src_path, dest_path)
941+
assert result is False
942+
933943
def test_can_intra_copy(self, provider):
934944
assert provider.can_intra_copy(provider)
935945

0 commit comments

Comments
 (0)