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>
This commit is contained in:
parent
bca4eb15d8
commit
a1cc317b3b
10 changed files with 583 additions and 12 deletions
|
|
@ -1,3 +1,74 @@
|
|||
from django.test import TestCase
|
||||
import pytest
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.urls import reverse
|
||||
|
||||
# Create your tests here.
|
||||
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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue