Skip to content

Commit

Permalink
mock user_setting and node_settings with the addon gracy valet addon …
Browse files Browse the repository at this point in the history
…config
  • Loading branch information
John Tordoff committed May 21, 2024
1 parent e888e87 commit 9d1bbe5
Show file tree
Hide file tree
Showing 6 changed files with 40 additions and 43 deletions.
28 changes: 22 additions & 6 deletions addons/base/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,12 +59,28 @@ def format_last_known_metadata(auth, node, file, error_type):

class GravyValetAddonAppConfig:
class MockNodeSetting:
def __init__(self, resource, auth, legacy_config):
...
def __init__(self, resource, auth, legacy_config, gv_data):
self.gv_data = gv_data

@property
def configured(self):
return True

@property
def config_id(self):
return self.gv_data.config_id

class MockUserSetting:
def __init__(self, resource, auth, legacy_config):
...
def __init__(self, resource, auth, legacy_config, gv_data):
self.gv_data = gv_data

@property
def configured(self):
return True

@property
def config_id(self):
return self.gv_data.config_id

@staticmethod
def get_configured_storage_addons_data(config_id, auth):
Expand Down Expand Up @@ -95,11 +111,11 @@ def __init__(self, resource, config_id, auth):

@property
def node_settings(self):
return self.MockNodeSetting(self.resource, self.auth, self.legacy_config)
return self.MockNodeSetting(self.resource, self.auth, self.legacy_config, self)

@property
def user_settings(self):
return self.MockUserSetting(self.resource, self.auth, self.legacy_config)
return self.MockUserSetting(self.resource, self.auth, self.legacy_config, self)

@property
def configured(self):
Expand Down
6 changes: 3 additions & 3 deletions api/base/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -636,7 +636,8 @@ def bulk_get_file_nodes_from_wb_resp(self, files_list):
for item in files_list:
attrs = item['attributes']
if waffle.flag_is_active(self.request, features.ENABLE_GV):
short_name = GravyValetAddonAppConfig(self, attrs['provider'], self.request).legacy_config.short_name
gv_config = GravyValetAddonAppConfig(self, attrs['provider'], self.request)
short_name = gv_config.legacy_config.short_name
else:
short_name = attrs['provider']

Expand Down Expand Up @@ -670,8 +671,7 @@ def bulk_get_file_nodes_from_wb_resp(self, files_list):

# TODO: Improve robustness
if waffle.flag_is_active(self.request, features.ENABLE_GV):
config = GravyValetAddonAppConfig(self, attrs['provider'], self.request).legacy_config
file_obj.provider = config.config_id
file_obj.provider = gv_config.node_settings.config_id

file_obj.update(None, attrs, user=self.request.user, save=False)

Expand Down
8 changes: 7 additions & 1 deletion api/nodes/utils.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# -*- coding: utf-8 -*-
import waffle
from distutils.version import StrictVersion
from django.apps import apps
from django.db.models import Q, OuterRef, Exists, Subquery, CharField, Value, BooleanField
Expand All @@ -13,6 +14,7 @@
from osf.models import AbstractNode, Preprint, Guid, NodeRelation, Contributor
from osf.models.node import NodeGroupObjectPermission
from osf.utils import permissions
from osf import features

from api.base.exceptions import ServiceUnavailableError
from api.base.utils import get_object_or_error, waterbutler_api_url_for, get_user_auth, has_admin_scope
Expand All @@ -38,7 +40,11 @@ def get_file_object(target, path, provider, request):
obj = get_object_or_error(model, Q(target_object_id=target.pk, target_content_type=content_type, _id=path.strip('/')), request)
return obj

addon = target.get_addon(provider, request=request)
if waffle.flag_is_active(request, features.ENABLE_GV):
addon = target.get_addon(provider, request=request)
else:
addon = super(target.__class__, target).get_addon(provider, request=request)

if isinstance(target, AbstractNode) and not addon or not addon.configured:
raise NotFound(f'The {provider} provider is not configured for this project.')

Expand Down
33 changes: 2 additions & 31 deletions api_tests/providers/test_files_with_gv.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,14 +37,6 @@ def node(self, user):
creator=user,
)

@pytest.fixture()
def file(self, user, node):
return api_utils.create_test_file(
node,
user,
create_guid=False
)

@pytest.fixture()
def addon_files_url(self, node, provider_gv_id):
return reverse(
Expand All @@ -57,28 +49,7 @@ def addon_files_url(self, node, provider_gv_id):
)

@responses.activate
def test_must_have_auth(self, app, file, node, addon_files_url):
from api_tests.draft_nodes.views.test_draft_node_files_lists import prepare_mock_wb_response

prepare_mock_wb_response(
path=file.path + '/',
node=node,
provider='1',
files=[
{
'name': file.name,
'path': file.path,
'materialized': file.materialized_path,
'kind': 'file',
'modified': file.modified.isoformat(),
'extra': {
'extra': 'readAllAboutIt'
},
'provider': '1'
},
]
)

def test_must_have_auth(self, app, node, addon_files_url):
res = app.get(addon_files_url, expect_errors=True)
assert res.status_code == 401

Expand All @@ -90,7 +61,7 @@ def test_must_be_contributor(self, app, addon_files_url):
)
assert res.status_code == 403

def test_get_file_provider(self, app, user, addon_files_url, file, provider_gv_id):
def test_get_file_provider(self, app, user, addon_files_url, provider_gv_id):
res = app.get(addon_files_url, auth=user.auth)

assert res.status_code == 200
Expand Down
2 changes: 1 addition & 1 deletion osf/models/node.py
Original file line number Diff line number Diff line change
Expand Up @@ -2438,7 +2438,7 @@ def get_addon(self, name, auth=None, request=None, is_deleted=False):
self,
name,
auth=(request.user.username, request.user.password)
)
).node_settings
else:
return super().get_addon(name, is_deleted)

Expand Down
6 changes: 5 additions & 1 deletion osf/models/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -1228,7 +1228,11 @@ def get_addon(self, name, is_deleted=False):
request, user_id = get_request_and_user_id()

if hasattr(request, 'user') and waffle.flag_is_active(request, features.ENABLE_GV) and name not in ['osfstorage', 'wiki']:
return GravyValetAddonAppConfig(self, name, auth=(request.user.username, request.user.password))
return GravyValetAddonAppConfig(
self,
name,
auth=(request.user.username, request.user.password)
).user_settings
else:
return super().get_addon(name, is_deleted)

Expand Down

0 comments on commit 9d1bbe5

Please sign in to comment.