# -*- coding: utf-8 -*- """Test Logos Mise en place de l'environnement de test pour logos """ import os from pathlib import Path from shutil import copytree, rmtree, copy import pytest import app.scodoc.sco_utils as scu from app import db, Departement from app.auth.models import User, Role from config import TestConfig from scodoc import app from tests.conftest import test_client, RESOURCES_DIR LOGO_RESOURCES_DIR = os.path.join(RESOURCES_DIR, "test_logos") @pytest.fixture def create_dept(test_client): """Crée 3 départements: return departements object """ client = test_client dept1 = Departement(acronym="RT") dept2 = Departement(acronym="INFO") dept3 = Departement(acronym="GEA") db.session.add(dept1) db.session.add(dept2) db.session.add(dept3) db.session.commit() yield dept1, dept2, dept3 db.session.delete(dept1) db.session.delete(dept2) db.session.delete(dept3) db.session.commit() @pytest.fixture def create_logos(create_dept): """Crée les logos: ...logos --+-- logo_A.jpg +-- logo_C.jpg +-- logo_D.png +-- logo_E.jpg +-- logo_F.jpeg +-- logos_{d1} --+-- logo_A.jpg | +-- logo_B.jpg +-- logos_{d2} --+-- logo_A.jpg """ dept1, dept2, dept3 = create_dept dept1_id = dept1.id dept2_id = dept2.id FILE_LIST = ["logo_A.jpg", "logo_C.jpg", "logo_D.png", "logo_E.jpg", "logo_F.jpeg"] for filename in FILE_LIST: from_path = Path(LOGO_RESOURCES_DIR).joinpath(filename) to_path = Path(scu.SCODOC_LOGOS_DIR).joinpath(filename) copy(from_path.absolute(), to_path.absolute()) copytree( f"{LOGO_RESOURCES_DIR}/logos_1", f"{scu.SCODOC_LOGOS_DIR}/logos_{dept1_id}", ) copytree( f"{LOGO_RESOURCES_DIR}/logos_2", f"{scu.SCODOC_LOGOS_DIR}/logos_{dept2_id}", ) yield dept1, dept2, dept3 rmtree(f"{scu.SCODOC_LOGOS_DIR}/logos_{dept1_id}") rmtree(f"{scu.SCODOC_LOGOS_DIR}/logos_{dept2_id}") # rm files for filename in FILE_LIST: to_path = Path(scu.SCODOC_LOGOS_DIR).joinpath(filename) to_path.unlink() def get_token(user_name): with app.test_client() as client: response = client.post("/ScoDoc/api/tokens", auth=(user_name, user_name)) assert response.status_code == 200 token = response.json["token"] user = User.check_token(token) if token else None assert user.user_name == user_name app.logger.info(f"{user.user_name}: token obtained: {token}") return token @pytest.fixture def create_super_token(create_logos): dept1, dept2, dept3 = create_logos # change super_admin password # utilisateur mozart -> super user_name = "mozart" u = User.query.filter_by(user_name=user_name).first() if u is None: u = User(user_name=user_name) u.set_password(user_name) if "SuperAdmin" not in {r.name for r in u.roles}: super_role = Role.query.filter_by(name="SuperAdmin").first() u.add_role(super_role, None) db.session.add(u) db.session.commit() return dept1, dept2, dept3, get_token(u.user_name) @pytest.fixture def create_admin_token(create_logos): dept1, dept2, dept3 = create_logos # utilisateur bach -> admin user_name = "bach" u = User.query.filter_by(user_name=user_name).first() if u is None: u = User(user_name=user_name) u.set_password(user_name) if "Admin" not in {r.name for r in u.roles}: admin_role = Role.query.filter_by(name=user_name).first() u.add_role(admin_role, TestConfig.DEPT_TEST) db.session.add(u) db.session.commit() return dept1, dept2, dept3, get_token(u.user_name) @pytest.fixture def create_lambda_token(create_logos): dept1, dept2, dept3 = create_logos # utilisateur vivaldi -> lambda user_name = "vivaldi" u = User.query.filter_by(user_name=user_name).first() if u is None: u = User(user_name=user_name) u.set_password(user_name) db.session.add(u) db.session.commit() return dept1, dept2, dept3, get_token(user_name)