generated from coulomb/repo-seed
115 lines
4.1 KiB
Python
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()
|