forked from ScoDoc/ScoDoc
exclude .idea files from git
refactoring setinngs variables in progress: import xml files ajout creation user "bach" pour certains tests pseudo-test pour initalisation Selenium typo Ajout/suppression de département en tant qu'utilisateur scodoc (non root) complement scodoc.py pour import xml files --amend scodoc is able to perform database operation move export..xml to tests/scenario dir
This commit is contained in:
parent
383fdb0e53
commit
3d9f362daf
3
.gitignore
vendored
3
.gitignore
vendored
@ -169,4 +169,5 @@ Thumbs.db
|
||||
.vscode/
|
||||
*.code-workspace
|
||||
|
||||
|
||||
# PyCharm projects
|
||||
.idea/
|
||||
|
@ -168,7 +168,7 @@ de votre installation ScoDoc 7 pour passer à ScoDoc 8 (*ne pas utiliser en prod
|
||||
|
||||
## Création d'un département
|
||||
|
||||
sudo su
|
||||
su scodoc # si besoin
|
||||
cd /opt/scodoc
|
||||
source venv/bin/activate
|
||||
flask sco-create-dept DEPT
|
||||
@ -177,7 +177,7 @@ où `DEPT` est le nom du département (un acronyme en majuscule, comme "RT", "GE
|
||||
|
||||
### Suppression d'un département
|
||||
|
||||
sudo su
|
||||
su scodoc # si besoin
|
||||
cd /opt/scodoc
|
||||
source venv/bin/activate
|
||||
flask sco-delete-dept DEPT
|
||||
|
@ -757,6 +757,6 @@ def tf_error_message(msg):
|
||||
if isinstance(msg, str):
|
||||
msg = [msg]
|
||||
return (
|
||||
'<ul class="tf-msg"><li class="tf-msg">%s</li></ul>'
|
||||
% '</li><li class="tf-msg">'.join(msg)
|
||||
'<ul class="tf-msg"><li class="tf-msg error-message">%s</li></ul>'
|
||||
% '</li><li class="tf-msg tf-msg error-message">'.join(msg)
|
||||
)
|
||||
|
@ -111,7 +111,7 @@ def index_html(context, REQUEST=None, showcodes=0, showsemtable=0):
|
||||
# aucun semestre courant: affiche aide
|
||||
H.append(
|
||||
"""<h2 class="listesems">Aucune session en cours !</h2>
|
||||
<p>Pour ajouter une session, aller dans <a href="Notes">Programmes</a>,
|
||||
<p>Pour ajouter une session, aller dans <a href="Notes" id="link-programmes">Programmes</a>,
|
||||
choisissez une formation, puis suivez le lien "<em>UE, modules, semestres</em>".
|
||||
</p><p>
|
||||
Là, en bas de page, suivez le lien
|
||||
|
@ -259,6 +259,7 @@ def formation_list_table(context, formation_id=None, args={}, REQUEST=None):
|
||||
f["parcours_name"] = ""
|
||||
f["_titre_target"] = "ue_list?formation_id=%(formation_id)s" % f
|
||||
f["_titre_link_class"] = "stdlink"
|
||||
f["_titre_id"] = "titre-%s" % f["acronyme"].lower().replace(" ", "-")
|
||||
# Ajoute les semestres associés à chaque formation:
|
||||
f["sems"] = sco_formsemestre.do_formsemestre_list(
|
||||
context, args={"formation_id": f["formation_id"]}
|
||||
@ -266,13 +267,14 @@ def formation_list_table(context, formation_id=None, args={}, REQUEST=None):
|
||||
f["sems_list_txt"] = ", ".join([s["session_id"] for s in f["sems"]])
|
||||
f["_sems_list_txt_html"] = ", ".join(
|
||||
[
|
||||
'<a class="discretelink" href="formsemestre_status?formsemestre_id=%(formsemestre_id)s">%(session_id)s<a>'
|
||||
% s
|
||||
'<a class="discretelink" href="formsemestre_status?formsemestre_id=%(formsemestre_id)s">%('
|
||||
"session_id)s<a> " % s
|
||||
for s in f["sems"]
|
||||
]
|
||||
+ [
|
||||
'<a class="stdlink" href="formsemestre_createwithmodules?formation_id=%(formation_id)s&semestre_id=1">ajouter</a>'
|
||||
% f
|
||||
'<a class="stdlink" id="add-semestre-%s" '
|
||||
'href="formsemestre_createwithmodules?formation_id=%s&semestre_id=1">ajouter</a> '
|
||||
% (f["acronyme"].lower().replace(" ", "-"), f["formation_id"])
|
||||
]
|
||||
)
|
||||
if f["sems"]:
|
||||
@ -288,16 +290,17 @@ def formation_list_table(context, formation_id=None, args={}, REQUEST=None):
|
||||
else:
|
||||
but_locked = '<span class="but_placeholder"></span>'
|
||||
if editable and not locked:
|
||||
but_suppr = (
|
||||
'<a class="stdlink" href="formation_delete?formation_id=%s">%s</a>'
|
||||
% (f["formation_id"], suppricon)
|
||||
but_suppr = '<a class="stdlink" href="formation_delete?formation_id=%s" id="delete-formation-%s">%s</a>' % (
|
||||
f["formation_id"],
|
||||
f["acronyme"].lower().replace(" ", "-"),
|
||||
suppricon,
|
||||
)
|
||||
else:
|
||||
but_suppr = '<span class="but_placeholder"></span>'
|
||||
if editable:
|
||||
but_edit = (
|
||||
'<a class="stdlink" href="formation_edit?formation_id=%s">%s</a>'
|
||||
% (f["formation_id"], editicon)
|
||||
'<a class="stdlink" href="formation_edit?formation_id=%s" id="edit-formation-%s">%s</a>'
|
||||
% (f["formation_id"], f["acronyme"].lower().replace(" ", "-"), editicon)
|
||||
)
|
||||
else:
|
||||
but_edit = '<span class="but_placeholder"></span>'
|
||||
@ -365,4 +368,4 @@ def formation_create_new_version(context, formation_id, redirect=True, REQUEST=N
|
||||
"ue_list?formation_id=" + new_id + "&msg=Nouvelle version !"
|
||||
)
|
||||
else:
|
||||
return new_id, modules_old2new, ues_old2new
|
||||
return new_id, modules_old2new, ues_old2new
|
||||
|
@ -391,7 +391,7 @@ def index_html(context, REQUEST=None):
|
||||
|
||||
if editable:
|
||||
H.append(
|
||||
"""<p><a class="stdlink" href="formation_create">Créer une formation</a></p>
|
||||
"""<p><a class="stdlink" href="formation_create" id="link-create-formation">Créer une formation</a></p>
|
||||
<p><a class="stdlink" href="formation_import_xml_form">Importer une formation (xml)</a></p>
|
||||
<p class="help">Une "formation" est un programme pédagogique structuré en UE, matières et modules. Chaque semestre se réfère à une formation. La modification d'une formation affecte tous les semestres qui s'y réfèrent.</p>
|
||||
"""
|
||||
@ -1968,7 +1968,7 @@ def formsemestre_validation_etud_manu(
|
||||
def formsemestre_validate_previous_ue(
|
||||
context, formsemestre_id, etudid=None, REQUEST=None
|
||||
):
|
||||
"Form. saisie UE validée hors ScoDoc "
|
||||
"Form. saisie UE validée hors ScoDoc"
|
||||
if not sco_permissions_check.can_validate_sem(formsemestre_id):
|
||||
return scu.confirm_dialog(
|
||||
message="<p>Opération non autorisée pour %s</h2>"
|
||||
|
31
scodoc.py
31
scodoc.py
@ -6,7 +6,6 @@
|
||||
|
||||
"""
|
||||
|
||||
|
||||
from __future__ import print_function
|
||||
|
||||
import os
|
||||
@ -19,6 +18,7 @@ from flask.cli import with_appcontext
|
||||
from app import create_app, cli, db
|
||||
|
||||
from app.auth.models import User, Role, UserRole
|
||||
from app.scodoc.notesdb import set_sco_dept
|
||||
from app.views import notes, scolar, absences
|
||||
import app.utils as utils
|
||||
|
||||
@ -152,10 +152,7 @@ def user_password(username, password=None): # user-password
|
||||
@click.argument("dept")
|
||||
def sco_delete_dept(dept): # sco-delete-dept
|
||||
"Delete existing departement"
|
||||
if os.getuid() != 0:
|
||||
sys.stderr.write("sco_delete_dept: must be run by root\n")
|
||||
return 1
|
||||
if os.system('cd tools && ./delete_dept.sh -n "{}"'.format(dept)):
|
||||
if os.system('tools/delete_dept.sh -n "{}"'.format(dept)):
|
||||
sys.stderr.write("error deleting dept " + dept)
|
||||
return 1
|
||||
return 0
|
||||
@ -165,10 +162,7 @@ def sco_delete_dept(dept): # sco-delete-dept
|
||||
@click.argument("dept")
|
||||
def sco_create_dept(dept): # sco-create-dept
|
||||
"Create new departement"
|
||||
if os.getuid() != 0:
|
||||
sys.stderr.write("sco_create_dept: must be run by root\n")
|
||||
return 1
|
||||
if os.system(f'cd tools && ./create_dept.sh -n "{dept}"'):
|
||||
if os.system(f'tools/create_dept.sh -n "{dept}"'):
|
||||
sys.stderr.write(f"error creating dept {dept}\n")
|
||||
return 1
|
||||
return 0
|
||||
@ -216,3 +210,22 @@ def clear_cache(): # clear-cache
|
||||
r = redis.Redis()
|
||||
r.flushall()
|
||||
click.echo("Redis caches flushed.")
|
||||
|
||||
|
||||
@app.cli.command()
|
||||
@click.argument("xml_file")
|
||||
@click.argument("dept")
|
||||
def import_xml(xml_file, dept):
|
||||
import flask_login
|
||||
from flask_login import login_user, logout_user, current_user
|
||||
from app.scodoc.notesdb import close_dept_connection, open_dept_connection
|
||||
from app.scodoc.sco_formations import formation_import_xml
|
||||
|
||||
with app.test_request_context():
|
||||
u = User.query.first()
|
||||
flask_login.login_user(u)
|
||||
click.echo("Importing {}".format(xml_file))
|
||||
set_sco_dept(dept)
|
||||
doc = open(xml_file).read()
|
||||
formation_import_xml(None, doc)
|
||||
click.echo("Done")
|
||||
|
@ -1,73 +0,0 @@
|
||||
import sco_formations
|
||||
import random
|
||||
|
||||
# La variable context est définie par le script de lancement
|
||||
# l'affecte ainsi pour évietr les warnins pylint:
|
||||
context = context # pylint: disable=undefined-variable
|
||||
REQUEST = REQUEST # pylint: disable=undefined-variable
|
||||
import scotests.sco_fake_gen as sco_fake_gen # pylint: disable=import-error
|
||||
import sco_moduleimpl
|
||||
|
||||
G = sco_fake_gen.ScoFake(context.Notes)
|
||||
G.verbose = False
|
||||
|
||||
file = open("scotests/export_formation1.xml")
|
||||
doc = file.read()
|
||||
file.close()
|
||||
|
||||
|
||||
# --- Création de la formation
|
||||
|
||||
f = sco_formations.formation_import_xml(doc=doc, context=context.Notes)
|
||||
|
||||
# --- Création des semestres
|
||||
|
||||
sem1 = G.create_formsemestre(
|
||||
formation_id=f[0],
|
||||
semestre_id=1,
|
||||
date_debut="01/09/2020",
|
||||
date_fin="01/02/2021",
|
||||
)
|
||||
|
||||
sem3 = G.create_formsemestre(
|
||||
formation_id=f[0],
|
||||
semestre_id=3,
|
||||
date_debut="01/09/2020",
|
||||
date_fin="01/02/2021",
|
||||
)
|
||||
|
||||
sem2 = G.create_formsemestre(
|
||||
formation_id=f[0],
|
||||
semestre_id=2,
|
||||
date_debut="02/02/2021",
|
||||
date_fin="01/06/2021",
|
||||
)
|
||||
|
||||
sem4 = G.create_formsemestre(
|
||||
formation_id=f[0],
|
||||
semestre_id=4,
|
||||
date_debut="02/02/2021",
|
||||
date_fin="01/06/2021",
|
||||
)
|
||||
|
||||
|
||||
# --- Implémentation des modules
|
||||
|
||||
li_module = context.Notes.do_module_list()
|
||||
mods_imp = []
|
||||
for mod in li_module:
|
||||
if mod["semestre_id"] == 1:
|
||||
formsemestre_id = sem1["formsemestre_id"]
|
||||
elif mod["semestre_id"] == 2:
|
||||
formsemestre_id = sem2["formsemestre_id"]
|
||||
elif mod["semestre_id"] == 3:
|
||||
formsemestre_id = sem3["formsemestre_id"]
|
||||
else:
|
||||
formsemestre_id = sem4["formsemestre_id"]
|
||||
|
||||
mi = G.create_moduleimpl(
|
||||
module_id=mod["module_id"],
|
||||
formsemestre_id=formsemestre_id,
|
||||
responsable_id="bach",
|
||||
)
|
||||
mods_imp.append(mi)
|
@ -30,11 +30,18 @@ def test_client():
|
||||
db.create_all()
|
||||
Role.insert_roles()
|
||||
u = User(user_name="admin")
|
||||
admin_role = Role.query.filter_by(name="SuperAdmin").first()
|
||||
u.add_role(admin_role, "TEST00")
|
||||
super_admin_role = Role.query.filter_by(name="SuperAdmin").first()
|
||||
u.add_role(super_admin_role, "TEST00")
|
||||
# u.set_password("admin")
|
||||
login_user(u)
|
||||
# db.session.add(u)
|
||||
# Vérifie que l'utilisateur bach existe
|
||||
u = User.query.filter_by(user_name="bach").first()
|
||||
if u is None:
|
||||
u = User(user_name="bach")
|
||||
if not "Admin" in {r.name for r in u.roles}:
|
||||
admin_role = Role.query.filter_by(name="Admin").first()
|
||||
u.add_role(admin_role, "TEST00")
|
||||
db.session.add(u)
|
||||
ndb.set_sco_dept("TEST00") # set db connection
|
||||
truncate_database() # erase tables
|
||||
yield client
|
||||
|
205
tests/scenarios/export_formation1.xml
Executable file
205
tests/scenarios/export_formation1.xml
Executable file
@ -0,0 +1,205 @@
|
||||
<formation acronyme="DUT Info" code_specialite="" type_parcours="100" titre_officiel="DUT Informatique" formation_code="FCOD2" version="1" titre="DUT Informatique" formation_id="FORM234">
|
||||
<ue acronyme="UE11" coefficient="0.0" is_external="0" code_apogee="" ue_code="UE11" numero="1" titre="Base de l'informatique" type="0">
|
||||
<matiere titre="Architecture matérielle - Systèmes d’exploitation - Réseaux" numero="1">
|
||||
<module coefficient="2.0" code="M1101" code_apogee="" ects="" heures_tp="30.0" numero="1" abbrev="" heures_cours="10.0" module_type="0" titre="Introduction aux systèmes informatiques" semestre_id="1" heures_td="20.0" />
|
||||
</matiere>
|
||||
<matiere titre="Algorithmique - Programmation - Langages" numero="2">
|
||||
<module coefficient="2.0" code="M1102" code_apogee="" ects="" heures_tp="30.0" numero="10" abbrev="Algorithmique" heures_cours="10.0" module_type="0" titre="Introduction à l’algorithmique et à la programmation" semestre_id="1" heures_td="20.0" />
|
||||
</matiere>
|
||||
<matiere titre="Algorithmique - Programmation - Langages Avancé" numero="3">
|
||||
<module coefficient="2.0" code="M1103" code_apogee="" ects="" heures_tp="20.0" numero="3" abbrev="Structure de données" heures_cours="10.0" module_type="0" titre="Structure de données et algorithmes fondamentaux" semestre_id="1" heures_td="15.0" />
|
||||
</matiere>
|
||||
<matiere titre="Systèmes de gestion de bases de données" numero="4">
|
||||
<module coefficient="3.0" code="M1104" code_apogee="" ects="" heures_tp="25.0" numero="4" abbrev="BDD" heures_cours="10.0" module_type="0" titre="Introduction aux bases de données" semestre_id="1" heures_td="25.0" />
|
||||
</matiere>
|
||||
<matiere titre="Web - Internet - Mobilité Expression - Communication" numero="5">
|
||||
<module coefficient="2.0" code="M1105" code_apogee="" ects="" heures_tp="25.0" numero="5" abbrev="CDIN" heures_cours="0.0" module_type="0" titre="Conception de documents et d’interfaces numériques" semestre_id="1" heures_td="20.0" />
|
||||
</matiere>
|
||||
<matiere titre="Projets tutorés" numero="6">
|
||||
<module coefficient="3.0" code="M1106" code_apogee="" ects="" heures_tp="0.0" numero="6" abbrev="Projet" heures_cours="0.0" module_type="0" titre="Projet tutoré : découverte" semestre_id="1" heures_td="0.0" />
|
||||
</matiere>
|
||||
</ue>
|
||||
<ue acronyme="UE21" coefficient="0.0" is_external="0" code_apogee="" ue_code="UE21" numero="1" titre="Informatique approfondie" type="0">
|
||||
<matiere titre="Architecture matérielle - Systèmes d’exploitation - Réseaux" numero="1">
|
||||
<module coefficient="2.0" code="M2101" code_apogee="" ects="" heures_tp="12.0" numero="10" abbrev="" heures_cours="8.0" module_type="0" titre="Architecture et Programmation des mécanismes de base d’un système informatique" semestre_id="2" heures_td="10.0" />
|
||||
</matiere>
|
||||
<matiere titre="Architecture matérielle - Systèmes d’exploitation - Réseaux avancé" numero="2">
|
||||
<module coefficient="2.0" code="M2102" code_apogee="" ects="" heures_tp="12.0" numero="10" abbrev="" heures_cours="8.0" module_type="0" titre="Architecture des réseaux" semestre_id="2" heures_td="10.0" />
|
||||
</matiere>
|
||||
<matiere titre="Algorithmique - Programmation - Langages Analyse, conception et développement d’applications" numero="3">
|
||||
<module coefficient="2.0" code="M2103" code_apogee="" ects="" heures_tp="30.0" numero="10" abbrev="" heures_cours="10.0" module_type="0" titre="Bases de la programmation orientée objet" semestre_id="2" heures_td="20.0" />
|
||||
</matiere>
|
||||
<matiere titre="Analyse, conception et développement d’applications" numero="4">
|
||||
<module coefficient="2.0" code="M2104" code_apogee="" ects="" heures_tp="20.0" numero="10" abbrev="COO" heures_cours="10.0" module_type="0" titre="Bases de la conception orientée objet" semestre_id="2" heures_td="15.0" />
|
||||
</matiere>
|
||||
<matiere titre="Interface homme-machine" numero="5">
|
||||
<module coefficient="2.0" code="M2105" code_apogee="" ects="" heures_tp="20.0" numero="10" abbrev="" heures_cours="10.0" module_type="0" titre="Introduction aux interfaces homme-machine" semestre_id="2" heures_td="15.0" />
|
||||
</matiere>
|
||||
<matiere titre="Systèmes de gestion de bases de données" numero="6">
|
||||
<module coefficient="2.0" code="M2106" code_apogee="" ects="" heures_tp="20.0" numero="10" abbrev="" heures_cours="10.0" module_type="0" titre="Programmation et administration des bases de données" semestre_id="2" heures_td="15.0" />
|
||||
</matiere>
|
||||
<matiere titre="Projets tutorés" numero="7">
|
||||
<module coefficient="3.0" code="M2107" code_apogee="" ects="" heures_tp="0.0" numero="10" abbrev="" heures_cours="0.0" module_type="0" titre="Projet tutoré : Description et planification de projet" semestre_id="2" heures_td="0.0" />
|
||||
</matiere>
|
||||
</ue>
|
||||
<ue acronyme="UE31" coefficient="0.0" is_external="0" code_apogee="" ue_code="UCOD5" numero="1" titre="Informatique avancée" type="0">
|
||||
<matiere titre="Architectures matérielles - Systèmes d’exploitation - Réseaux" numero="1">
|
||||
<module coefficient="2.0" code="M3101" code_apogee="" ects="" heures_tp="16.0" numero="10" abbrev="" heures_cours="15.0" module_type="0" titre="Principes des systèmes d’exploitation" semestre_id="3" heures_td="14.0" />
|
||||
</matiere>
|
||||
<matiere titre="Architectures matérielles - Systèmes d’exploitation, Réseaux" numero="2">
|
||||
<module coefficient="2.0" code="M3102" code_apogee="" ects="" heures_tp="12.0" numero="10" abbrev="" heures_cours="8.0" module_type="0" titre="Services réseaux" semestre_id="3" heures_td="10.0" />
|
||||
</matiere>
|
||||
<matiere titre="Algorithmique - Programmation - Langages avancé" numero="3">
|
||||
<module coefficient="2.0" code="M3103" code_apogee="" ects="" heures_tp="12.0" numero="10" abbrev="" heures_cours="8.0" module_type="0" titre="Algorithmique avancée" semestre_id="3" heures_td="10.0" />
|
||||
</matiere>
|
||||
<matiere titre="Web - Internet - Mobilité" numero="4">
|
||||
<module coefficient="2.0" code="M3104" code_apogee="" ects="" heures_tp="16.0" numero="10" abbrev="" heures_cours="15.0" module_type="0" titre="Programmation Web côté serveur" semestre_id="3" heures_td="14.0" />
|
||||
</matiere>
|
||||
<matiere titre="Analyse, conception et développement d’applications" numero="5">
|
||||
<module coefficient="16.0" code="M3105" code_apogee="" ects="" heures_tp="14.0" numero="10" abbrev="" heures_cours="0.0" module_type="0" titre="Conception et programmation objet avancées" semestre_id="3" heures_td="15.0" />
|
||||
</matiere>
|
||||
<matiere titre="Systèmes de gestion de bases de données" numero="6">
|
||||
<module coefficient="2.0" code="M3106C" code_apogee="" ects="" heures_tp="12.0" numero="10" abbrev="" heures_cours="8.0" module_type="0" titre="Bases de données avancées" semestre_id="3" heures_td="10.0" />
|
||||
</matiere>
|
||||
<matiere titre="Malus" numero="16">
|
||||
<module coefficient="0.0" code="MALUS1" code_apogee="" ects="" heures_tp="0.0" numero="0" abbrev="" heures_cours="0.0" module_type="1" titre="" semestre_id="3" heures_td="0.0" />
|
||||
</matiere>
|
||||
</ue>
|
||||
<ue acronyme="UE41" coefficient="0.0" is_external="0" code_apogee="" ue_code="UCOD8" numero="1" titre="Compléments en informatique" type="0">
|
||||
<matiere titre="Architectures matérielles - Systèmes d’exploitation - Réseaux" numero="1">
|
||||
<module coefficient="2.0" code="M4101C" code_apogee="" ects="" heures_tp="12.0" numero="10" abbrev="" heures_cours="8.0" module_type="0" titre="Administration système et réseau" semestre_id="4" heures_td="10.0" />
|
||||
</matiere>
|
||||
<matiere titre="Architectures matérielles - Systèmes d’exploitation – Réseaux Analyse, conception et développement d’applications" numero="2">
|
||||
<module coefficient="2.0" code="M4102C" code_apogee="" ects="" heures_tp="12.0" numero="10" abbrev="" heures_cours="8.0" module_type="0" titre="Programmation répartie" semestre_id="4" heures_td="10.0" />
|
||||
</matiere>
|
||||
<matiere titre="Web – Internet - Mobilité" numero="3">
|
||||
<module coefficient="2.0" code="M4103C" code_apogee="" ects="" heures_tp="12.0" numero="10" abbrev="" heures_cours="8.0" module_type="0" titre="Programmation Web – client riche" semestre_id="4" heures_td="10.0" />
|
||||
</matiere>
|
||||
<matiere titre="Web - Internet - Mobilité - Mobile" numero="4">
|
||||
<module coefficient="3.0" code="M4104C" code_apogee="" ects="" heures_tp="12.0" numero="10" abbrev="" heures_cours="8.0" module_type="0" titre="Conception et développement d’applications mobiles" semestre_id="4" heures_td="10.0" />
|
||||
</matiere>
|
||||
<matiere titre="Analyse, conception et développement d’applications" numero="5">
|
||||
<module coefficient="2.0" code="M4105C" code_apogee="" ects="" heures_tp="12.0" numero="10" abbrev="" heures_cours="8.0" module_type="0" titre="Compléments d’informatique en vue d’une insertion immédiate" semestre_id="4" heures_td="10.0" />
|
||||
</matiere>
|
||||
<matiere titre="Projets tutorés" numero="6">
|
||||
<module coefficient="3.0" code="M4106" code_apogee="" ects="" heures_tp="0.0" numero="10" abbrev="" heures_cours="0.0" module_type="0" titre="Projet tutoré – Compléments" semestre_id="4" heures_td="0.0" />
|
||||
</matiere>
|
||||
<matiere titre="Malus" numero="16">
|
||||
<module coefficient="0.0" code="MALUS1" code_apogee="" ects="" heures_tp="0.0" numero="0" abbrev="" heures_cours="0.0" module_type="1" titre="" semestre_id="4" heures_td="0.0" />
|
||||
</matiere>
|
||||
</ue>
|
||||
<ue acronyme="UE12" coefficient="0.0" is_external="0" code_apogee="" ue_code="UE12" numero="2" titre="Bases de culture scientifique, sociale et humaine" type="0">
|
||||
<matiere titre="Mathématiques" numero="1">
|
||||
<module coefficient="2.0" code="M1201" code_apogee="" ects="" heures_tp="17.0" numero="1" abbrev="" heures_cours="10.0" module_type="0" titre="Mathématiques discrètes" semestre_id="1" heures_td="18.0" />
|
||||
</matiere>
|
||||
<matiere titre="Mathématiques avancées" numero="2">
|
||||
<module coefficient="2.0" code="M1202" code_apogee="" ects="" heures_tp="12.0" numero="10" abbrev="" heures_cours="6.0" module_type="0" titre="Algèbre linéaire" semestre_id="1" heures_td="12.0" />
|
||||
</matiere>
|
||||
<matiere titre="Économie - Gestion - Organisation - Droit" numero="3">
|
||||
<module coefficient="2.0" code="M1203" code_apogee="" ects="" heures_tp="10.0" numero="10" abbrev="" heures_cours="10.0" module_type="0" titre="Environnement économique" semestre_id="1" heures_td="10.0" />
|
||||
</matiere>
|
||||
<matiere titre="Organisation" numero="4">
|
||||
<module coefficient="1.0" code="M1204" code_apogee="" ects="" heures_tp="15.0" numero="10" abbrev="" heures_cours="10.0" module_type="0" titre="Fonctionnement des organisations" semestre_id="1" heures_td="20.0" />
|
||||
</matiere>
|
||||
<matiere titre="Expression - Communication" numero="5">
|
||||
<module coefficient="2.0" code="M1205" code_apogee="" ects="" heures_tp="15.0" numero="10" abbrev="" heures_cours="0.0" module_type="0" titre="Fondamentaux de la communication" semestre_id="1" heures_td="15.0" />
|
||||
</matiere>
|
||||
<matiere titre="Anglais" numero="6">
|
||||
<module coefficient="2.0" code="M1206" code_apogee="" ects="" heures_tp="15.0" numero="10" abbrev="" heures_cours="0.0" module_type="0" titre="Anglais et Informatique" semestre_id="1" heures_td="15.0" />
|
||||
</matiere>
|
||||
<matiere titre="PPP Expression - Communication" numero="7">
|
||||
<module coefficient="1.0" code="M1207" code_apogee="" ects="" heures_tp="10.0" numero="10" abbrev="" heures_cours="0.0" module_type="0" titre="Connaître le monde professionnel" semestre_id="1" heures_td="10.0" />
|
||||
</matiere>
|
||||
<matiere titre="Malus" numero="17">
|
||||
<module coefficient="0.0" code="MALUS2" code_apogee="" ects="" heures_tp="0.0" numero="0" abbrev="" heures_cours="0.0" module_type="1" titre="" semestre_id="1" heures_td="0.0" />
|
||||
</matiere>
|
||||
</ue>
|
||||
<ue acronyme="UE22" coefficient="0.0" is_external="0" code_apogee="" ue_code="UCOD4" numero="2" titre="Approfondissements en culture scientifique, sociale et humaine" type="0">
|
||||
<matiere titre="Mathématiques" numero="1">
|
||||
<module coefficient="2.0" code="M2201" code_apogee="" ects="" heures_tp="18.0" numero="10" abbrev="" heures_cours="11.0" module_type="0" titre="Graphes et langages" semestre_id="2" heures_td="16.0" />
|
||||
</matiere>
|
||||
<matiere titre="Mathématiques avancées" numero="2">
|
||||
<module coefficient="2.0" code="M2202" code_apogee="" ects="" heures_tp="10.0" numero="10" abbrev="" heures_cours="8.0" module_type="0" titre="Analyse et méthodes numériques" semestre_id="2" heures_td="12.0" />
|
||||
</matiere>
|
||||
<matiere titre="Économie - Gestion - Droit - Organisation" numero="3">
|
||||
<module coefficient="2.0" code="M2203" code_apogee="" ects="" heures_tp="15.0" numero="10" abbrev="" heures_cours="12.0" module_type="0" titre="Environnement comptable, financier, juridique et social" semestre_id="2" heures_td="18.0" />
|
||||
</matiere>
|
||||
<matiere titre="Économie - Gestion - Organisation - Droit Analyse, conception et développement d’applications" numero="4">
|
||||
<module coefficient="2.0" code="M2204" code_apogee="" ects="" heures_tp="10.0" numero="10" abbrev="" heures_cours="8.0" module_type="0" titre="Gestion de projet informatique" semestre_id="2" heures_td="12.0" />
|
||||
</matiere>
|
||||
<matiere titre="Expression - Communication" numero="5">
|
||||
<module coefficient="1.0" code="M2205" code_apogee="" ects="" heures_tp="15.0" numero="10" abbrev="" heures_cours="0.0" module_type="0" titre="Communication, information et argumentation" semestre_id="2" heures_td="15.0" />
|
||||
</matiere>
|
||||
<matiere titre="Anglais" numero="6">
|
||||
<module coefficient="2.0" code="M2206" code_apogee="" ects="" heures_tp="22.0" numero="10" abbrev="" heures_cours="0.0" module_type="0" titre="Communiquer en anglais" semestre_id="2" heures_td="23.0" />
|
||||
</matiere>
|
||||
<matiere titre="PPP" numero="7">
|
||||
<module coefficient="1.0" code="M2207" code_apogee="" ects="" heures_tp="10.0" numero="10" abbrev="" heures_cours="0.0" module_type="0" titre="PPP - Identifier ses compétences" semestre_id="2" heures_td="10.0" />
|
||||
</matiere>
|
||||
<matiere titre="Malus" numero="17">
|
||||
<module coefficient="0.0" code="MALUS2" code_apogee="" ects="" heures_tp="0.0" numero="0" abbrev="" heures_cours="0.0" module_type="1" titre="" semestre_id="2" heures_td="0.0" />
|
||||
</matiere>
|
||||
</ue>
|
||||
<ue acronyme="UE32" coefficient="0.0" is_external="0" code_apogee="" ue_code="UCOD6" numero="2" titre="Culture scientifique, sociale et humaine avancées" type="0">
|
||||
<matiere titre="Mathématiques" numero="1">
|
||||
<module coefficient="2.0" code="M3201" code_apogee="" ects="" heures_tp="14.0" numero="10" abbrev="" heures_cours="15.0" module_type="0" titre="Probabilités et statistique" semestre_id="3" heures_td="16.0" />
|
||||
</matiere>
|
||||
<matiere titre="Mathématiques avancées" numero="2">
|
||||
<module coefficient="2.0" code="M3202C" code_apogee="" ects="" heures_tp="14.0" numero="10" abbrev="" heures_cours="0.0" module_type="0" titre="Modélisations mathématiques" semestre_id="3" heures_td="16.0" />
|
||||
</matiere>
|
||||
<matiere titre="Économie - Gestion - Organisation - Droit" numero="3">
|
||||
<module coefficient="2.0" code="M3203" code_apogee="" ects="" heures_tp="10.0" numero="10" abbrev="" heures_cours="10.0" module_type="0" titre="Droit des technologies de l’information et de la communication" semestre_id="3" heures_td="10.0" />
|
||||
</matiere>
|
||||
<matiere titre="Gestion" numero="4">
|
||||
<module coefficient="2.0" code="M3204" code_apogee="" ects="" heures_tp="15.0" numero="10" abbrev="" heures_cours="15.0" module_type="0" titre="Gestion des systèmes d’information" semestre_id="3" heures_td="15.0" />
|
||||
</matiere>
|
||||
<matiere titre="Expression - Communication" numero="5">
|
||||
<module coefficient="2.0" code="M3205" code_apogee="" ects="" heures_tp="15.0" numero="10" abbrev="" heures_cours="0.0" module_type="0" titre="Communication professionnelle" semestre_id="3" heures_td="15.0" />
|
||||
</matiere>
|
||||
<matiere titre="Anglais" numero="6">
|
||||
<module coefficient="2.0" code="M3206" code_apogee="" ects="" heures_tp="22.0" numero="10" abbrev="" heures_cours="0.0" module_type="0" titre="Collaborer en anglais" semestre_id="3" heures_td="23.0" />
|
||||
</matiere>
|
||||
<matiere titre="Malus" numero="16">
|
||||
<module coefficient="0.0" code="MALUS2" code_apogee="" ects="" heures_tp="0.0" numero="0" abbrev="" heures_cours="0.0" module_type="1" titre="" semestre_id="3" heures_td="0.0" />
|
||||
</matiere>
|
||||
</ue>
|
||||
<ue acronyme="UE33" coefficient="0.0" is_external="0" code_apogee="" ue_code="UCOD7" numero="2" titre="Méthodologie et projets" type="0">
|
||||
<matiere titre="Analyse, conception et développement d’applications Économie - gestion - Organisation - Droit" numero="1">
|
||||
<module coefficient="2.0" code="M3301" code_apogee="" ects="" heures_tp="24.0" numero="10" abbrev="" heures_cours="14.0" module_type="0" titre="Méthodologie de la production d’applications" semestre_id="3" heures_td="22.0" />
|
||||
</matiere>
|
||||
<matiere titre="Projets tutorés" numero="2">
|
||||
<module coefficient="3.0" code="M3302" code_apogee="" ects="" heures_tp="0.0" numero="10" abbrev="" heures_cours="0.0" module_type="0" titre="Projet tutoré - Mise en situation professionnelle" semestre_id="3" heures_td="0.0" />
|
||||
</matiere>
|
||||
<matiere titre="PPP" numero="3">
|
||||
<module coefficient="2.0" code="M3303" code_apogee="" ects="" heures_tp="10.0" numero="10" abbrev="" heures_cours="0.0" module_type="0" titre="PPP - Préciser son projet" semestre_id="3" heures_td="10.0" />
|
||||
</matiere>
|
||||
<matiere titre="Malus" numero="13">
|
||||
<module coefficient="0.0" code="MALUS2" code_apogee="" ects="" heures_tp="0.0" numero="0" abbrev="" heures_cours="0.0" module_type="1" titre="" semestre_id="3" heures_td="0.0" />
|
||||
</matiere>
|
||||
</ue>
|
||||
<ue acronyme="UE42" coefficient="0.0" is_external="0" code_apogee="" ue_code="UCOD9" numero="2" titre="Compléments de culture scientifique, sociale et humaine" type="0">
|
||||
<matiere titre="Économie - Gestion - Organisation - Droit" numero="1">
|
||||
<module coefficient="2.0" code="M4201C" code_apogee="" ects="" heures_tp="10.0" numero="10" abbrev="" heures_cours="8.0" module_type="0" titre="Ateliers de création d’entreprise" semestre_id="4" heures_td="12.0" />
|
||||
</matiere>
|
||||
<matiere titre="Mathématiques" numero="2">
|
||||
<module coefficient="2.0" code="M4202C" code_apogee="" ects="" heures_tp="10.0" numero="10" abbrev="" heures_cours="8.0" module_type="0" titre="Introduction à la recherche opérationnelle et aide à la décision" semestre_id="4" heures_td="12.0" />
|
||||
</matiere>
|
||||
<matiere titre="Expression – Communication" numero="3">
|
||||
<module coefficient="2.0" code="M4203" code_apogee="" ects="" heures_tp="15.0" numero="10" abbrev="" heures_cours="0.0" module_type="0" titre="Communication dans les organisations" semestre_id="4" heures_td="15.0" />
|
||||
</matiere>
|
||||
<matiere titre="Anglais" numero="4">
|
||||
<module coefficient="2.0" code="M4204" code_apogee="" ects="" heures_tp="15.0" numero="10" abbrev="" heures_cours="0.0" module_type="0" titre="Travailler en anglais" semestre_id="4" heures_td="15.0" />
|
||||
</matiere>
|
||||
<matiere titre="Malus" numero="14">
|
||||
<module coefficient="0.0" code="MALUS2" code_apogee="" ects="" heures_tp="0.0" numero="0" abbrev="" heures_cours="0.0" module_type="1" titre="" semestre_id="4" heures_td="0.0" />
|
||||
</matiere>
|
||||
</ue>
|
||||
<ue acronyme="UE43" coefficient="0.0" is_external="0" code_apogee="" ue_code="UCOD10" numero="3" titre="Mise en situation professionnelle" type="0">
|
||||
<matiere titre="STAGE" numero="1">
|
||||
<module coefficient="12.0" code="M4301" code_apogee="" ects="" heures_tp="0.0" numero="10" abbrev="" heures_cours="0.0" module_type="0" titre="Stage professionnel" semestre_id="4" heures_td="0.0" />
|
||||
</matiere>
|
||||
<matiere titre="Malus" numero="11">
|
||||
<module coefficient="0.0" code="MALUS3" code_apogee="" ects="" heures_tp="0.0" numero="0" abbrev="" heures_cours="0.0" module_type="1" titre="" semestre_id="4" heures_td="0.0" />
|
||||
</matiere>
|
||||
</ue>
|
||||
</formation>
|
61
tests/scenarios/test_scenario1_formation.py
Normal file
61
tests/scenarios/test_scenario1_formation.py
Normal file
@ -0,0 +1,61 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
Scenario: préparation base de données pour tests Selenium
|
||||
|
||||
S'utilise comme un test avec pytest, mais n'est pas un test !
|
||||
Modifie la base de données du département TEST00
|
||||
|
||||
Usage: pytest tests/scenarios/test_scenario1_formation.py
|
||||
"""
|
||||
# code écrit par Fares Amer, mai 2021 et porté sur ScoDoc 8 en août 2021
|
||||
|
||||
import random
|
||||
|
||||
from tests.unit import sco_fake_gen
|
||||
from app.scodoc import sco_edit_module
|
||||
from app.scodoc import sco_formations
|
||||
from app.scodoc import sco_moduleimpl
|
||||
|
||||
context = None # #context
|
||||
|
||||
|
||||
def test_scenario1(test_client):
|
||||
"""Applique "scenario 1"""
|
||||
G = sco_fake_gen.ScoFake(verbose=False)
|
||||
|
||||
# Lecture fichier XML local:
|
||||
with open("tests/unit/formation-exemple-1.xml") as f:
|
||||
doc = f.read()
|
||||
|
||||
# --- Création de la formation
|
||||
f = sco_formations.formation_import_xml(doc=doc, context=context)
|
||||
|
||||
# --- Création des semestres
|
||||
formation_id = f[0]
|
||||
# --- Mise en place de 4 semestres
|
||||
sems = [
|
||||
G.create_formsemestre(
|
||||
formation_id=formation_id,
|
||||
semestre_id=x[0],
|
||||
date_debut=x[1],
|
||||
date_fin=x[2],
|
||||
)
|
||||
for x in (
|
||||
(1, "01/09/2020", "01/02/2021"),
|
||||
(2, "02/02/2021", "01/06/2021"),
|
||||
(3, "01/09/2020", "01/02/2021"),
|
||||
(4, "02/02/2021", "01/06/2021"),
|
||||
)
|
||||
]
|
||||
|
||||
# --- Implémentation des modules
|
||||
modules = sco_edit_module.do_module_list(context, {"formation_id": formation_id})
|
||||
mods_imp = []
|
||||
for mod in modules:
|
||||
mi = G.create_moduleimpl(
|
||||
module_id=mod["module_id"],
|
||||
formsemestre_id=sems[mod["semestre_id"] - 1]["formsemestre_id"],
|
||||
responsable_id="bach",
|
||||
)
|
||||
mods_imp.append(mi)
|
@ -66,7 +66,7 @@ def logging_meth(func):
|
||||
|
||||
|
||||
class ScoFake(object):
|
||||
"""Helper for ScoSoc tests"""
|
||||
"""Helper for ScoDoc tests"""
|
||||
|
||||
def __init__(self, verbose=True):
|
||||
self.verbose = verbose
|
||||
|
@ -17,7 +17,7 @@ SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
|
||||
source "$SCRIPT_DIR/config.sh"
|
||||
source "$SCRIPT_DIR/utils.sh"
|
||||
|
||||
check_uid_root "$0"
|
||||
[ "$USER" = "$SCODOC_USER" ] || die "$0 must run as user $SCODOC_USER"
|
||||
|
||||
cd "$SCRIPT_DIR"
|
||||
|
||||
@ -61,19 +61,17 @@ then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# --- Ensure postgres user "scodoc" ($POSTGRES_USER) exists
|
||||
init_postgres_user
|
||||
|
||||
# ----------------------- Create Dept database
|
||||
su -c ./create_database.sh "$POSTGRES_SUPERUSER"
|
||||
# (créée en tant qu'utilisateur scodoc)
|
||||
./create_database.sh
|
||||
|
||||
# ----------------------- Initialize table database
|
||||
# POSTGRES_USER == regular unix user (scodoc)
|
||||
if [ "$interactive" = 1 ]
|
||||
then
|
||||
su -c ./initialize_database.sh "$POSTGRES_USER"
|
||||
./initialize_database.sh
|
||||
else
|
||||
su -c ./initialize_database.sh "$POSTGRES_USER" > /dev/null 2>&1
|
||||
./initialize_database.sh > /dev/null 2>&1
|
||||
fi
|
||||
|
||||
|
||||
@ -84,17 +82,10 @@ echo "dbname=${db_name}" > "$cfg_pathname"
|
||||
|
||||
if [ "$interactive" = 1 ]
|
||||
then
|
||||
# ----------------------- Force mise à jour
|
||||
echo -n "Voulez vous mettre a jour ScoDoc (tres recommande) ? (y/n) [y] "
|
||||
read -r ans
|
||||
if [ "$(norm_ans "$ans")" != 'N' ]
|
||||
then
|
||||
(cd "$SCODOC_DIR/tools" || terminate "no config directory"; ./upgrade.sh)
|
||||
fi
|
||||
# -----------------------
|
||||
echo
|
||||
echo " Departement $DEPT cree"
|
||||
echo
|
||||
echo " Attention: la base de donnees n'a pas de copies de sauvegarde"
|
||||
echo
|
||||
echo "(XXX section à revoir en ScoDoc 8.1)" # #sco8
|
||||
fi
|
||||
|
@ -19,7 +19,9 @@ SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
|
||||
source "$SCRIPT_DIR/config.sh"
|
||||
source "$SCRIPT_DIR/utils.sh"
|
||||
|
||||
check_uid_root "$0"
|
||||
# scodoc may now manage departments TODO To be fixed
|
||||
# check_uid_root "$0"
|
||||
|
||||
usage() {
|
||||
echo "$0 [-n DEPT]"
|
||||
echo "(default to interactive mode)"
|
||||
@ -57,15 +59,15 @@ cfg_pathname="${SCODOC_VAR_DIR}/config/depts/$DEPT".cfg
|
||||
|
||||
if [ -e "$cfg_pathname" ]
|
||||
then
|
||||
# arret de ScoDoc
|
||||
scodocctl stop
|
||||
# arret de ScoDoc (need root permissions so disabled for the moment TODO to be fixed)
|
||||
# scodocctl stop
|
||||
|
||||
# suppression de la base postgres
|
||||
db_name=$(sed '/^dbname=*/!d; s///;q' < "$cfg_pathname")
|
||||
if su -c "psql -lt" "$POSTGRES_SUPERUSER" | cut -d \| -f 1 | grep -wq "$db_name"
|
||||
if psql -lt | cut -d \| -f 1 | grep -wq "$db_name"
|
||||
then
|
||||
echo "Suppression de la base postgres $db_name ..."
|
||||
su -c "dropdb $db_name" "$POSTGRES_SUPERUSER" || terminate "ne peux supprimer base de donnees $db_name"
|
||||
dropdb $db_name || terminate "ne peux supprimer base de donnees $db_name"
|
||||
else
|
||||
echo "la base postgres $db_name n'existe pas."
|
||||
fi
|
||||
|
@ -105,6 +105,11 @@ then
|
||||
yes | ufw enable
|
||||
fi
|
||||
|
||||
# --- POSTGRESQL
|
||||
# --- Ensure postgres user "scodoc" ($POSTGRES_USER) exists
|
||||
init_postgres_user
|
||||
|
||||
|
||||
# --- XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX ---
|
||||
echo
|
||||
echo "WARNING: version ScoDoc8 expérimentale"
|
||||
|
Loading…
Reference in New Issue
Block a user