Files
vergabe-teilnahme/vergabe_teilnahme/apps/aufgaben/tests.py
2026-05-08 17:43:23 +02:00

97 lines
3.5 KiB
Python

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'