wf/profile: do not use after jobs when there's no http response (#38793)

This commit is contained in:
Thomas NOËL 2020-01-06 15:55:24 +01:00
parent fcd1c46005
commit 4b8c74fd95
2 changed files with 17 additions and 3 deletions

View File

@ -3385,6 +3385,17 @@ def test_profile(two_pubs):
else: # empty value : null field
assert http_patch_request.call_args[0][1] == '{"bar": null}'
# out of http request/response cycle (cron, after_job)
two_pubs._set_request(None)
item.fields = [{'field_id': 'bar', 'value': '01/01/2020'}]
with mock.patch('wcs.wf.profile.http_patch_request') as http_patch_request:
http_patch_request.return_value = (None, 200, '', None)
item.perform(formdata)
assert User.get(user.id).form_data.get('4').tm_year == 2020
assert http_patch_request.call_count == 1
assert http_patch_request.call_args[0][1] == '{"bar": "2020-01-01"}'
def test_set_backoffice_field(http_requests, two_pubs):
Workflow.wipe()
FormDef.wipe()

View File

@ -21,7 +21,7 @@ import time
import xml.etree.ElementTree as ET
from django.utils.six.moves.urllib import parse as urlparse
from quixote import get_publisher, get_response
from quixote import get_publisher, get_response, get_request
from ..qommon import _
from ..qommon.form import (CompositeWidget, SingleSelectWidget,
@ -206,13 +206,16 @@ class UpdateUserProfileStatusItem(WorkflowStatusItem):
payload = json.dumps(payload, cls=JSONEncoder)
def after_job(job):
def after_job(job=None):
response, status, data, auth_header = http_patch_request(url,
payload, headers={'Content-type': 'application/json'})
if status != 200:
get_logger().error('failed to update profile for user %r', user)
get_response().add_after_job(str(N_('Updating user profile')), after_job)
if get_request():
get_response().add_after_job(str(N_('Updating user profile')), after_job)
else:
after_job()
register_item_class(UpdateUserProfileStatusItem)