generated from coulomb/repo-seed
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>
75 lines
2.8 KiB
Python
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
|