Files
vergabe-teilnahme/vergabe_teilnahme/apps/lose/tests.py

115 lines
4.1 KiB
Python

import factory
import pytest
from django.urls import reverse
from vergabe_teilnahme.apps.ausschreibungen.models import Ausschreibung
from vergabe_teilnahme.apps.ausschreibungen.tests import AusschreibungFactory
from vergabe_teilnahme.apps.bibliothek.models import Nachweis
from .models import Anforderung, Los
class LosFactory(factory.django.DjangoModelFactory):
class Meta:
model = Los
ausschreibung = factory.SubFactory(AusschreibungFactory)
losnummer = factory.Sequence(lambda n: f"L{n:02d}")
lostitel = factory.Sequence(lambda n: f"Los {n}")
class AnforderungFactory(factory.django.DjangoModelFactory):
class Meta:
model = Anforderung
ausschreibung = factory.SubFactory(AusschreibungFactory)
titel = factory.Sequence(lambda n: f"Anforderung {n}")
verbindlichkeit = 'muss'
erfuellungsstatus = 'offen'
class NachweisFactory(factory.django.DjangoModelFactory):
class Meta:
model = Nachweis
titel = factory.Sequence(lambda n: f"Nachweis {n}")
# ─── Lose ──────────────────────────────────────────────────────────────────
@pytest.mark.django_db
def test_lose_liste_get(client):
a = AusschreibungFactory()
url = reverse('ausschreibungen:lose:liste', kwargs={'ausschreibung_id': a.pk})
response = client.get(url)
assert response.status_code == 200
@pytest.mark.django_db
def test_los_neu_post(client):
a = AusschreibungFactory()
url = reverse('ausschreibungen:lose:neu', kwargs={'ausschreibung_id': a.pk})
response = client.post(url, {'losnummer': 'L01', 'lostitel': 'Testlos'})
assert response.status_code == 302
assert Los.objects.filter(ausschreibung=a, losnummer='L01').exists()
@pytest.mark.django_db
def test_los_detail_get(client):
los = LosFactory()
url = reverse('ausschreibungen:lose:detail',
kwargs={'ausschreibung_id': los.ausschreibung_id, 'los_pk': los.pk})
response = client.get(url)
assert response.status_code == 200
# ─── Anforderungen ─────────────────────────────────────────────────────────
@pytest.mark.django_db
def test_anforderung_neu_post_muss(client):
a = AusschreibungFactory()
url = reverse('ausschreibungen:lose:anforderung_neu', kwargs={'ausschreibung_id': a.pk})
response = client.post(url, {'titel': 'Neue Anforderung', 'verbindlichkeit': 'muss',
'erfuellungsstatus': 'offen'})
assert response.status_code == 302
assert Anforderung.objects.filter(ausschreibung=a, titel='Neue Anforderung').exists()
@pytest.mark.django_db
def test_anforderung_status_htmx(client):
anf = AnforderungFactory()
url = reverse('ausschreibungen:lose:anforderung_status',
kwargs={'ausschreibung_id': anf.ausschreibung_id, 'pk': anf.pk})
response = client.post(url, {'erfuellungsstatus': 'nicht_erfuellbar'},
HTTP_HX_REQUEST='true')
assert response.status_code == 200
anf.refresh_from_db()
assert anf.erfuellungsstatus == 'nicht_erfuellbar'
@pytest.mark.django_db
def test_ausschlusskriterium_banner_shown(client):
a = AusschreibungFactory()
AnforderungFactory(
ausschreibung=a,
ausschlusskriterium=True,
erfuellungsstatus='nicht_erfuellbar',
)
url = reverse('ausschreibungen:entscheidung', kwargs={'pk': a.pk})
response = client.get(url)
assert response.status_code == 200
assert b'Nicht erf\xc3\xbcllbare Ausschlusskriterien' in response.content
@pytest.mark.django_db
def test_nachweis_zuordnen(client):
anf = AnforderungFactory()
n = NachweisFactory()
url = reverse('ausschreibungen:lose:nachweis_zuordnen',
kwargs={'ausschreibung_id': anf.ausschreibung_id, 'pk': anf.pk})
response = client.post(url, {'nachweis_pk': n.pk})
assert response.status_code == 200
assert anf.nachweise.filter(pk=n.pk).exists()