85 lines
2.1 KiB
Python
85 lines
2.1 KiB
Python
# -*- 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()
|