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

Merge pull request #827 from scitran/session-compliance-test

Session move from project w/ template to project w/o template
parents 2736cdd3 de77380b
No related branches found
No related tags found
No related merge requests found
......@@ -305,22 +305,30 @@ class SessionStorage(ContainerStorage):
payload['subject']['_id'] = bson.ObjectId()
# Determine if we need to calc session compliance
payload_has_template = (payload and payload.get('project_has_template'))
# First check if project is being changed
if payload and payload.get('project'):
project = ProjectStorage().get_container(payload['project'])
if not project:
raise APINotFoundException("Could not find project {}".format(payload['project']))
else:
project = ProjectStorage().get_container(session['project'])
# Check if new (if project is changed) or current project has template
payload_has_template = project.get('template', False)
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'))
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
if project and project.get('template'):
payload['project_has_template'] = True
payload['satisfies_template'] = hierarchy.is_session_compliant(session, project.get('template'))
elif project:
if not unset_payload:
unset_payload = {}
unset_payload['satisfies_template'] = ""
unset_payload['project_has_template'] = ""
return super(SessionStorage, self).update_el(_id, payload, unset_payload=unset_payload, recursive=recursive, r_payload=r_payload, replace_metadata=replace_metadata)
def recalc_session_compliance(self, session_id, session=None, template=None, hard=False):
"""
......
......@@ -87,6 +87,7 @@ def test_project_template(data_builder, file_form, as_admin):
}]
})
# test session compliance
r = as_admin.get('/sessions/' + session)
assert r.ok
......@@ -109,7 +110,17 @@ def test_project_template(data_builder, file_form, as_admin):
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
assert satisfies_template()
# test moving session to project without template
assert as_admin.delete('/projects/' + project2 + '/template')
r = as_admin.put('/sessions/' + session, json={'project': project2})
assert r.ok
r = as_admin.get('/sessions/' + session)
assert r.ok
assert 'project_has_template' not in r.json()
assert 'satisfies_template' not in r.json()
assert as_admin.put('/sessions/' + session, json={'project': project})
# acquisitions.label
assert satisfies_template()
......
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