rewrote calculer_frequentation, added basic test for it.
This commit is contained in:
@@ -1,7 +1,67 @@
|
||||
from django.test import TestCase
|
||||
from datetime import date, time
|
||||
|
||||
from maraudes.models import Maraude, Rencontre, Lieu
|
||||
from notes.models import Sujet
|
||||
from utilisateurs.models import Maraudeur
|
||||
from maraudes.notes import Observation
|
||||
from .charts import RencontreParHeureChart
|
||||
|
||||
# Create your tests here.
|
||||
|
||||
# MANDATORY FEATURES
|
||||
|
||||
# FicheStatistique primary key IS it's foreign sujet pk
|
||||
class TestCalculerFrequentationParHeure(TestCase):
|
||||
|
||||
def setUp(self):
|
||||
maraude = Maraude.objects.create(date=date(2017, 1, 1),
|
||||
heure_debut=time(20, 00),
|
||||
binome=Maraudeur.objects.create(first_name="Asterix", last_name="Gaulois"),
|
||||
referent=Maraudeur.objects.create(first_name="Referent", last_name="R", is_superuser=True))
|
||||
self._generate_test_data(maraude, [
|
||||
("Gare", time(20, 30), 45, ("S1",)), #
|
||||
("Gare", time(20, 40), 10, ("S2", "S3",)),
|
||||
("Centre-ville", time(21, 30), 30, ("S4",)), # Borne finale fermée
|
||||
("Urgences", time(22, 20), 26, ("S5", "S3")), # Déborde sur un nouvel intervalle
|
||||
])
|
||||
|
||||
def _generate_test_data(self, maraude, data):
|
||||
for lieu, heure, duree, sujets in data:
|
||||
rencontre = Rencontre.objects.create(maraude=maraude,
|
||||
lieu=Lieu.objects.get_or_create(nom=lieu)[0],
|
||||
heure_debut=heure,
|
||||
duree=duree)
|
||||
for s in sujets:
|
||||
observation = Observation.objects.create(rencontre=rencontre,
|
||||
sujet=Sujet.objects.get_or_create(surnom=s)[0],
|
||||
text="RAS")
|
||||
|
||||
def differences(self, first, second):
|
||||
diff = dict()
|
||||
for key, val in first.items():
|
||||
try:
|
||||
if not second[key] == val:
|
||||
diff[key] = (val, second[key])
|
||||
except KeyError:
|
||||
diff[key] = (val, None)
|
||||
return diff
|
||||
|
||||
def test_with_test_data(self):
|
||||
|
||||
# Retrieve observations queryset
|
||||
queryset = Observation.objects.filter(created_date=date(2017,1,1))
|
||||
|
||||
non_continu = RencontreParHeureChart.calculer_frequentation(queryset, continu=False)
|
||||
continu = RencontreParHeureChart.calculer_frequentation(queryset, continu=True)
|
||||
test_non_continu = {time(20, 30): 3,
|
||||
time(21, 30): 1,
|
||||
time(22, 15): 2,
|
||||
}
|
||||
self.assertEqual(non_continu, test_non_continu, "\nDifferences :\n{}".format(self.differences(non_continu, test_non_continu)))
|
||||
|
||||
test_continu = {time(20, 30): 3, time(20, 45): 3,
|
||||
time(21, 0): 1, time(21, 30): 1, time(21, 45): 1,
|
||||
time(22, 15): 2, time(22, 30): 2, time(22, 45): 2,
|
||||
}
|
||||
self.assertEqual(continu, test_continu, "\nDifferences :\n{}".format(self.differences(continu, test_continu)))
|
||||
Reference in New Issue
Block a user