ScoDoc-Lille/tests/unit/test_departements.py

97 lines
3.3 KiB
Python

# -*- coding: utf-8 -*-
"""Test ORM departement/formation/preferences
Utiliser comme:
pytest tests/unit/test_departements.py
"""
from flask import g
import app
from app import db
from app.models import Departement, ScoPreference, FormSemestre, formsemestre
from app.scodoc import sco_formsemestre
from app.scodoc import sco_preferences
from tests.unit import test_sco_basic
def test_preferences_orm(test_client):
"""preferences, via ORM and legacy ScoDoc"""
d = Departement(acronym="TT")
p1 = ScoPreference(name="temperature", value="24", departement=d)
p2 = ScoPreference(name="couleur", value="bleue", departement=d)
db.session.add(d)
db.session.add(p1)
db.session.add(p2)
db.session.commit()
prefs = d.preferences.all()
assert isinstance(prefs, list)
assert len(prefs) == 2
def test_preferences(test_client):
"""ScoDoc preferences"""
# preferences "globales" d'un département:
current_dept = Departement.query.filter_by(acronym=g.scodoc_dept).first()
prefs = sco_preferences.get_base_preferences()
assert isinstance(prefs, sco_preferences.BasePreferences)
assert prefs.dept_id == current_dept.id
# Compare nombre de d'items
assert len(ScoPreference.query.filter_by(dept_id=current_dept.id).all()) == len(
prefs
)
# Accès à une valeur via ORM
assert (
len(
ScoPreference.query.filter_by(
dept_id=current_dept.id, name="abs_notification_mail_tmpl"
).all()
)
== 1
)
orm_val = (
ScoPreference.query.filter_by(
dept_id=current_dept.id, name="abs_notification_mail_tmpl"
)
.first()
.value
)
# Compare valeurs
sco_val = prefs.get(None, "abs_notification_mail_tmpl")
assert orm_val.strip() == sco_val.strip()
# nb: I don't understand why SQLAlchemy strips the string ?!
# --- Charge dans un autre département
# departement fictif créé ici:
d = Departement(acronym="D2")
db.session.add(d)
db.session.commit()
app.set_sco_dept("D2")
prefs2 = sco_preferences.get_base_preferences()
assert len(prefs2) == len(prefs)
prefs2.set(None, "abs_notification_mail_tmpl", "toto")
assert prefs2.get(None, "abs_notification_mail_tmpl") == "toto"
# Vérifie que les prefs sont bien sur un seul département:
app.set_sco_dept(current_dept.acronym)
assert prefs.get(None, "abs_notification_mail_tmpl") != "toto"
orm_val = (
ScoPreference.query.filter_by(dept_id=d.id, name="abs_notification_mail_tmpl")
.first()
.value
)
assert orm_val == "toto"
# --- Preferences d'un semestre
# rejoue ce test pour avoir un semestre créé
app.set_sco_dept("D2")
test_sco_basic.run_sco_basic(dept=Departement.query.filter_by(acronym="D2").first())
sem = sco_formsemestre.do_formsemestre_list()[0]
formsemestre_id = sem["formsemestre_id"]
semp = sco_preferences.SemPreferences(formsemestre_id=formsemestre_id)
assert semp["abs_notification_mail_tmpl"] == "toto"
assert semp.is_global("abs_notification_mail_tmpl")
# donne une valeur pour le semestre:
prefs2.set(formsemestre_id, "abs_notification_mail_tmpl", "foo")
assert not semp.is_global("abs_notification_mail_tmpl")
assert semp["abs_notification_mail_tmpl"] == "foo"