Files
2026-05-21 08:21:49 +00:00

92 lines
2.5 KiB
Python

# -*- encoding: utf-8 -*-
import pytest
from openmensa_parsers.config import Canteen
from openmensa_parsers.parsers.base import BaseOpenMensaParser, FeedDefinition
from openmensa_parsers.parsers.registry import create_parser, get_parser_class
from openmensa_parsers.parsers.potsdam import PotsdamParser
from openmensa_parsers.views import app
from openmensa_parsers.xml_types.builder import Builder
from openmensa_parsers.xml_types.canteen_xml import CanteenMeta, CanteenXML
from openmensa_parsers.xml_types.times_xml import CanteenOpenTimespec, TimesXML
def _configured_canteen():
return Canteen(
key="demo",
name="Demo Canteen",
street="Demo Street",
city="Demo City",
id="1",
chash="demo",
)
def _canteen_xml():
meta = CanteenMeta(
name="Demo Canteen",
address="Demo Street, 12345 Demo City",
city="Demo City",
phone="+49 331 123456",
email="demo@example.test",
availability="public",
)
times = TimesXML({
day: CanteenOpenTimespec("geschlossen")
for day in TimesXML.VALID_DAYS
})
return CanteenXML(meta, times)
class DemoParser(BaseOpenMensaParser):
id = "demo"
feed = FeedDefinition(source="https://example.test")
def __init__(self):
self.fetched = False
self.parsed_raw_data = None
def fetch(self):
self.fetched = True
return {"source": "fixture"}
def parse(self, _config, raw_data):
self.parsed_raw_data = raw_data
return {"demo": _canteen_xml()}
def test_builder_uses_supplied_parser():
parser = DemoParser()
with app.test_request_context():
builder = Builder({"demo": _configured_canteen()}, parser=parser)
assert parser.fetched
assert parser.parsed_raw_data == {"source": "fixture"}
assert b"https://example.test" in builder.get_xml("demo")
def test_builder_accepts_source_data_fixture():
parser = DemoParser()
with app.test_request_context():
Builder(
{"demo": _configured_canteen()},
source_data={"source": "test-fixture"},
parser=parser,
)
assert not parser.fetched
assert parser.parsed_raw_data == {"source": "test-fixture"}
def test_parser_registry_loads_default_parser():
assert get_parser_class("potsdam") is PotsdamParser
assert isinstance(create_parser("potsdam"), PotsdamParser)
def test_parser_registry_rejects_unknown_parser():
with pytest.raises(KeyError, match="Unknown parser"):
create_parser("unknown")