67 lines
3.1 KiB
Python
67 lines
3.1 KiB
Python
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))) |