Files
vergabe-teilnahme/vergabe_teilnahme/apps/nachbetrachtung/tests.py
tegwick a1cc317b3b feat(nachbetrachtung): Abgabe-Checkliste, Dokumentation und Nachbetrachtung (WP-0009)
Vollständigkeitsprüfung mit Freigaben-Check, Abgabe dokumentieren mit
Nachweis-Upload, Nachbetrachtung mit Kickoff-Aufgabe (gewonnen) und
Alpine.js-gesteuerter Verlustanalyse (verloren). 5 Tests grün.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 15:09:38 +02:00

75 lines
2.8 KiB
Python

import pytest
from django.contrib.contenttypes.models import ContentType
from django.urls import reverse
from vergabe_teilnahme.apps.ausschreibungen.tests import AusschreibungFactory
from vergabe_teilnahme.apps.core.models import Freigabe
from .abgabe_views import abgabe_vollstaendigkeit
from .models import Nachbetrachtung
@pytest.mark.django_db
def test_abgabe_vollstaendigkeit_ohne_freigaben():
a = AusschreibungFactory(teilnahmeentscheidung='offen')
v = abgabe_vollstaendigkeit(a)
assert v['teilnahme_freigabe'] is False
assert v['preis_freigabe'] is False
assert v['recht_freigabe'] is False
assert v['abgabe_freigabe'] is False
assert v['entscheidung_getroffen'] is False
@pytest.mark.django_db
def test_abgabe_vollstaendigkeit_mit_freigabe():
from vergabe_teilnahme.apps.accounts.models import Mitarbeiter
user = Mitarbeiter.objects.create_user(username='pruefer', password='x')
a = AusschreibungFactory(teilnahmeentscheidung='teilnahme')
ct = ContentType.objects.get_for_model(a)
Freigabe.objects.create(
content_type=ct, object_id=a.pk,
freigabe_typ='preis', status='erteilt',
freigebende_person=user,
)
v = abgabe_vollstaendigkeit(a)
assert v['preis_freigabe'] is True
assert v['teilnahme_freigabe'] is False
assert v['entscheidung_getroffen'] is True
@pytest.mark.django_db
def test_ergebnis_gewonnen_erstellt_kickoff_aufgabe(client):
from vergabe_teilnahme.apps.aufgaben.models import Aufgabe
a = AusschreibungFactory(status=9)
url = reverse('ausschreibungen:nachbetrachtung:detail', kwargs={'ausschreibung_id': a.pk})
response = client.post(url, {
'ergebnis': 'gewonnen',
'verlustgruende': '[]',
})
assert response.status_code == 302
a.refresh_from_db()
assert a.status == 10
assert Aufgabe.objects.filter(ausschreibung=a, titel='Kickoff vorbereiten').exists()
@pytest.mark.django_db
def test_ergebnis_verloren_setzt_status_11(client):
a = AusschreibungFactory(status=9)
url = reverse('ausschreibungen:nachbetrachtung:detail', kwargs={'ausschreibung_id': a.pk})
client.post(url, {'ergebnis': 'verloren', 'verlustgruende': '[]'})
a.refresh_from_db()
assert a.status == 11
@pytest.mark.django_db
def test_verlustgruende_json_gespeichert(client):
import json
a = AusschreibungFactory(status=9)
url = reverse('ausschreibungen:nachbetrachtung:detail', kwargs={'ausschreibung_id': a.pk})
gruende = [{'grund': 'Zu teuer', 'kategorie': 'preis', 'verlaesslichkeit': 4}]
client.post(url, {'ergebnis': 'verloren', 'verlustgruende': json.dumps(gruende)})
nb = Nachbetrachtung.objects.get(ausschreibung=a)
assert nb.verlustgruende[0]['grund'] == 'Zu teuer'
assert nb.verlustgruende[0]['kategorie'] == 'preis'
assert nb.verlustgruende[0]['verlaesslichkeit'] == 4