import factory import pytest from django.urls import reverse from vergabe_teilnahme.apps.ausschreibungen.tests import AusschreibungFactory from vergabe_teilnahme.apps.lose.tests import AnforderungFactory from .models import Aufgabe, Bieterfrage class AufgabeFactory(factory.django.DjangoModelFactory): class Meta: model = Aufgabe ausschreibung = factory.SubFactory(AusschreibungFactory) titel = factory.Sequence(lambda n: f"Aufgabe {n}") typ = 'fachlich' status = 'offen' prioritaet = 2 class BieterfragenFactory(factory.django.DjangoModelFactory): class Meta: model = Bieterfrage ausschreibung = factory.SubFactory(AusschreibungFactory) fragentext = factory.Sequence(lambda n: f"Frage {n}: Bitte klären Sie...") status = 'entwurf' prioritaet = 2 # ─── Aufgaben ────────────────────────────────────────────────────────────── @pytest.mark.django_db def test_aufgaben_liste_get(client): a = AusschreibungFactory() url = reverse('ausschreibungen:aufgaben:liste', kwargs={'ausschreibung_id': a.pk}) response = client.get(url) assert response.status_code == 200 @pytest.mark.django_db def test_aufgabe_neu_post(client): a = AusschreibungFactory() url = reverse('ausschreibungen:aufgaben:neu', kwargs={'ausschreibung_id': a.pk}) response = client.post(url, {'titel': 'Neue Aufgabe', 'typ': 'fachlich', 'prioritaet': 2}) assert response.status_code == 302 assert Aufgabe.objects.filter(ausschreibung=a, titel='Neue Aufgabe').exists() @pytest.mark.django_db def test_aufgabe_status_htmx(client): aufgabe = AufgabeFactory() url = reverse('ausschreibungen:aufgaben:status', kwargs={'ausschreibung_id': aufgabe.ausschreibung_id, 'pk': aufgabe.pk}) response = client.post(url, {'status': 'erledigt'}, HTTP_HX_REQUEST='true') assert response.status_code == 200 aufgabe.refresh_from_db() assert aufgabe.status == 'erledigt' @pytest.mark.django_db def test_ueberfaellige_aufgabe_auto_update(client): from datetime import date, timedelta a = AusschreibungFactory() aufgabe = AufgabeFactory(ausschreibung=a, frist=date.today() - timedelta(days=1), status='offen') url = reverse('ausschreibungen:aufgaben:liste', kwargs={'ausschreibung_id': a.pk}) client.get(url) aufgabe.refresh_from_db() assert aufgabe.status == 'ueberfaellig' # ─── Bieterfragen ───────────────────────────────────────────────────────── @pytest.mark.django_db def test_bieterfrage_neu_prefill_anforderung(client): a = AusschreibungFactory() anf = AnforderungFactory(ausschreibung=a) url = reverse('ausschreibungen:bieterfragen:neu', kwargs={'ausschreibung_id': a.pk}) response = client.get(url, {'anforderung_id': anf.pk}) assert response.status_code == 200 assert str(anf.pk).encode() in response.content @pytest.mark.django_db def test_bieterfrage_antwort_speichern(client): bf = BieterfragenFactory(status='eingereicht') url = reverse('ausschreibungen:bieterfragen:antwort', kwargs={'ausschreibung_id': bf.ausschreibung_id, 'pk': bf.pk}) response = client.post(url, {'antwort': 'Die Antwort lautet 42.', 'auswirkung_angebot': ''}) assert response.status_code == 302 bf.refresh_from_db() assert bf.antwort == 'Die Antwort lautet 42.' assert bf.status == 'beantwortet'