[tests,dependencies] capture logs with help from structlog and forget about logot

Closes 
This commit is contained in:
bronsen 2025-03-17 17:52:49 +01:00
parent 6de8b07d1b
commit bcf6dff1b0
5 changed files with 34 additions and 16 deletions

View file

@ -1,9 +1,11 @@
from typing import Callable from typing import Callable
import pytest import pytest
from django.test import Client from django.test import Client
from django.urls import reverse from django.urls import reverse
from hypothesis import given, strategies as st from hypothesis import given
from logot import Logot, logged from hypothesis import strategies as st
from structlog.testing import capture_logs
from .models import Teil from .models import Teil
@ -56,16 +58,35 @@ def test_enter_endpoint_accepts_only_post_requests(
assert response.status_code == expected_status 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( 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) same_name = random_name(10)
response = client.post(reverse("collector:enter"), data={"new_name": same_name}) with capture_logs() as logs:
assert response.status_code == 302 response = client.post(reverse("collector:enter"), data={"new_name": same_name})
logot.assert_logged(logged.info("New Teil entered")) 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}) with capture_logs() as logs:
assert response.status_code == 302 response = client.post(reverse("collector:enter"), data={"new_name": same_name})
logot.assert_logged(logged.warning("Teil already existed")) 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
)
)

View file

@ -23,7 +23,6 @@ addopts = [
"--no-migrations", "--no-migrations",
"--capture=sys", "--capture=sys",
] ]
logot_capturer = "logot.structlog.StructlogCapturer"
[build-system] [build-system]
requires = ["pdm-backend"] requires = ["pdm-backend"]

View file

@ -1,4 +1,4 @@
# SHA1:48c3af154036b224a6b21f175ea0a949febaf6f5 # SHA1:d8e7f5aef64e2e1e161d339a9c1c53d42cdd0981
# #
# This file is autogenerated by pip-compile-multi # This file is autogenerated by pip-compile-multi
# To update, run: # To update, run:

View file

@ -3,4 +3,3 @@
hypothesis[django] hypothesis[django]
pytest pytest
pytest-django pytest-django
logot[pytest,structlog]

View file

@ -1,4 +1,4 @@
# SHA1:40e4b481355fc16525f8944d39904264b6e382a6 # SHA1:9bf147356ad56dbe073ef0973141bdfb94631c9b
# #
# This file is autogenerated by pip-compile-multi # This file is autogenerated by pip-compile-multi
# To update, run: # To update, run:
@ -7,9 +7,8 @@
# #
-r prod.txt -r prod.txt
attrs==25.3.0 attrs==25.3.0
hypothesis==6.129.2 hypothesis==6.129.3
iniconfig==2.0.0 iniconfig==2.0.0
logot==1.3.0
packaging==24.2 packaging==24.2
pluggy==1.5.0 pluggy==1.5.0
pytest==8.3.5 pytest==8.3.5