Skip to content

Commit

Permalink
add remove cases and move tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Johnetordoff committed Jan 24, 2025
1 parent 3f17b5c commit 9c2e2b8
Show file tree
Hide file tree
Showing 4 changed files with 128 additions and 8 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
import pytest

from api.base.settings.defaults import API_BASE

from osf_tests.factories import NodeFactory, InstitutionFactory, AuthUserFactory
from osf.models import NodeLog, NodeRequest
from osf.utils.workflows import NodeRequestTypes

@pytest.mark.django_db
class TestNodeRequestListInstitutionalAccessActionAccept:

@pytest.fixture
def action_payload(self, node_request):
return {
'data': {
'attributes': {
'trigger': 'accept',
},
'relationships': {
'target': {
'data': {
'type': 'node-requests',
'id': node_request._id,
}
}
},
'type': 'node-request-actions'
}
}

@pytest.fixture()
def url(self, project):
return f'/{API_BASE}actions/requests/nodes/'

@pytest.fixture()
def institution(self):
return InstitutionFactory(institutional_request_access_enabled=True)

@pytest.fixture()
def user_with_affiliation(self, institution):
user = AuthUserFactory()
user.add_or_update_affiliated_institution(institution)
return user

@pytest.fixture()
def institutional_admin(self, institution):
admin_user = AuthUserFactory()
institution.get_group('institutional_admins').user_set.add(admin_user)
return admin_user

@pytest.fixture()
def project(self, institutional_admin, user_with_affiliation):
node = NodeFactory(creator=user_with_affiliation)
return node

@pytest.fixture()
def node_request(self, institutional_admin, user_with_affiliation, project):
return NodeRequest.objects.create(
target=project,
creator=institutional_admin,
comment='test comment',
request_type=NodeRequestTypes.INSTITUTIONAL_REQUEST.value,
machine_state='pending'
)

def test_post_node_request_action_success_logged_as_curator(self, app, action_payload, url, user_with_affiliation, institutional_admin, project):
"""
Test a successful POST request to create a node-request action and log it.
"""
# Perform the POST request
res = app.post_json_api(url, action_payload, auth=user_with_affiliation.auth)
assert res.status_code == 201
assert res.json['data']['attributes']['trigger'] == 'accept'

# Fetch the log entry
log = project.logs.get(action=NodeLog.CURATOR_ADDED)

# Assert log details
assert log.action == NodeLog.CURATOR_ADDED
assert log.user_id == user_with_affiliation.id
assert log.node_id == project.id
assert log.params['node'] == project._id
assert 'contributors' in log.params
assert institutional_admin._id in log.params['contributors']

def test_post_node_request_action_remove_curator(self, app, action_payload, url, user_with_affiliation, institutional_admin, project):
"""
Test a successful POST request to remove a curator and log the action.
"""
# Perform the POST request
res = app.post_json_api(url, action_payload, auth=user_with_affiliation.auth)
assert res.status_code == 201
assert res.json['data']['attributes']['trigger'] == 'remove'

# Verify the curator is removed
assert not project.contributors.filter(id=institutional_admin.id).exists()

# Fetch the log entry
log = project.logs.get(action=NodeLog.CURATOR_REMOVED)

# Assert log details
assert log.action == NodeLog.CURATOR_REMOVED
assert log.user_id == user_with_affiliation.id
assert log.node_id == project.id
assert log.params['node'] == project._id
assert 'contributors' in log.params
assert institutional_admin._id in log.params['contributors']
22 changes: 15 additions & 7 deletions osf/models/mixins.py
Original file line number Diff line number Diff line change
Expand Up @@ -1371,13 +1371,21 @@ def add_contributor(self, contributor, permissions=None, visible=True,
permissions = permissions or self.DEFAULT_CONTRIBUTOR_PERMISSIONS

self.add_permission(contrib_to_add, permissions, save=True)
if make_curator:
contributor_obj.is_curator = True
contributor_obj.save()

if log:
params = self.log_params
params['contributors'] = [contrib_to_add._id]

if getattr(contributor_obj, 'is_curator', False):
action = self.log_class.CURATOR_ADDED
else:
action = self.log_class.CONTRIB_ADDED

self.add_log(
action=self.log_class.CONTRIB_ADDED,
action=action,
params=params,
auth=auth,
save=False,
Expand All @@ -1394,11 +1402,6 @@ def add_contributor(self, contributor, permissions=None, visible=True,
if getattr(self, 'get_identifier_value', None) and self.get_identifier_value('doi'):
request, user_id = get_request_and_user_id()
self.update_or_enqueue_on_resource_updated(user_id, first_save=False, saved_fields=['contributors'])

if make_curator:
contributor_obj.is_curator = True
contributor_obj.save()

return contrib_to_add

def add_contributors(self, contributors, auth=None, log=True, save=False):
Expand Down Expand Up @@ -1656,8 +1659,13 @@ def remove_contributor(self, contributor, auth, log=True, _force=False):
if log:
params = self.log_params
params['contributors'] = [contributor._id]
if getattr(contributor, 'is_curator', False):
action = self.log_class.CURATOR_REMOVED
else:
action = self.log_class.CONTRIB_REMOVED

self.add_log(
action=self.log_class.CONTRIB_REMOVED,
action=action,
params=params,
auth=auth,
save=False,
Expand Down
5 changes: 4 additions & 1 deletion osf/models/nodelog.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,9 @@ class NodeLog(ObjectIDMixin, BaseModel):
CONTRIB_REMOVED = 'contributor_removed'
CONTRIB_REORDERED = 'contributors_reordered'

CURATOR_ADDED = 'curator_added'
CURATOR_REMOVED = 'curator_removed'

CHECKED_IN = 'checked_in'
CHECKED_OUT = 'checked_out'

Expand Down Expand Up @@ -149,7 +152,7 @@ class NodeLog(ObjectIDMixin, BaseModel):
NODE_ACCESS_REQUESTS_ENABLED, NODE_ACCESS_REQUESTS_DISABLED,
NODE_LINK_CREATED, NODE_LINK_FORKED, NODE_LINK_REMOVED, WIKI_UPDATED,
WIKI_DELETED, WIKI_RENAMED, MADE_WIKI_PUBLIC,
MADE_WIKI_PRIVATE, CONTRIB_ADDED, CONTRIB_REMOVED, CONTRIB_REORDERED,
MADE_WIKI_PRIVATE, CONTRIB_ADDED, CONTRIB_REMOVED, CONTRIB_REORDERED, CURATOR_ADDED, CURATOR_REMOVED,
PERMISSIONS_UPDATED, MADE_PRIVATE, MADE_PUBLIC, TAG_ADDED, TAG_REMOVED, EDITED_TITLE,
EDITED_DESCRIPTION, UPDATED_FIELDS, FILE_MOVED, FILE_COPIED, FILE_METADATA_UPDATED,
FOLDER_CREATED, FILE_ADDED, FILE_UPDATED, FILE_REMOVED, FILE_RESTORED, ADDON_ADDED,
Expand Down
2 changes: 2 additions & 0 deletions website/static/js/logActionsList.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@
"contributor_added": "${user} added ${contributors} as contributor(s) to ${node}",
"contributor_removed": "${user} removed ${contributors} as contributor(s) from ${node}",
"contributors_reordered": "${user} reordered contributors for ${node}",
"curator_added": "${user} added ${contributors} as curator(s) to ${node}",
"curator_removed": "${user} removed ${contributors} as curator(s) to ${node}",
"permissions_updated": "${user} changed permissions for ${node}",
"made_contributor_visible": "${user} made non-bibliographic contributor ${contributors} a bibliographic contributor on ${node}",
"made_contributor_invisible": "${user} made bibliographic contributor ${contributors} a non-bibliographic contributor on ${node}",
Expand Down

0 comments on commit 9c2e2b8

Please sign in to comment.