Workplan Preise has been implemented
This commit is contained in:
parent
b99f45c7af
commit
6991b0989e
12 changed files with 878 additions and 11 deletions
|
|
@ -1,3 +1,80 @@
|
|||
from django.test import TestCase
|
||||
from decimal import Decimal
|
||||
|
||||
# Create your tests here.
|
||||
import factory
|
||||
import pytest
|
||||
from django.urls import reverse
|
||||
|
||||
from vergabe_teilnahme.apps.ausschreibungen.tests import AusschreibungFactory
|
||||
from vergabe_teilnahme.apps.core.services import gewichteter_durchschnitt
|
||||
|
||||
from .models import Preispunkt
|
||||
|
||||
|
||||
class PreispunktFactory(factory.django.DjangoModelFactory):
|
||||
class Meta:
|
||||
model = Preispunkt
|
||||
|
||||
ausschreibung = factory.SubFactory(AusschreibungFactory)
|
||||
leistungstyp = 'IT-Dienstleistung'
|
||||
konkrete_leistung = factory.Sequence(lambda n: f'Leistung {n}')
|
||||
mengeneinheit = 'Stück'
|
||||
einzelpreis = Decimal('100.00')
|
||||
vergleichsgewicht = Decimal('1.0')
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_vergleichsgewicht_null_gespeichert(client):
|
||||
a = AusschreibungFactory()
|
||||
url = reverse('ausschreibungen:preise:neu', kwargs={'ausschreibung_id': a.pk})
|
||||
response = client.post(url, {
|
||||
'leistungstyp': 'Test',
|
||||
'konkrete_leistung': 'Leistung mit Gewicht 0',
|
||||
'mengeneinheit': 'Stück',
|
||||
'waehrung': 'EUR',
|
||||
'vergleichsgewicht': '0.0',
|
||||
})
|
||||
assert response.status_code == 302
|
||||
pp = Preispunkt.objects.get(ausschreibung=a)
|
||||
assert pp.vergleichsgewicht == Decimal('0.0')
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_vergleichsgewicht_zu_gross_validation_error(client):
|
||||
a = AusschreibungFactory()
|
||||
url = reverse('ausschreibungen:preise:neu', kwargs={'ausschreibung_id': a.pk})
|
||||
response = client.post(url, {
|
||||
'leistungstyp': 'Test',
|
||||
'konkrete_leistung': 'Leistung',
|
||||
'mengeneinheit': 'Stück',
|
||||
'waehrung': 'EUR',
|
||||
'vergleichsgewicht': '2.5',
|
||||
})
|
||||
assert response.status_code == 200
|
||||
assert not Preispunkt.objects.filter(ausschreibung=a).exists()
|
||||
|
||||
|
||||
def test_gewichteter_durchschnitt_berechnung():
|
||||
class FakePP:
|
||||
def __init__(self, einzelpreis, gewicht):
|
||||
self.einzelpreis = Decimal(str(einzelpreis))
|
||||
self.vergleichsgewicht = Decimal(str(gewicht))
|
||||
|
||||
punkte = [
|
||||
FakePP(100, 1.0),
|
||||
FakePP(110, 2.0),
|
||||
FakePP(90, 0.0), # ausgeschlossen
|
||||
]
|
||||
ergebnis = gewichteter_durchschnitt(punkte)
|
||||
assert ergebnis is not None
|
||||
expected = (Decimal('100') * 1 + Decimal('110') * 2) / (1 + 2)
|
||||
assert round(ergebnis['wert'], 2) == round(expected, 2)
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_auswertung_view_200(client):
|
||||
a = AusschreibungFactory()
|
||||
PreispunktFactory(ausschreibung=a, einzelpreis=Decimal('150.00'))
|
||||
url = reverse('ausschreibungen:preise:auswertung', kwargs={'ausschreibung_id': a.pk})
|
||||
response = client.get(url)
|
||||
assert response.status_code == 200
|
||||
assert 'ergebnis' in response.context
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue