diff --git a/senju/haiku.py b/senju/haiku.py index 66d5348..f117a5f 100644 --- a/senju/haiku.py +++ b/senju/haiku.py @@ -59,3 +59,7 @@ class Haiku: continue return haiku + + +DEFAULT_HAIKU: Haiku = Haiku(["Purple petals rise", "Defying fragile beauty", + "Fiercely breathing life"]) diff --git a/senju/main.py b/senju/main.py index fd2e795..4f16689 100644 --- a/senju/main.py +++ b/senju/main.py @@ -24,20 +24,18 @@ def index_view(): def haiku_index_view(): haiku_id: int | None = store.get_id_of_latest_haiku() if haiku_id is None: - # TODO: add "empty haiku list" error page - raise KeyError("no haiku exist yet") - return redirect(url_for("haiku_view", haiku_id=haiku_id)) + haiku_id = 0 + return redirect(url_for("haiku_view", haiku_id=haiku_id, is_default=1)) @app.route("/haiku/") def haiku_view(haiku_id): """test""" - haiku: Haiku | None = store.load_haiku(haiku_id) - if haiku is None: - # TODO: add "haiku not found" page - raise KeyError("haiku not found") + is_default: bool = request.args.get("is_default") == "1" + haiku: Haiku = store.load_haiku(haiku_id) context: dict = { - "haiku": haiku + "haiku": haiku, + "is_default": is_default } return render_template( diff --git a/senju/store_manager.py b/senju/store_manager.py index e99b98e..493ad29 100644 --- a/senju/store_manager.py +++ b/senju/store_manager.py @@ -7,7 +7,7 @@ from typing import Optional from tinydb import TinyDB from tinydb.queries import QueryImpl -from senju.haiku import Haiku +from senju.haiku import DEFAULT_HAIKU, Haiku DEFAULT_DB_PATH: Path = Path("/var/lib/senju.json") @@ -34,10 +34,12 @@ class StoreManager: def _save(self, data: dict) -> int: return self._db.insert(data) - def load_haiku(self, key: int) -> Optional[Haiku]: + def load_haiku(self, key: Optional[int]) -> Haiku: + if key is None: + return DEFAULT_HAIKU raw_haiku: dict | None = self._load(key) if raw_haiku is None: - return None + return DEFAULT_HAIKU h = Haiku(**raw_haiku) return h diff --git a/senju/templates/haiku.html b/senju/templates/haiku.html index 844dfff..c3d4382 100644 --- a/senju/templates/haiku.html +++ b/senju/templates/haiku.html @@ -11,6 +11,11 @@ {% endfor %}

+ {% if context.is_default %} +
+ Note: No haikus have been found in the haiku store. +
+ {% endif %} Back to Home diff --git a/tests/test_store.py b/tests/test_store.py index dc770c7..ac8aac4 100644 --- a/tests/test_store.py +++ b/tests/test_store.py @@ -4,7 +4,7 @@ from __future__ import annotations import pytest # noqa: F401 -from senju.haiku import Haiku +from senju.haiku import DEFAULT_HAIKU, Haiku from senju.store_manager import StoreManager # noqa: F401 @@ -36,9 +36,25 @@ def test_save_and_load_haiku(store_manager: StoreManager): but should have" assert h == h_loaded + assert h != DEFAULT_HAIKU def test_load_latest_with_empty_store(temp_data_dir): store = StoreManager(temp_data_dir / "empty_store.json") h = store.get_id_of_latest_haiku() assert h is None + + +def test_load_latest_or_default_with_empty(temp_data_dir): + store = StoreManager(temp_data_dir / "load_or_default_empty.json") + haiku = store.load_haiku(store.get_id_of_latest_haiku()) + assert haiku == DEFAULT_HAIKU + + +def test_load_latest_or_default_with_non_empty(temp_data_dir): + store = StoreManager(temp_data_dir / "load_or_default_not_empty.json") + nonsense_test_haiku = Haiku(["nonsense", "test", "haiku"]) + store.save_haiku(nonsense_test_haiku) + haiku = store.load_haiku(store.get_id_of_latest_haiku()) + assert haiku != DEFAULT_HAIKU + assert haiku == nonsense_test_haiku