api: add API to check for tracking code existence (#12435)
This commit is contained in:
parent
45d86788b3
commit
53f7bc9d06
|
@ -347,5 +347,25 @@ n'est pas nécessaire de préciser l'identifiant d'un utilisateur.
|
|||
|
||||
</section>
|
||||
|
||||
<section id="tracking-code">
|
||||
<title>Code de suivi</title>
|
||||
|
||||
<p>
|
||||
Une API existe pour déterminer l'existence d'un code de suivi et, le cas
|
||||
échéant, découvrir la demande associée.
|
||||
</p>
|
||||
|
||||
<screen>
|
||||
<output style="prompt">$ </output><input>curl -H "Accept: application/json" \
|
||||
https://www.example.net/api/code/QRFPTSLR</input>
|
||||
<output>{"url": "http://www.example.net/demarche/23", "err": 0}</output>
|
||||
</screen>
|
||||
|
||||
<p>
|
||||
En cas d'inexistence du code de suivi donné, une réponse avec un code de retour
|
||||
404 est retourné.
|
||||
</p>
|
||||
|
||||
</section>
|
||||
|
||||
</page>
|
||||
|
|
|
@ -1353,6 +1353,38 @@ def test_workflow_trigger(pub, local_user):
|
|||
resp = get_app(pub).post(sign_uri(formdata.get_url() + 'jump/trigger/XXX'),
|
||||
status=403)
|
||||
|
||||
def test_tracking_code(pub):
|
||||
FormDef.wipe()
|
||||
formdef = FormDef()
|
||||
formdef.name = 'test'
|
||||
formdef.fields = []
|
||||
formdef.enable_tracking_codes = True
|
||||
formdef.store()
|
||||
|
||||
data_class = formdef.data_class()
|
||||
formdata = data_class()
|
||||
formdata.store()
|
||||
|
||||
code = get_publisher().tracking_code_class()
|
||||
code.formdata = formdata
|
||||
code.store()
|
||||
|
||||
resp = get_app(pub).get('/api/code/foobar', status=404)
|
||||
assert resp.json['err'] == 1
|
||||
|
||||
resp = get_app(pub).get('/api/code/%s' % code.id, status=200)
|
||||
assert resp.json['err'] == 0
|
||||
assert resp.json['url'] == 'http://example.net/test/%s' % formdata.id
|
||||
|
||||
formdef.enable_tracking_codes = False
|
||||
formdef.store()
|
||||
resp = get_app(pub).get('/api/code/%s' % code.id, status=404)
|
||||
|
||||
formdef.enable_tracking_codes = True
|
||||
formdef.store()
|
||||
formdata.remove_self()
|
||||
resp = get_app(pub).get('/api/code/%s' % code.id, status=404)
|
||||
|
||||
@pytest.fixture(params=['sql', 'pickle'])
|
||||
def no_request_pub(request):
|
||||
pub = create_temporary_pub(sql_mode=bool(request.param == 'sql'))
|
||||
|
|
20
wcs/api.py
20
wcs/api.py
|
@ -552,15 +552,33 @@ class ApiUsersDirectory(Directory):
|
|||
return ApiUserDirectory(user)
|
||||
|
||||
|
||||
class ApiTrackingCodeDirectory(Directory):
|
||||
def _q_lookup(self, component):
|
||||
get_response().set_content_type('application/json')
|
||||
try:
|
||||
tracking_code = get_publisher().tracking_code_class.get(component)
|
||||
except KeyError:
|
||||
raise TraversalError()
|
||||
try:
|
||||
formdata = tracking_code.formdata
|
||||
except KeyError:
|
||||
raise TraversalError()
|
||||
if formdata.formdef.enable_tracking_codes is False:
|
||||
raise TraversalError()
|
||||
data = {'err': 0, 'url': formdata.get_url().rstrip('/')}
|
||||
return json.dumps(data)
|
||||
|
||||
|
||||
class ApiDirectory(Directory):
|
||||
_q_exports = ['forms', 'roles', ('reverse-geocoding', 'reverse_geocoding'),
|
||||
'formdefs', 'categories', 'user', 'users']
|
||||
'formdefs', 'categories', 'user', 'users', 'code']
|
||||
|
||||
forms = ApiFormsDirectory()
|
||||
formdefs = ApiFormdefsDirectory()
|
||||
categories = ApiCategoriesDirectory()
|
||||
user = ApiUserDirectory()
|
||||
users = ApiUsersDirectory()
|
||||
code = ApiTrackingCodeDirectory()
|
||||
|
||||
def reverse_geocoding(self):
|
||||
try:
|
||||
|
|
Loading…
Reference in New Issue