Projet

Général

Profil

0001-isere_ens-use-empty-POST-for-booking-cancel-64787.patch

Thomas Noël, 13 mai 2022 13:25

Télécharger (4,76 ko)

Voir les différences:

Subject: [PATCH] isere_ens: use empty POST for booking cancel (#64787)

 passerelle/contrib/isere_ens/models.py |  8 ++++----
 tests/test_isere_ens.py                | 25 +++++++------------------
 2 files changed, 11 insertions(+), 22 deletions(-)
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
-