# -*- encoding: utf-8 -*- import pytest from stw_potsdam import views # pytest fixtures are linked via parameter names of test methods # pragma pylint: disable=unused-import,redefined-outer-name,unused-argument from tests.stub_api import api_offline, api_online_one_shot from .response_util import meal_names # Long test method names are not 'snake case'! # See https://github.com/PyCQA/pylint/issues/2047 # The fix has not been ported to Python 2.x. # pylint: disable=invalid-name def test_health_check(client): response = client.get("/health_check") assert response.status_code == 200 assert response.data == b"OK" def test_index(client): response = client.get("/").json canteen_url = response.get("griebnitzsee", None) assert canteen_url, "Known canteen in index response" canteen = client.get(canteen_url) assert canteen.status_code == 200, "Canteen URL is reachable" @pytest.mark.parametrize( "url", [ "/canteens/spam", "/canteens/spam/xml", ], ) def test_canteen_not_found(client, url): response = client.get(url) assert response.status_code == 404 assert b"Canteen 'spam' not found" in response.data @pytest.mark.xfail(strict=True) def test_canteen_menu_api_unavailable(client, api_offline): _request_check_meals(client) def test_canteen_menu_request(client, api_online_one_shot): _request_check_meals(client) def test_canteen_menu_cached(client, api_online_one_shot): _request_check_meals(client) _request_check_meals(client) @pytest.mark.xfail(strict=True) def test_canteen_menu_second_request_indeed_fails(client, api_online_one_shot): _request_check_meals(client) views.cache.clear() _request_check_meals(client) def _request_check_meals(client): response = client.get('/canteens/griebnitzsee/xml') assert response.status_code == 200 meals = meal_names(response.data) assert "Rostbratwurst mit Sauerkraut und Salzkartoffeln" in meals @pytest.fixture def client(): views.app.config["TESTING"] = True return views.app.test_client() @pytest.fixture(autouse=True) def clear_cache(): yield views.cache.clear()