ScoDoc/tests/unit/test_logos.py

190 lines
6.3 KiB
Python

# -*- coding: utf-8 -*-
"""Test Logos
Utiliser comme:
pytest tests/unit/test_logos.py
"""
from pathlib import Path
from shutil import copy
import pytest
from _pytest.python_api import approx
import app
import app.scodoc.sco_utils as scu
from app.scodoc.sco_logos import (
find_logo,
Logo,
list_logos,
write_logo,
delete_logo,
)
from tests.unit.config_test_logos import create_dept, create_logos, LOGO_RESOURCES_DIR
def test_select_global_only(create_logos):
dept1, dept2, dept3 = create_logos
C_logo = app.scodoc.sco_logos.find_logo(logoname="C")
assert C_logo.filepath == f"{scu.SCODOC_LOGOS_DIR}/logo_C.jpg"
def test_select_local_only(create_logos):
dept1, dept2, dept3 = create_logos
B_logo = app.scodoc.sco_logos.find_logo(logoname="B", dept_id=dept1.id)
assert B_logo.filepath == f"{scu.SCODOC_LOGOS_DIR}/logos_{dept1.id}/logo_B.jpg"
def test_select_local_override_global(create_logos):
dept1, dept2, dept3 = create_logos
A1_logo = app.scodoc.sco_logos.find_logo(logoname="A", dept_id=dept1.id)
assert A1_logo.filepath == f"{scu.SCODOC_LOGOS_DIR}/logos_{dept1.id}/logo_A.jpg"
def test_select_global_with_strict(create_logos):
dept1, dept2, dept3 = create_logos
A_logo = app.scodoc.sco_logos.find_logo(logoname="A", dept_id=dept1.id, strict=True)
assert A_logo.filepath == f"{scu.SCODOC_LOGOS_DIR}/logos_{dept1.id}/logo_A.jpg"
def test_looks_for_non_existant_should_give_none(create_logos):
# search for a local non-existant logo returns None
dept1, dept2, dept3 = create_logos
no_logo = app.scodoc.sco_logos.find_logo(logoname="Z", dept_id=dept1.id)
assert no_logo is None
def test_looks_localy_for_a_global_should_give_none(create_logos):
# search for a local non-existant logo returns None
dept1, dept2, dept3 = create_logos
no_logo = app.scodoc.sco_logos.find_logo(
logoname="C", dept_id=dept1.id, strict=True
)
assert no_logo is None
def test_get_jpg_data(create_logos):
dept1, dept2, dept3 = create_logos
logo = find_logo("A", dept_id=None)
assert logo is not None
logo.select()
assert logo.logoname == "A"
assert logo.suffix == "jpg"
assert logo.filename == "A.jpg"
assert logo.size == (224, 131)
assert logo.mm == approx((9.38, 5.49), 0.1)
def test_get_png_without_data(create_logos):
dept1, dept2, dept3 = create_logos
logo = find_logo("D", dept_id=None)
assert logo is not None
logo.select()
assert logo.logoname == "D"
assert logo.suffix == "png"
assert logo.filename == "D.png"
assert logo.size == (140, 131)
assert logo.density is None
assert logo.mm is None
def test_delete_unique_global_jpg_logo(create_logos):
dept1, dept2, dept3 = create_logos
from_path = Path(LOGO_RESOURCES_DIR).joinpath("logo_A.jpg")
to_path = Path(scu.SCODOC_LOGOS_DIR).joinpath("logo_W.jpg")
copy(from_path.absolute(), to_path.absolute())
assert to_path.exists()
delete_logo(name="W")
assert not to_path.exists()
def test_delete_unique_local_jpg_logo(create_logos):
dept1, dept2, dept3 = create_logos
from_path = Path(LOGO_RESOURCES_DIR).joinpath("logo_A.jpg")
to_path = Path(scu.SCODOC_LOGOS_DIR).joinpath(f"logos_{dept1.id}", "logo_W.jpg")
copy(from_path.absolute(), to_path.absolute())
assert to_path.exists()
delete_logo(name="W", dept_id=dept1.id)
assert not to_path.exists()
def test_delete_multiple_local_jpg_logo(create_logos):
dept1, dept2, dept3 = create_logos
from_path_A = Path(LOGO_RESOURCES_DIR).joinpath("logo_A.jpg")
to_path_A = Path(scu.SCODOC_LOGOS_DIR).joinpath(f"logos_{dept1.id}", "logo_V.jpg")
from_path_B = Path(LOGO_RESOURCES_DIR).joinpath("logo_D.png")
to_path_B = Path(scu.SCODOC_LOGOS_DIR).joinpath(f"logos_{dept1.id}", "logo_V.png")
copy(from_path_A.absolute(), to_path_A.absolute())
copy(from_path_B.absolute(), to_path_B.absolute())
assert to_path_A.exists()
assert to_path_B.exists()
delete_logo(name="V", dept_id=dept1.id)
assert not to_path_A.exists()
assert not to_path_B.exists()
def test_create_global_jpg_logo(create_logos):
dept1, dept2, dept3 = create_logos
path = Path(f"{LOGO_RESOURCES_DIR}/logo_C.jpg")
stream = path.open("rb")
logo_path = Path(scu.SCODOC_LOGOS_DIR).joinpath("logo_X.jpg")
assert not logo_path.exists()
write_logo(stream, name="X") # create global logo
assert logo_path.exists()
logo_path.unlink(missing_ok=True)
def test_create_locale_jpg_logo(create_logos):
dept1, dept2, dept3 = create_logos
path = Path(f"{LOGO_RESOURCES_DIR}/logo_C.jpg")
stream = path.open("rb")
logo_path = Path(scu.SCODOC_LOGOS_DIR).joinpath(f"logos_{dept1.id}", "logo_Y.jpg")
assert not logo_path.exists()
write_logo(stream, name="Y", dept_id=dept1.id) # create global logo
assert logo_path.exists()
logo_path.unlink(missing_ok=True)
def test_create_jpg_instead_of_png_logo(create_logos):
dept1, dept2, dept3 = create_logos
# action
logo = Logo("D") # create global logo (replace logo_D.png)
path = Path(f"{LOGO_RESOURCES_DIR}/logo_C.jpg")
stream = path.open("rb")
logo.create(stream)
# test
created = Path(f"{scu.SCODOC_LOGOS_DIR}/logo_D.jpg")
removed = Path(f"{scu.SCODOC_LOGOS_DIR}/logo_D.png")
# file system check
assert created.exists()
assert not removed.exists()
# logo check
logo = find_logo("D")
assert logo is not None
assert logo.filepath == f"{scu.SCODOC_LOGOS_DIR}/logo_D.jpg" # created.absolute()
# restore initial state
original = Path(f"{LOGO_RESOURCES_DIR}/logo_D.png")
copy(original, removed)
created.unlink(missing_ok=True)
@pytest.mark.skip(
reason="il peut y avoir d'autres fichiers logos sur les serveurs de dev"
)
def test_list_logo(create_logos):
"""Vérifie que nos logos sont présents et que ce sont les seuls."""
dept1, dept2, dept3 = create_logos
logos = list_logos()
assert set(logos.keys()) == {dept1.id, dept2.id, None}
assert {"A", "C", "D", "E", "F", "header", "footer"}.issubset(
set(logos[None].keys())
)
rt = logos.get(dept1.id, None)
assert rt is not None
assert {"A", "B"}.issubset(set(rt.keys()))
info = logos.get(dept2.id, None)
assert info is not None
assert {"A"}.issubset(set(rt.keys()))
gea = logos.get(dept3.id, None)
assert gea is None