Skip to content
Snippets Groups Projects
Commit c7420585 authored by hkethi002's avatar hkethi002 Committed by GitHub
Browse files

Merge pull request #818 from scitran/session_compliance

Session compliance calculated correctly after switching projects
parents 2d1cf014 67082d20
No related branches found
No related tags found
No related merge requests found
......@@ -308,12 +308,19 @@ class SessionStorage(ContainerStorage):
payload_has_template = (payload and payload.get('project_has_template'))
session_has_template = session.get('project_has_template') is not None
unset_payload_has_template = (unset_payload and 'project_has_template'in unset_payload)
if payload_has_template or (session_has_template and not unset_payload_has_template):
project = ProjectStorage().get_container(session['project'])
session.update(payload)
pre_result = super(SessionStorage, self).update_el(_id, payload, unset_payload=unset_payload, recursive=recursive, r_payload=r_payload, replace_metadata=replace_metadata)
if payload_has_template or (session_has_template and not unset_payload_has_template):
project = ProjectStorage().get_container(session['project'])
session.update(payload)
payload['satisfies_template'] = hierarchy.is_session_compliant(session, project.get('template'))
return super(SessionStorage, self).update_el(_id, payload, unset_payload=unset_payload, recursive=recursive, r_payload=r_payload, replace_metadata=replace_metadata)
post_result = super(SessionStorage, self).update_el(_id, payload, unset_payload=unset_payload, recursive=recursive, r_payload=r_payload, replace_metadata=replace_metadata)
if(post_result.modified_count == 1):
return post_result
else:
return pre_result
def recalc_session_compliance(self, session_id, session=None, template=None, hard=False):
"""
......
......@@ -42,6 +42,7 @@ def test_switching_acquisition_between_sessions(data_builder, as_admin):
def test_project_template(data_builder, file_form, as_admin):
project = data_builder.create_project()
project2 = data_builder.create_project()
session = data_builder.create_session(subject={'code': 'compliant'})
# NOTE adding acquisition_1 to cover code that's skipping non-matching containers
acquisition_1 = data_builder.create_acquisition(label='non-compliant')
......@@ -72,6 +73,20 @@ def test_project_template(data_builder, file_form, as_admin):
assert r.ok
assert r.json()['modified'] == 1
# create template for the project2
r = as_admin.post('/projects/' + project2 + '/template', json={
'session': {'subject': {'code': '^compliant$'}},
'acquisitions': [{
'minimum': 100, # Session won't comply
'label': '^compliant$',
'tags': '^compliant$',
'files': [{
'minimum': 2,
'mimetype': 'text/csv',
}]
}]
})
# test session compliance
r = as_admin.get('/sessions/' + session)
assert r.ok
......@@ -89,6 +104,13 @@ def test_project_template(data_builder, file_form, as_admin):
assert not satisfies_template()
assert as_admin.put('/sessions/' + session, json={'subject': {'code': 'compliant'}}).ok
# test that moving session to another project correctly updates session.satisfies_template
assert satisfies_template()
assert as_admin.put('/sessions/' + session, json={'project': project2})
assert not satisfies_template()
assert as_admin.put('/sessions/' + session, json={'project': project})
assert satisfies_template
# acquisitions.label
assert satisfies_template()
assert as_admin.put('/acquisitions/' + acquisition_2, json={'label': 'non-compliant'}).ok
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment