import freezegun import pytest from httmock import HTTMock, response import tests.utils from passerelle.apps.airquality.models import AirQuality SAMPLE_RESPONSE = { 'licence': 'https://opendatacommons.org/licenses/odbl/', 'commune': 'LYON-1ER-ARRONDISSEMENT', 'code_insee': '69381', 'indices': { 'current_page': 1, 'data': [ { 'date': '2020-12-22', 'valeur': '26.6503231768126', 'couleur_html': '#5CCB60', 'qualificatif': 'Bon', 'type_valeur': 'prévision', }, { 'date': '2020-12-21', 'valeur': '21.6876695818178', 'couleur_html': '#5CCB60', 'qualificatif': 'Bon', 'type_valeur': 'prévision', }, { 'date': '2020-12-20', 'valeur': '26.1405508214683', 'couleur_html': '#5CCB60', 'qualificatif': 'Bon', 'type_valeur': 'prévision', }, ], }, 'first_page_url': 'https://api.atmo-aura.fr/communes/69381/indices?api_token=XXX&page=1', 'from': 1, 'last_page': 23, 'last_page_url': 'https://api.atmo-aura.fr/communes/69381/indices?api_token=XXX&page=23', 'next_page_url': 'https://api.atmo-aura.fr/communes/69381/indices?api_token=XXX&page=2', 'path': 'https://api.atmo-aura.fr/communes/69381/indices', 'per_page': 50, 'prev_page_url': None, 'to': 50, 'total': 1137, } SAMPLE_COMMENT_RESPONSE = { 'licence': 'https://opendatacommons.org/licenses/odbl/', 'commentaire': 'Jeudi 11 mai, le temps perturbé a permis d’avoir une bonne qualité de l’air sur la zone de surveillance.', } @pytest.fixture def airquality(db): return AirQuality.objects.create(slug='atmo', atmo_aura_api_token='XXX') def mocked_http(url, request): if url.path.startswith('/commune'): return response(200, SAMPLE_RESPONSE, request=request) if url.path.startswith('/commentaire'): return response(200, SAMPLE_COMMENT_RESPONSE, request=request) @freezegun.freeze_time('2020-12-21') def test_airquality_details(app, airquality): endpoint = tests.utils.generic_endpoint_url('airquality', 'details', slug=airquality.slug) assert endpoint == '/airquality/atmo/details' with HTTMock(mocked_http): resp = app.get(endpoint + '/fr/lyon/', status=200) assert resp.json['data']['latest']['value'] == '21.6876695818178' assert 'Jeudi 11 mai, le temps' in resp.json['data']['comment'] def test_airquality_details_unknown_city(app, airquality): endpoint = tests.utils.generic_endpoint_url('airquality', 'details', slug=airquality.slug) app.get(endpoint + '/fr/paris/', status=404)