import factory import pytest from django.urls import reverse from .models import Ausschreibung class AusschreibungFactory(factory.django.DjangoModelFactory): class Meta: model = Ausschreibung titel = factory.Sequence(lambda n: f"Ausschreibung {n}") ausschreiber = "Testausschreiber GmbH" status = 1 # --- Model tests --- @pytest.mark.django_db def test_ausschreibung_str(): a = AusschreibungFactory(titel="Test Ausschreibung") assert str(a) == "Test Ausschreibung" @pytest.mark.django_db @pytest.mark.parametrize("status,expected", [ (1, True), (5, True), (9, True), (10, False), (11, False), (13, False), ]) def test_ist_aktiv(status, expected): a = AusschreibungFactory(status=status) assert a.ist_aktiv == expected @pytest.mark.django_db def test_naechste_frist_returns_earlier(): from datetime import date, timedelta heute = date.today() a = AusschreibungFactory( bieterfragen_bis=heute + timedelta(days=5), abgabe_bis=heute + timedelta(days=10), ) assert a.naechste_frist == heute + timedelta(days=5) @pytest.mark.django_db def test_naechste_frist_none_when_past(): from datetime import date, timedelta gestern = date.today() - timedelta(days=1) a = AusschreibungFactory(bieterfragen_bis=gestern, abgabe_bis=None) assert a.naechste_frist is None # --- View tests --- @pytest.mark.django_db def test_liste_get(client): response = client.get(reverse("ausschreibungen:liste")) assert response.status_code == 200 @pytest.mark.django_db def test_neu_get(client): response = client.get(reverse("ausschreibungen:neu")) assert response.status_code == 200 @pytest.mark.django_db def test_neu_post_valid(client): data = {"titel": "Neue Ausschreibung", "ausschreiber": "Stadt XY"} response = client.post(reverse("ausschreibungen:neu"), data) assert response.status_code == 302 a = Ausschreibung.objects.get(titel="Neue Ausschreibung") assert response.url == reverse("ausschreibungen:detail", kwargs={"pk": a.pk}) @pytest.mark.django_db def test_detail_get(client): a = AusschreibungFactory() response = client.get(reverse("ausschreibungen:detail", kwargs={"pk": a.pk})) assert response.status_code == 200 @pytest.mark.django_db def test_status_post(client): a = AusschreibungFactory(status=1) url = reverse("ausschreibungen:status", kwargs={"pk": a.pk}) response = client.post(url, {"status": "4"}) assert response.status_code == 200 a.refresh_from_db() assert a.status == 4 @pytest.mark.django_db def test_status_htmx_returns_partial(client): a = AusschreibungFactory(status=1) url = reverse("ausschreibungen:status", kwargs={"pk": a.pk}) response = client.post(url, {"status": "3"}, HTTP_HX_REQUEST="true") assert response.status_code == 200 assert b"status-widget" in response.content