workflows: do not use after jobs when there's no http response (#23239)
This commit is contained in:
parent
39bf9f6433
commit
eb9d10524c
|
@ -549,19 +549,20 @@ def test_roles_idp(pub):
|
|||
|
||||
user.roles = None
|
||||
user.store()
|
||||
item = RemoveRoleWorkflowStatusItem()
|
||||
|
||||
item.perform(formdata)
|
||||
item2 = RemoveRoleWorkflowStatusItem()
|
||||
|
||||
item2.perform(formdata)
|
||||
assert not pub.user_class.get(user.id).roles
|
||||
with mock.patch('wcs.wf.roles.http_delete_request') as http_delete_request:
|
||||
http_delete_request.return_value = (None, 200, '', None)
|
||||
get_response().process_after_jobs()
|
||||
assert http_delete_request.call_count == 0
|
||||
|
||||
item.role_id = role.id
|
||||
item2.role_id = role.id
|
||||
user.roles = [role.id]
|
||||
user.store()
|
||||
item.perform(formdata)
|
||||
item2.perform(formdata)
|
||||
assert not pub.user_class.get(user.id).roles
|
||||
with mock.patch('wcs.wf.roles.http_delete_request') as http_delete_request:
|
||||
http_delete_request.return_value = (None, 200, '', None)
|
||||
|
@ -571,6 +572,18 @@ def test_roles_idp(pub):
|
|||
'http://idp.example.net/api/roles/bar1/members/xxx/')
|
||||
assert 'signature=' in http_delete_request.call_args[0][0]
|
||||
|
||||
# out of http request/response cycle
|
||||
pub._set_request(None)
|
||||
with mock.patch('wcs.wf.roles.http_post_request') as http_post_request:
|
||||
http_post_request.return_value = (None, 201, '', None)
|
||||
item.perform(formdata)
|
||||
assert pub.user_class.get(user.id).roles == [role.id]
|
||||
|
||||
with mock.patch('wcs.wf.roles.http_delete_request') as http_delete_request:
|
||||
http_delete_request.return_value = (None, 200, '', None)
|
||||
item2.perform(formdata)
|
||||
assert pub.user_class.get(user.id).roles == []
|
||||
|
||||
def test_anonymise(pub):
|
||||
# build a backoffice field
|
||||
Workflow.wipe()
|
||||
|
|
|
@ -102,15 +102,18 @@ class AddRoleWorkflowStatusItem(WorkflowStatusItem):
|
|||
except MissingSecret:
|
||||
get_publisher().notify_of_exception(sys.exc_info(), context='[ROLES]')
|
||||
return
|
||||
def after_job(job):
|
||||
def after_job(job=None):
|
||||
signed_url = sign_ws_url(url)
|
||||
response, status, data, auth_header = http_post_request(signed_url)
|
||||
if status != 201:
|
||||
get_logger().error('failed to add role %r to user %r',
|
||||
role, user)
|
||||
get_response().add_after_job(
|
||||
str(N_('Adding role')),
|
||||
after_job)
|
||||
if get_request():
|
||||
get_response().add_after_job(
|
||||
str(N_('Adding role')),
|
||||
after_job)
|
||||
else:
|
||||
after_job()
|
||||
|
||||
|
||||
register_item_class(AddRoleWorkflowStatusItem)
|
||||
|
@ -163,14 +166,17 @@ class RemoveRoleWorkflowStatusItem(WorkflowStatusItem):
|
|||
except MissingSecret:
|
||||
get_publisher().notify_of_exception(sys.exc_info(), context='[ROLES]')
|
||||
return
|
||||
def after_job(job):
|
||||
def after_job(job=None):
|
||||
signed_url = sign_ws_url(url)
|
||||
response, status, data, auth_header = http_delete_request(signed_url)
|
||||
if status != 200:
|
||||
get_logger().error('failed to remove role %r from user %r',
|
||||
role, user)
|
||||
get_response().add_after_job(
|
||||
str(N_('Removing role')),
|
||||
after_job)
|
||||
if get_request():
|
||||
get_response().add_after_job(
|
||||
str(N_('Removing role')),
|
||||
after_job)
|
||||
else:
|
||||
after_job()
|
||||
|
||||
register_item_class(RemoveRoleWorkflowStatusItem)
|
||||
|
|
Loading…
Reference in New Issue