0001-isere_ens-use-empty-POST-for-booking-cancel-64787.patch
passerelle/contrib/isere_ens/models.py | ||
---|---|---|
183 | 183 |
class Meta: |
184 | 184 |
verbose_name = _("Espaces naturels sensibles de l'Isère") |
185 | 185 | |
186 |
def request(self, endpoint, params=None, json=None): |
|
186 |
def request(self, endpoint, params=None, json=None, method='get'):
|
|
187 | 187 |
url = urlparse.urljoin(self.base_url, endpoint) |
188 | 188 |
headers = {"token": self.token} |
189 |
if json is not None: |
|
189 |
if method == 'post' or json is not None:
|
|
190 | 190 |
response = self.requests.post(url, params=params, json=json, headers=headers) |
191 | 191 |
else: |
192 | 192 |
response = self.requests.get(url, params=params, headers=headers) |
... | ... | |
504 | 504 |
@endpoint( |
505 | 505 |
name="cancel-site-booking", |
506 | 506 |
description=_("Cancel a booking"), |
507 |
methods=["post"], |
|
507 | 508 |
display_order=6, |
508 | 509 |
perm="can_access", |
509 |
methods=["get", "post", "delete"], |
|
510 | 510 |
parameters={ |
511 | 511 |
"code": {"description": _('External ID')}, |
512 | 512 |
}, |
... | ... | |
514 | 514 |
def cancel_booking(self, request, code): |
515 | 515 |
if self.api_version == '1.0.0': |
516 | 516 |
raise APIError('not available on API v1.0.0', data=None) |
517 |
status = self.request('api/' + self.api_version + '/site/booking/school/cancel/' + code, json={})
|
|
517 |
status = self.request('api/' + self.api_version + '/site/booking/school/cancel/' + code, method='post')
|
|
518 | 518 |
if not isinstance(status, dict): |
519 | 519 |
raise APIError('response is not a dict', data=status) |
520 | 520 |
if 'status' not in status: |
tests/test_isere_ens.py | ||
---|---|---|
591 | 591 |
}, |
592 | 592 |
) |
593 | 593 |
mocked_post.return_value = tests.utils.FakedResponse(content=CANCEL_RESPONSE, status_code=200) |
594 |
response = app.delete(endpoint + "?code=123")
|
|
594 |
response = app.post(endpoint + "?code=123")
|
|
595 | 595 |
if api_version == '1.0.0': |
596 | 596 |
assert response.json["err"] == 1 |
597 | 597 |
assert response.json["data"] is None |
... | ... | |
601 | 601 |
assert mocked_post.call_count == 1 |
602 | 602 |
assert response.json["err"] == 0 |
603 | 603 |
assert response.json["data"]["status"] == "CANCELED" |
604 |
# post and get methods |
|
605 |
response = app.post(endpoint + "?code=123") |
|
606 |
assert mocked_post.call_args[0][0].endswith("api/" + api_version + "/site/booking/school/cancel/123") |
|
607 |
assert mocked_post.call_count == 2 |
|
608 |
assert response.json["err"] == 0 |
|
609 |
assert response.json["data"]["status"] == "CANCELED" |
|
610 |
response = app.get(endpoint + "?code=123") |
|
611 |
assert mocked_post.call_args[0][0].endswith("api/" + api_version + "/site/booking/school/cancel/123") |
|
612 |
assert mocked_post.call_count == 3 |
|
613 |
assert response.json["err"] == 0 |
|
614 |
assert response.json["data"]["status"] == "CANCELED" |
|
615 | 604 | |
616 |
response = app.get(endpoint, status=400) # no code specified
|
|
617 |
assert mocked_post.call_count == 3 # same as before
|
|
605 |
response = app.post(endpoint, status=400) # no code specified
|
|
606 |
assert mocked_post.call_count == 1 # same as before
|
|
618 | 607 | |
619 | 608 |
mocked_post.return_value = tests.utils.FakedResponse(content="""["not", "a", "dict"]""", status_code=200) |
620 |
response = app.get(endpoint + "?code=123")
|
|
621 |
assert mocked_post.call_count == 4
|
|
609 |
response = app.post(endpoint + "?code=123")
|
|
610 |
assert mocked_post.call_count == 2
|
|
622 | 611 |
assert response.json["err"] == 1 |
623 | 612 |
assert response.json["err_class"].endswith("APIError") |
624 | 613 |
assert response.json["err_desc"] == "response is not a dict" |
625 | 614 |
assert response.json["data"] == ["not", "a", "dict"] |
626 | 615 | |
627 | 616 |
mocked_post.return_value = tests.utils.FakedResponse(content="""{"foo": "bar"}""", status_code=200) |
628 |
response = app.get(endpoint + "?code=123")
|
|
629 |
assert mocked_post.call_count == 5
|
|
617 |
response = app.post(endpoint + "?code=123")
|
|
618 |
assert mocked_post.call_count == 3
|
|
630 | 619 |
assert response.json["err"] == 1 |
631 | 620 |
assert response.json["err_class"].endswith("APIError") |
632 | 621 |
assert response.json["err_desc"] == "no status in response" |
633 |
- |