Skip to content

[ENG-7839] [ENG-7766] Add celery task to update Datacite metadata + Use new GV API endpoint to retrieve node's verified links #11130

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 9 commits into
base: feature/verified-resource-linking
Choose a base branch
from
6 changes: 6 additions & 0 deletions admin_tests/nodes/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -504,7 +504,13 @@ def setUp(self):
super().setUp()
self.user = AuthUserFactory()
self.node = ProjectFactory(creator=self.user)
@pytest.fixture
def mock_gravy_valet_get_links(self):
with mock.patch('osf.models.node.AbstractNode.get_verified_links') as mock_get_links:
mock_get_links.return_value = []
yield mock_get_links

@pytest.mark.usefixtures('mock_gravy_valet_get_links')
def test_request_approval_is_approved(self):
now = timezone.now()
self.approval = RegistrationApprovalFactory(
Expand Down
21 changes: 15 additions & 6 deletions admin_tests/registrations/test_registrations.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from unittest import mock

from scripts.approve_registrations import main as approve_registrations_runner
from datetime import timedelta
import pytest
Expand Down Expand Up @@ -68,6 +70,12 @@ def embargoed_registration_from_changed_to_public_project(self, superuser, publi
def embargoed_registration_from_changed_to_private_project(self, superuser, private_project_from_public):
return RegistrationFactory(project=private_project_from_public, creator=superuser, is_embargoed=True)

@pytest.fixture
def mock_gravy_valet_get_links(self):
with mock.patch('osf.models.node.AbstractNode.get_verified_links') as mock_get_links:
mock_get_links.return_value = []
yield mock_get_links

def test_embargoed_registration_from_public_project_spam_ham(self, embargoed_registration_from_public_project):
embargoed_registration_from_public_project.confirm_spam(save=True)
assert not embargoed_registration_from_public_project.is_public
Expand All @@ -92,13 +100,13 @@ def test_embargoed_registration_from_changed_to_private_project_spam_ham(self, e
embargoed_registration_from_changed_to_private_project.confirm_ham(save=True)
assert not embargoed_registration_from_changed_to_private_project.is_public

def test_public_registration_from_public_project_spam_ham(self, superuser, public_registration_from_public_project):
def test_public_registration_from_public_project_spam_ham(self, superuser, public_registration_from_public_project, mock_gravy_valet_get_links):
public_registration_from_public_project.confirm_spam(save=True)
assert not public_registration_from_public_project.is_public
public_registration_from_public_project.confirm_ham(save=True)
assert public_registration_from_public_project.is_public

def test_public_registration_from_private_project_spam_ham(self, superuser, public_registration_from_private_project):
def test_public_registration_from_private_project_spam_ham(self, superuser, public_registration_from_private_project, mock_gravy_valet_get_links):
public_registration_from_private_project.confirm_spam(save=True)
assert not public_registration_from_private_project.is_public
public_registration_from_private_project.confirm_ham(save=True)
Expand All @@ -110,18 +118,19 @@ def test_private_registration_from_private_project_spam_ham(self, superuser, pri
private_registration_from_public_project.confirm_ham(save=True)
assert not private_registration_from_public_project.is_public

def test_public_registration_from_changed_to_public_project_spam_ham(self, superuser, public_registration_from_changed_to_public_project):
def test_public_registration_from_changed_to_public_project_spam_ham(self, superuser, public_registration_from_changed_to_public_project, mock_gravy_valet_get_links):
public_registration_from_changed_to_public_project.confirm_spam(save=True)
assert not public_registration_from_changed_to_public_project.is_public
public_registration_from_changed_to_public_project.confirm_ham(save=True)
assert public_registration_from_changed_to_public_project.is_public

def test_public_registration_from_changed_to_private_project_spam_ham(self, superuser, public_registration_from_changed_to_private_project):
def test_public_registration_from_changed_to_private_project_spam_ham(self, superuser, public_registration_from_changed_to_private_project, mock_gravy_valet_get_links):
public_registration_from_changed_to_private_project.confirm_spam(save=True)
assert not public_registration_from_changed_to_private_project.is_public
public_registration_from_changed_to_private_project.confirm_ham(save=True)
assert public_registration_from_changed_to_private_project.is_public

@pytest.mark.usefixtures('mock_gravy_valet_get_links')
def test_unapproved_registration_task(self, embargoed_registration_from_changed_to_public_project):
embargoed_registration_from_changed_to_public_project.registration_approval.state = 'unapproved'
embargoed_registration_from_changed_to_public_project.registration_approval.initiation_date -= timedelta(3)
Expand All @@ -131,7 +140,7 @@ def test_unapproved_registration_task(self, embargoed_registration_from_changed_
embargoed_registration_from_changed_to_public_project.registration_approval.refresh_from_db()
assert embargoed_registration_from_changed_to_public_project.registration_approval.state == 'approved'

def test_unapproved_registration_task_after_spam(self, embargoed_registration_from_changed_to_public_project):
def test_unapproved_registration_task_after_spam(self, embargoed_registration_from_changed_to_public_project, mock_gravy_valet_get_links):
embargoed_registration_from_changed_to_public_project.registration_approval.state = 'unapproved'
embargoed_registration_from_changed_to_public_project.registration_approval.initiation_date -= timedelta(3)
embargoed_registration_from_changed_to_public_project.registration_approval.save()
Expand All @@ -141,7 +150,7 @@ def test_unapproved_registration_task_after_spam(self, embargoed_registration_fr
embargoed_registration_from_changed_to_public_project.registration_approval.refresh_from_db()
assert embargoed_registration_from_changed_to_public_project.registration_approval.state == 'unapproved'

def test_unapproved_registration_task_after_spam_ham(self, embargoed_registration_from_changed_to_public_project):
def test_unapproved_registration_task_after_spam_ham(self, embargoed_registration_from_changed_to_public_project, mock_gravy_valet_get_links):
embargoed_registration_from_changed_to_public_project.registration_approval.state = 'unapproved'
embargoed_registration_from_changed_to_public_project.registration_approval.initiation_date -= timedelta(3)
embargoed_registration_from_changed_to_public_project.registration_approval.save()
Expand Down
7 changes: 7 additions & 0 deletions api_tests/identifiers/managment_commands/test_sync_dois.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import datetime

from unittest import mock
import pytest
from django.core.management import call_command
from django.utils import timezone
Expand Down Expand Up @@ -53,6 +54,12 @@ def preprint_identifier(self, preprint):
identifier.save(update_modified=False)
return identifier

@pytest.fixture(autouse=True)
def mock_gravy_valet_get_links(self):
with mock.patch('osf.models.node.AbstractNode.get_verified_links') as mock_get_links:
mock_get_links.return_value = []
yield mock_get_links

@pytest.mark.enable_enqueue_task
def test_doi_synced_datacite(self, app, registration, registration_identifier, mock_datacite):
assert registration_identifier.modified.date() < datetime.datetime.now().date()
Expand Down
9 changes: 9 additions & 0 deletions api_tests/identifiers/views/test_identifier_list.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from unittest import mock

import pytest

from urllib.parse import urlparse
Expand Down Expand Up @@ -475,6 +477,13 @@ def ark_payload(self):
def client(self, resource):
return DataCiteClient(resource)

@pytest.fixture
def mock_gravy_valet_get_links(self):
with mock.patch('osf.models.node.AbstractNode.get_verified_links') as mock_get_links:
mock_get_links.return_value = []
yield mock_get_links

@pytest.mark.usefixtures('mock_gravy_valet_get_links')
@responses.activate
def test_create_identifier(self, app, resource, client, identifier_url, identifier_payload, user,
write_contributor, read_contributor, ark_payload):
Expand Down
29 changes: 24 additions & 5 deletions api_tests/registrations/views/test_registration_detail.py
Original file line number Diff line number Diff line change
Expand Up @@ -335,10 +335,17 @@ def license_cc0(self):
@pytest.mark.django_db
@pytest.mark.enable_implicit_clean
class TestRegistrationUpdate(TestRegistrationUpdateTestCase):

@pytest.fixture
def mock_gravy_valet_get_links(self):
with mock.patch('osf.models.node.AbstractNode.get_verified_links') as mock_get_links:
mock_get_links.return_value = []
yield mock_get_links

def test_update_registration(
self, app, user, read_only_contributor,
read_write_contributor, public_registration,
public_url, private_url, make_payload, public_project):
public_url, private_url, make_payload, public_project, mock_gravy_valet_get_links):

private_registration_payload = make_payload()
non_contributor = AuthUserFactory()
Expand Down Expand Up @@ -418,7 +425,7 @@ def test_update_registration(
def test_fields(
self, app, user, public_registration,
private_registration, public_url, institution_one,
private_url, make_payload, license_cc0):
private_url, make_payload, license_cc0, mock_gravy_valet_get_links):

# test_field_has_invalid_value
invalid_public_payload = make_payload(
Expand Down Expand Up @@ -562,7 +569,7 @@ def test_fields(
assert res.status_code == 400

def test_turning_private_registrations_public(
self, app, user, make_payload):
self, app, user, make_payload, mock_gravy_valet_get_links):
private_project = ProjectFactory(creator=user, is_public=False)
private_registration = RegistrationFactory(
project=private_project, creator=user, is_public=False)
Expand Down Expand Up @@ -710,6 +717,12 @@ def test_read_write_contributor_can_edit_writeable_fields(
@pytest.mark.django_db
class TestRegistrationWithdrawal(TestRegistrationUpdateTestCase):

@pytest.fixture
def mock_gravy_valet_get_links(self):
with mock.patch('osf.models.node.AbstractNode.get_verified_links') as mock_get_links:
mock_get_links.return_value = []
yield mock_get_links

@pytest.fixture
def public_payload(self, public_registration, make_payload):
return make_payload(
Expand Down Expand Up @@ -777,7 +790,7 @@ def test_initiate_withdrawal_success(self, mock_send_mail, app, user, public_reg
assert mock_send_mail.called

def test_initiate_withdrawal_with_embargo_ends_embargo(
self, app, user, public_project, public_registration, public_url, public_payload):
self, app, user, public_project, public_registration, public_url, public_payload, mock_gravy_valet_get_links):
public_registration.embargo_registration(
user,
(timezone.now() + datetime.timedelta(days=10)),
Expand Down Expand Up @@ -934,11 +947,17 @@ def new_tag_payload_withdrawn(self, registration_withdrawn):
}
}

@pytest.fixture
def mock_gravy_valet_get_links(self):
with mock.patch('osf.models.node.AbstractNode.get_verified_links') as mock_get_links:
mock_get_links.return_value = []
yield mock_get_links

def test_registration_tags(
self, app, registration_public, registration_private,
url_registration_public, url_registration_private,
new_tag_payload_public, new_tag_payload_private,
user_admin, user_non_contrib, read_write_contrib):
user_admin, user_non_contrib, read_write_contrib, mock_gravy_valet_get_links):
# test_registration_starts_with_no_tags
res = app.get(url_registration_public)
assert res.status_code == 200
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from unittest import mock

import pytest

from api.base.settings.defaults import API_BASE
Expand Down Expand Up @@ -57,6 +59,12 @@ def registration_with_children_approved_url(registration_with_children_approved)
@pytest.mark.django_db
class TestRegistrationsChildrenList:

@pytest.fixture()
def mock_gravy_valet_get_links(self):
with mock.patch('osf.models.node.AbstractNode.get_verified_links') as mock_get_links:
mock_get_links.return_value = []
yield mock_get_links

def test_registrations_children_list(self, user, app, registration_with_children, registration_with_children_url):
component_one, component_two, component_three, component_four = registration_with_children.nodes

Expand All @@ -68,7 +76,15 @@ def test_registrations_children_list(self, user, app, registration_with_children
assert component_one._id in ids
assert component_two._id in ids

def test_return_registrations_list_no_auth_approved(self, user, app, registration_with_children_approved, registration_with_children_approved_url):
@pytest.mark.usefixtures('mock_gravy_valet_get_links')
def test_return_registrations_list_no_auth_approved(
self,
user,
app,
registration_with_children_approved,
registration_with_children_approved_url
):

component_one, component_two, component_three, component_four = registration_with_children_approved.nodes

res = app.get(registration_with_children_approved_url)
Expand Down
9 changes: 9 additions & 0 deletions api_tests/registrations/views/test_withdrawn_registrations.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from unittest import mock

import pytest
from urllib.parse import urlparse

Expand Down Expand Up @@ -64,6 +66,12 @@ def url_withdrawn(self, registration):
return '/{}registrations/{}/?version=2.2'.format(
API_BASE, registration._id)

@pytest.fixture
def mock_gravy_valet_get_links(self):
with mock.patch('osf.models.node.AbstractNode.get_verified_links') as mock_get_links:
mock_get_links.return_value = []
yield mock_get_links

def test_can_access_withdrawn_contributors(
self, app, user, registration, withdrawn_registration):
url = '/{}registrations/{}/contributors/'.format(
Expand Down Expand Up @@ -224,6 +232,7 @@ def test_field_specific_related_counts_retrieved_if_visible_field_on_withdrawn_r
assert res.status_code == 200
assert res.json['data']['relationships']['contributors']['links']['related']['meta']['count'] == 1

@pytest.mark.usefixtures('mock_gravy_valet_get_links')
def test_child_inherits_withdrawal_justification_and_date_withdrawn(
self, app, user, withdrawn_registration_with_child, registration_with_child):

Expand Down
8 changes: 8 additions & 0 deletions api_tests/registries_moderation/test_submissions.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from unittest import mock

import pytest
import datetime

Expand Down Expand Up @@ -164,6 +166,12 @@ def actions_payload_base(self):
}
return payload

@pytest.fixture(autouse=True)
def mock_gravy_valet_get_links(self):
with mock.patch('osf.models.node.AbstractNode.get_verified_links') as mock_get_links:
mock_get_links.return_value = []
yield mock_get_links

def test_get_provider_requests(self, app, provider_requests_url, registration_with_withdraw_request, access_request, moderator, moderator_wrong_provider):
resp = app.get(provider_requests_url, expect_errors=True)
assert resp.status_code == 401
Expand Down
9 changes: 8 additions & 1 deletion api_tests/search/serializers/test_serializers.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from unittest import mock

import pytest

from api.search.serializers import SearchSerializer
Expand All @@ -15,8 +17,13 @@

@pytest.mark.django_db
class TestSearchSerializer:
@pytest.fixture
def mock_gravy_valet_get_links(self):
with mock.patch('osf.models.node.AbstractNode.get_verified_links') as mock_get_links:
mock_get_links.return_value = []
yield mock_get_links

def test_search_serializer_mixed_model(self):
def test_search_serializer_mixed_model(self, mock_gravy_valet_get_links):

user = AuthUserFactory()
project = ProjectFactory(creator=user, is_public=True)
Expand Down
9 changes: 9 additions & 0 deletions api_tests/search/views/test_views.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from unittest import mock

import pytest
import uuid

Expand Down Expand Up @@ -566,6 +568,13 @@ def registration_private(self, project_private, schema):
registration_private.update_search()
return registration_private

@pytest.fixture
def mock_gravy_valet_get_links(self):
with mock.patch('osf.models.node.AbstractNode.get_verified_links') as mock_get_links:
mock_get_links.return_value = []
yield mock_get_links

@pytest.mark.usefixtures('mock_gravy_valet_get_links')
def test_search_registrations(
self, app, url_registration_search, user, user_one, user_two,
registration, registration_public, registration_private):
Expand Down
7 changes: 7 additions & 0 deletions conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -357,3 +357,10 @@ def helpful_thing(self):
```
"""
yield from rolledback_transaction('function_transaction')

@pytest.fixture
def mock_gravy_valet_get_links():

with mock.patch('osf.external.gravy_valet.translations.get_verified_links') as mock_get_links:
mock_get_links.return_value = []
yield mock_get_links
Loading
Loading