From bcf6dff1b00ec111da830586bb61768a1329ad0c Mon Sep 17 00:00:00 2001
From: bronsen <kontakt+gitcommit@nrrd.de>
Date: Mon, 17 Mar 2025 17:52:49 +0100
Subject: [PATCH] [tests,dependencies] capture logs with help from structlog
 and forget about logot

Closes #3
---
 collector/tests.py    | 41 +++++++++++++++++++++++++++++++----------
 pyproject.toml        |  1 -
 requirements/prod.txt |  2 +-
 requirements/test.in  |  1 -
 requirements/test.txt |  5 ++---
 5 files changed, 34 insertions(+), 16 deletions(-)

diff --git a/collector/tests.py b/collector/tests.py
index 8ca27e8..c6c2880 100644
--- a/collector/tests.py
+++ b/collector/tests.py
@@ -1,9 +1,11 @@
 from typing import Callable
+
 import pytest
 from django.test import Client
 from django.urls import reverse
-from hypothesis import given, strategies as st
-from logot import Logot, logged
+from hypothesis import given
+from hypothesis import strategies as st
+from structlog.testing import capture_logs
 
 from .models import Teil
 
@@ -56,16 +58,35 @@ def test_enter_endpoint_accepts_only_post_requests(
     assert response.status_code == expected_status
 
 
-@pytest.mark.xfail(reason="WIP, kein Plan warum nichts gecaptured zu werden scheint")
 def test_enter_endpoints_emits_expected_logs(
-    client: Client, logot: Logot, random_name: Callable[[int], str]
+    client: Client, random_name: Callable[[int], str]
 ):
+    """
+    note: capture_logs() yields a list of dicts, not a list of logfmt lines
+    that we configured for the app
+    """
     same_name = random_name(10)
 
-    response = client.post(reverse("collector:enter"), data={"new_name": same_name})
-    assert response.status_code == 302
-    logot.assert_logged(logged.info("New Teil entered"))
+    with capture_logs() as logs:
+        response = client.post(reverse("collector:enter"), data={"new_name": same_name})
+        assert response.status_code == 302
+        assert any(
+            (
+                le["event"].lower() == "New Teil entered".lower()
+                and le["log_level"].lower() == "info"
+                and "teil_id" in le
+                for le in logs
+            )
+        )
 
-    response = client.post(reverse("collector:enter"), data={"new_name": same_name})
-    assert response.status_code == 302
-    logot.assert_logged(logged.warning("Teil already existed"))
+    with capture_logs() as logs:
+        response = client.post(reverse("collector:enter"), data={"new_name": same_name})
+        assert response.status_code == 302
+        assert any(
+            (
+                le["event"].lower() == "Teil already existed".lower()
+                and le["log_level"].lower() == "warning"
+                and "teil_id" not in le
+                for le in logs
+            )
+        )
diff --git a/pyproject.toml b/pyproject.toml
index c60b9ff..9c87656 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -23,7 +23,6 @@ addopts = [
   "--no-migrations",
   "--capture=sys",
 ]
-logot_capturer = "logot.structlog.StructlogCapturer"
 
 [build-system]
 requires = ["pdm-backend"]
diff --git a/requirements/prod.txt b/requirements/prod.txt
index 493a11f..84c4010 100644
--- a/requirements/prod.txt
+++ b/requirements/prod.txt
@@ -1,4 +1,4 @@
-# SHA1:48c3af154036b224a6b21f175ea0a949febaf6f5
+# SHA1:d8e7f5aef64e2e1e161d339a9c1c53d42cdd0981
 #
 # This file is autogenerated by pip-compile-multi
 # To update, run:
diff --git a/requirements/test.in b/requirements/test.in
index f1e3b52..2c801fa 100644
--- a/requirements/test.in
+++ b/requirements/test.in
@@ -3,4 +3,3 @@
 hypothesis[django]
 pytest
 pytest-django
-logot[pytest,structlog]
diff --git a/requirements/test.txt b/requirements/test.txt
index 7aa87fa..a038000 100644
--- a/requirements/test.txt
+++ b/requirements/test.txt
@@ -1,4 +1,4 @@
-# SHA1:40e4b481355fc16525f8944d39904264b6e382a6
+# SHA1:9bf147356ad56dbe073ef0973141bdfb94631c9b
 #
 # This file is autogenerated by pip-compile-multi
 # To update, run:
@@ -7,9 +7,8 @@
 #
 -r prod.txt
 attrs==25.3.0
-hypothesis==6.129.2
+hypothesis==6.129.3
 iniconfig==2.0.0
-logot==1.3.0
 packaging==24.2
 pluggy==1.5.0
 pytest==8.3.5