toulouse_smart: trigger wcs when intervention is created async (#57669)
This commit is contained in:
parent
340cf3d8b0
commit
155775498c
|
@ -246,6 +246,22 @@ class ToulouseSmartResource(BaseResource, HTTPResource):
|
|||
wcs_request = self.wcs_requests.get(pk=kwargs['pk'])
|
||||
if not wcs_request.push():
|
||||
raise SkipJob()
|
||||
payload = {
|
||||
'creation_response': {
|
||||
'wcs_form_api_url': wcs_request.wcs_form_api_url,
|
||||
'wcs_form_number': wcs_request.wcs_form_number,
|
||||
'uuid': str(wcs_request.uuid),
|
||||
'payload': wcs_request.payload,
|
||||
'result': wcs_request.result,
|
||||
'status': wcs_request.status,
|
||||
}
|
||||
}
|
||||
smart_request = wcs_request.smart_requests.create(payload=payload)
|
||||
self.add_job(
|
||||
'update_intervention_job',
|
||||
id=smart_request.id,
|
||||
natural_id='smart-request-%s' % smart_request.id,
|
||||
)
|
||||
|
||||
@atomic
|
||||
@endpoint(
|
||||
|
|
|
@ -348,42 +348,6 @@ def test_create_intervention(mocked_uuid4, app, smart):
|
|||
assert wcs_request.status == 'sent'
|
||||
|
||||
|
||||
@mock_response(
|
||||
['/v1/type-intervention', None, INTERVENTION_TYPES],
|
||||
['/v1/intervention', CREATE_INTERVENTION_QUERY, get_json_file('create_intervention')],
|
||||
)
|
||||
@mock.patch("django.db.models.fields.UUIDField.get_default", return_value=UUID)
|
||||
def test_create_intervention_async(mocked_uuid4, app, smart):
|
||||
mocked_push = mock.patch(
|
||||
"passerelle.contrib.toulouse_smart.models.WcsRequest.push",
|
||||
return_value=False,
|
||||
)
|
||||
mocked_push.start()
|
||||
|
||||
assert Job.objects.count() == 0
|
||||
resp = app.post_json(URL + 'create-intervention/', params=CREATE_INTERVENTION_PAYLOAD)
|
||||
assert str(UUID) in CREATE_INTERVENTION_QUERY['notificationUrl']
|
||||
assert not resp.json['err']
|
||||
assert resp.json['data']['uuid'] == str(UUID)
|
||||
assert resp.json['data']['wcs_form_api_url'] == 'https://wcs.example.com/api/forms/foo/2/'
|
||||
wcs_request = smart.wcs_requests.get(uuid=UUID)
|
||||
assert wcs_request.wcs_form_api_url == 'https://wcs.example.com/api/forms/foo/2/'
|
||||
assert wcs_request.wcs_form_number == '42-2'
|
||||
assert wcs_request.payload == CREATE_INTERVENTION_QUERY
|
||||
assert wcs_request.status == 'registered'
|
||||
|
||||
mocked_push.stop()
|
||||
assert Job.objects.count() == 1
|
||||
job = Job.objects.get(method_name='create_intervention_job')
|
||||
assert job.status == 'registered'
|
||||
smart.jobs()
|
||||
job = Job.objects.get(method_name='create_intervention_job')
|
||||
assert job.status == 'completed'
|
||||
wcs_request = smart.wcs_requests.get(uuid=UUID)
|
||||
assert wcs_request.result == json.loads(get_json_file('create_intervention'))
|
||||
assert wcs_request.status == 'sent'
|
||||
|
||||
|
||||
def test_create_intervention_wrong_payload(app, smart):
|
||||
payload = deepcopy(CREATE_INTERVENTION_PAYLOAD)
|
||||
del payload['extra']['slug']
|
||||
|
@ -688,3 +652,81 @@ def test_update_intervention_job_transport_error(mocked_uuid, app, freezer, smar
|
|||
assert job.update_timestamp > job.creation_timestamp
|
||||
smart_request = smart.wcs_requests.get(uuid=UUID).smart_requests.get()
|
||||
assert smart_request.result == None
|
||||
|
||||
|
||||
UPDATE_INTERVENTION_QUERY_ON_ASYNC_CREATION = {
|
||||
'creation_response': {
|
||||
'wcs_form_api_url': CREATE_INTERVENTION_PAYLOAD_EXTRA['form_api_url'],
|
||||
'wcs_form_number': CREATE_INTERVENTION_PAYLOAD_EXTRA['external_number'],
|
||||
'uuid': str(UUID),
|
||||
'payload': CREATE_INTERVENTION_QUERY,
|
||||
'result': json.loads(get_json_file('create_intervention')),
|
||||
'status': 'sent',
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@mock_response(
|
||||
['/v1/type-intervention', None, INTERVENTION_TYPES],
|
||||
['/v1/intervention', CREATE_INTERVENTION_QUERY, get_json_file('create_intervention')],
|
||||
[
|
||||
'/api/forms/foo/2/hooks/update_intervention/',
|
||||
UPDATE_INTERVENTION_QUERY_ON_ASYNC_CREATION,
|
||||
WCS_RESPONSE_SUCCESS,
|
||||
],
|
||||
)
|
||||
@mock.patch("django.db.models.fields.UUIDField.get_default", return_value=UUID)
|
||||
def test_create_intervention_async(mocked_uuid4, app, smart, wcs_service):
|
||||
smart_id = json.loads(get_json_file('create_intervention'))['id']
|
||||
mocked_wcs_request_push = mock.patch(
|
||||
"passerelle.contrib.toulouse_smart.models.WcsRequest.push",
|
||||
return_value=False,
|
||||
)
|
||||
mocked_smart_request_push = mock.patch(
|
||||
"passerelle.contrib.toulouse_smart.models.SmartRequest.push",
|
||||
return_value=False,
|
||||
)
|
||||
|
||||
# smart and wcs are down
|
||||
mocked_wcs_request_push.start()
|
||||
mocked_smart_request_push.start()
|
||||
|
||||
assert Job.objects.count() == 0
|
||||
resp = app.post_json(URL + 'create-intervention/', params=CREATE_INTERVENTION_PAYLOAD)
|
||||
assert str(UUID) in CREATE_INTERVENTION_QUERY['notificationUrl']
|
||||
assert not resp.json['err']
|
||||
assert resp.json['data']['uuid'] == str(UUID)
|
||||
assert resp.json['data']['wcs_form_api_url'] == 'https://wcs.example.com/api/forms/foo/2/'
|
||||
wcs_request = smart.wcs_requests.get(uuid=UUID)
|
||||
assert wcs_request.wcs_form_api_url == 'https://wcs.example.com/api/forms/foo/2/'
|
||||
assert wcs_request.wcs_form_number == '42-2'
|
||||
assert wcs_request.payload == CREATE_INTERVENTION_QUERY
|
||||
assert wcs_request.status == 'registered'
|
||||
|
||||
assert Job.objects.count() == 1
|
||||
job = Job.objects.get(method_name='create_intervention_job')
|
||||
assert job.status == 'registered'
|
||||
|
||||
# smart is up
|
||||
mocked_wcs_request_push.stop()
|
||||
smart.jobs()
|
||||
assert Job.objects.count() == 2
|
||||
|
||||
job = Job.objects.get(method_name='create_intervention_job')
|
||||
assert job.status == 'completed'
|
||||
wcs_request = smart.wcs_requests.get(uuid=UUID)
|
||||
assert wcs_request.result['id'] == smart_id
|
||||
assert wcs_request.status == 'sent'
|
||||
|
||||
job = Job.objects.get(method_name='update_intervention_job')
|
||||
assert job.status == 'registered'
|
||||
|
||||
# wcs is up
|
||||
mocked_smart_request_push.stop()
|
||||
smart.jobs()
|
||||
|
||||
job = Job.objects.get(method_name='update_intervention_job')
|
||||
assert job.status == 'completed'
|
||||
smart_request = wcs_request.smart_requests.get()
|
||||
assert smart_request.payload['creation_response']['uuid'] == str(UUID)
|
||||
assert smart_request.payload['creation_response']['result']['id'] == smart_id
|
||||
|
|
Loading…
Reference in New Issue