feat(WP-0011): Marktbegleiter-Analyse — Katalog, Passagen, Auswertung
Implementiert UC-MB-01 bis UC-MB-03: Marktbegleiter-Katalog (Liste, Detail, Anlegen/Bearbeiten), Ausschreibungspassagen mit Verlässlichkeitsscore (1–10, Validator), Musterauswertung mit Aggregationen (Ausschreiber-Häufigkeit, Ø-Score, Passagen-Anzahl). 4 Tests grün. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
f88e2e7562
commit
bde10f3a69
13 changed files with 737 additions and 12 deletions
|
|
@ -1,3 +1,70 @@
|
|||
from django.test import TestCase
|
||||
import pytest
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.urls import reverse
|
||||
|
||||
# Create your tests here.
|
||||
from vergabe_teilnahme.apps.ausschreibungen.tests import AusschreibungFactory
|
||||
|
||||
from .models import Ausschreibungspassage, Marktbegleiter
|
||||
|
||||
|
||||
def make_mb(name='TestBegleiter', **kwargs):
|
||||
return Marktbegleiter.objects.create(name=name, **kwargs)
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_passage_anlegen_mit_score_10(client):
|
||||
a = AusschreibungFactory()
|
||||
mb = make_mb()
|
||||
url = reverse('marktbegleiter:passagen:neu', kwargs={'ausschreibung_id': a.pk})
|
||||
response = client.post(url, {
|
||||
'passage': 'Musterpassage aus dem Dokument',
|
||||
'marktbegleiter': mb.pk,
|
||||
'verlaesslichkeitsscore': 10,
|
||||
})
|
||||
assert response.status_code == 302
|
||||
assert Ausschreibungspassage.objects.filter(marktbegleiter=mb, verlaesslichkeitsscore=10).exists()
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_passage_score_zu_hoch_validierungsfehler():
|
||||
a = AusschreibungFactory()
|
||||
mb = make_mb()
|
||||
p = Ausschreibungspassage(
|
||||
ausschreibung=a,
|
||||
marktbegleiter=mb,
|
||||
passage='Test',
|
||||
verlaesslichkeitsscore=11,
|
||||
)
|
||||
with pytest.raises(ValidationError):
|
||||
p.full_clean()
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_auswertung_score_durchschnitt(client):
|
||||
a = AusschreibungFactory()
|
||||
mb = make_mb()
|
||||
Ausschreibungspassage.objects.create(
|
||||
ausschreibung=a, marktbegleiter=mb, passage='P1', verlaesslichkeitsscore=8
|
||||
)
|
||||
Ausschreibungspassage.objects.create(
|
||||
ausschreibung=a, marktbegleiter=mb, passage='P2', verlaesslichkeitsscore=6
|
||||
)
|
||||
url = reverse('marktbegleiter:auswertung', kwargs={'pk': mb.pk})
|
||||
response = client.get(url)
|
||||
assert response.status_code == 200
|
||||
content = response.content.decode()
|
||||
assert '7' in content
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_marktbegleiter_detail_zeigt_passagen(client):
|
||||
a = AusschreibungFactory()
|
||||
mb = make_mb(name='DetailBegleiter')
|
||||
Ausschreibungspassage.objects.create(
|
||||
ausschreibung=a, marktbegleiter=mb,
|
||||
passage='Sichtbare Passage', verlaesslichkeitsscore=5
|
||||
)
|
||||
url = reverse('marktbegleiter:detail', kwargs={'pk': mb.pk})
|
||||
response = client.get(url)
|
||||
assert response.status_code == 200
|
||||
assert b'Sichtbare Passage' in response.content
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue