Skip to content

Commit

Permalink
Merge branch 'release/0.9.0'
Browse files Browse the repository at this point in the history
  • Loading branch information
chrisseto committed Jul 30, 2015
2 parents 7804e26 + 8913c89 commit 7d7407e
Show file tree
Hide file tree
Showing 25 changed files with 707 additions and 44 deletions.
7 changes: 7 additions & 0 deletions CHANGELOG
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,13 @@
ChangeLog
*********

0.9.0 (2015-07-29)
==================

- Web view links are included in the extra field when available
- Add many a test for moving and copying, tasks and endpoints
- Allow OsfStorage tasks to be disabled by adding including archive: false

0.8.0 (2015-07-14)
==================

Expand Down
2 changes: 2 additions & 0 deletions dev-requirements.txt
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
decorator==3.4.0
flake8==2.3.0
freezegun==0.3.4
ipdb==0.8
ipython==2.3.1
jinja2==2.7.3
pytest==2.6.4
pytest-cov==1.8.1
pyzmq==14.4.1
colorlog==2.5.0
redis==2.10.3
-e git+https://github.com/centerforopenscience/aiohttpretty.git#egg=aiohttpretty
-r requirements.txt
8 changes: 8 additions & 0 deletions tests/conftest.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
from waterbutler import settings
# Clear all celery settings
settings.config['TASKS_CONFIG'] = {
'WAIT_TIME_OUT': 30,
'CELERY_ALWAYS_EAGER': True,
'CELERY_RESULT_BACKEND': 'redis://'
}

import aiohttpretty


Expand Down
1 change: 1 addition & 0 deletions tests/core/test_provider.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
def provider1():
return utils.MockProvider1({'user': 'name'}, {'pass': 'word'}, {})


@pytest.fixture
def provider2():
return utils.MockProvider2({'user': 'name'}, {'pass': 'phrase'}, {})
Expand Down
8 changes: 6 additions & 2 deletions tests/providers/github/test_provider.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,10 @@
from waterbutler.core import streams
from waterbutler.core import exceptions
from waterbutler.core.path import WaterButlerPath
from waterbutler.core.provider import build_url

from waterbutler.providers.github import GitHubProvider
from waterbutler.providers.github import settings as github_settings
from waterbutler.providers.github.metadata import GitHubRevision
from waterbutler.providers.github.metadata import GitHubFileTreeMetadata
from waterbutler.providers.github.metadata import GitHubFolderTreeMetadata
Expand Down Expand Up @@ -668,8 +670,10 @@ def test_metadata_file(self, provider, repo_metadata, repo_tree_metadata_root):
aiohttpretty.register_json_uri('GET', latest_sha_url, body={'object': {'sha': ref}})

result = yield from provider.metadata(path)
item = repo_tree_metadata_root['tree'][0]
web_view = provider._web_view(path=path)

assert result == GitHubFileTreeMetadata(repo_tree_metadata_root['tree'][0])
assert result == GitHubFileTreeMetadata(item, web_view=web_view)

# TODO: Additional Tests
# def test_metadata_root_file_txt_branch(self, provider, repo_metadata, branch_metadata, repo_metadata_root):
Expand All @@ -690,7 +694,7 @@ def test_metadata_folder_root(self, provider, repo_metadata, content_repo_metada
if item['type'] == 'dir':
ret.append(GitHubFolderContentMetadata(item))
else:
ret.append(GitHubFileContentMetadata(item))
ret.append(GitHubFileContentMetadata(item, web_view=item['html_url']))

assert result == ret

Expand Down
6 changes: 3 additions & 3 deletions tests/providers/googledrive/test_metadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ def test_file_metadata_drive(basepath):
assert parsed.size == item['fileSize']
assert parsed.modified == item['modifiedDate']
assert parsed.content_type == item['mimeType']
assert parsed.extra == {'revisionId': item['version']}
assert parsed.extra == {'revisionId': item['version'], 'webView': item['alternateLink']}
assert parsed.path == '/' + os.path.join(*[x.raw for x in path.parts])
assert parsed.materialized_path == str(path)

Expand All @@ -46,7 +46,7 @@ def test_file_metadata_drive_slashes(basepath):
assert parsed.size == item['fileSize']
assert parsed.modified == item['modifiedDate']
assert parsed.content_type == item['mimeType']
assert parsed.extra == {'revisionId': item['version']}
assert parsed.extra == {'revisionId': item['version'], 'webView': item['alternateLink']}
assert parsed.path == '/' + os.path.join(*[x.raw for x in path.parts])
assert parsed.materialized_path == str(path)

Expand All @@ -57,7 +57,7 @@ def test_file_metadata_docs(basepath):
parsed = GoogleDriveFileMetadata(item, path)

assert parsed.name == item['title'] + '.gdoc'
assert parsed.extra == {'revisionId': item['version'], 'downloadExt': '.docx'}
assert parsed.extra == {'revisionId': item['version'], 'downloadExt': '.docx', 'webView': item['alternateLink']}


def test_folder_metadata():
Expand Down
101 changes: 101 additions & 0 deletions tests/server/handlers/test_copy.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
import json

from tornado import testing

from waterbutler.core.path import WaterButlerPath

from tests import utils


class TestCopyHandler(utils.MultiProviderHandlerTestCase):
HOOK_PATH = 'waterbutler.server.handlers.copy.CopyHandler._send_hook'

@testing.gen_test
def test_calls_copy(self):
self.source_provider.copy = utils.MockCoroutine(
return_value=(utils.MockFileMetadata(), False)
)

yield self.http_client.fetch(
self.get_url('/ops/copy'),
method='POST',
body=json.dumps(self.payload())
)

assert self.source_provider.copy.called
self.source_provider.copy.assert_called_once_with(
self.destination_provider,
WaterButlerPath(self.payload()['source']['path']),
WaterButlerPath(self.payload()['destination']['path']),
rename=None,
conflict='replace'
)

@testing.gen_test
def test_conflict(self):
self.source_provider.copy = utils.MockCoroutine(
return_value=(utils.MockFileMetadata(), True)
)

payload = self.payload()
payload['conflict'] = 'keep'

resp = yield self.http_client.fetch(
self.get_url('/ops/copy'),
method='POST',
body=json.dumps(payload)
)

assert resp.code == 201
assert self.source_provider.copy.called
self.source_provider.copy.assert_called_once_with(
self.destination_provider,
WaterButlerPath(payload['source']['path']),
WaterButlerPath(payload['destination']['path']),
rename=None,
conflict='keep'
)

@testing.gen_test
def test_rename(self):
metadata = utils.MockFileMetadata()
self.source_provider.copy = utils.MockCoroutine(
return_value=(metadata, False)
)

payload = self.payload()
payload['rename'] = 'MyCoolFileGuys'

resp = yield self.http_client.fetch(
self.get_url('/ops/copy'),
method='POST',
body=json.dumps(payload)
)

assert resp.code == 200
assert json.loads(resp.body.decode()) == metadata.serialized()
assert self.source_provider.copy.called
self.source_provider.copy.assert_called_once_with(
self.destination_provider,
WaterButlerPath(payload['source']['path']),
WaterButlerPath(payload['destination']['path']),
rename='MyCoolFileGuys',
conflict='replace'
)

@testing.gen_test
def test_intra_makes_callback(self):
self.source_provider.copy = utils.MockCoroutine(
return_value=(utils.MockFileMetadata(), False)
)

yield self.http_client.fetch(
self.get_url('/ops/copy'),
method='POST',
body=json.dumps(self.payload())
)

self.mock_send_hook.assert_called_once_with(
'copy',
utils.MockFileMetadata().serialized()
)
101 changes: 101 additions & 0 deletions tests/server/handlers/test_move.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
import json

from tornado import testing

from waterbutler.core.path import WaterButlerPath

from tests import utils


class TestMoveHandler(utils.MultiProviderHandlerTestCase):
HOOK_PATH = 'waterbutler.server.handlers.move.MoveHandler._send_hook'

@testing.gen_test
def test_calls_move(self):
self.source_provider.move = utils.MockCoroutine(
return_value=(utils.MockFileMetadata(), False)
)

yield self.http_client.fetch(
self.get_url('/ops/move'),
method='POST',
body=json.dumps(self.payload())
)

assert self.source_provider.move.called
self.source_provider.move.assert_called_once_with(
self.destination_provider,
WaterButlerPath(self.payload()['source']['path']),
WaterButlerPath(self.payload()['destination']['path']),
rename=None,
conflict='replace'
)

@testing.gen_test
def test_conflict(self):
self.source_provider.move = utils.MockCoroutine(
return_value=(utils.MockFileMetadata(), True)
)

payload = self.payload()
payload['conflict'] = 'keep'

resp = yield self.http_client.fetch(
self.get_url('/ops/move'),
method='POST',
body=json.dumps(payload)
)

assert resp.code == 201
assert self.source_provider.move.called
self.source_provider.move.assert_called_once_with(
self.destination_provider,
WaterButlerPath(payload['source']['path']),
WaterButlerPath(payload['destination']['path']),
rename=None,
conflict='keep'
)

@testing.gen_test
def test_rename(self):
metadata = utils.MockFileMetadata()
self.source_provider.move = utils.MockCoroutine(
return_value=(metadata, False)
)

payload = self.payload()
payload['rename'] = 'MyCoolFileGuys'

resp = yield self.http_client.fetch(
self.get_url('/ops/move'),
method='POST',
body=json.dumps(payload)
)

assert resp.code == 200
assert json.loads(resp.body.decode()) == metadata.serialized()
assert self.source_provider.move.called
self.source_provider.move.assert_called_once_with(
self.destination_provider,
WaterButlerPath(payload['source']['path']),
WaterButlerPath(payload['destination']['path']),
rename='MyCoolFileGuys',
conflict='replace'
)

@testing.gen_test
def test_intra_makes_callback(self):
self.source_provider.move = utils.MockCoroutine(
return_value=(utils.MockFileMetadata(), False)
)

yield self.http_client.fetch(
self.get_url('/ops/move'),
method='POST',
body=json.dumps(self.payload())
)

self.mock_send_hook.assert_called_once_with(
'move',
utils.MockFileMetadata().serialized()
)
Loading

0 comments on commit 7d7407e

Please sign in to comment.