From 4619dd2708b25ce62276192078772f9a793934d5 Mon Sep 17 00:00:00 2001 From: Colin Maudry Date: Sun, 22 Feb 2026 18:39:31 +0100 Subject: [PATCH] =?UTF-8?q?Correction=20du=20t=C3=A9l=C3=A9chargemnent=20b?= =?UTF-8?q?ugg=C3=A9=20dans=20/tableau=20+=20test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyproject.toml | 4 +++- src/pages/acheteur.py | 3 ++- src/pages/tableau.py | 2 +- src/pages/titulaire.py | 3 ++- tests/conftest.py | 15 ++++++++++++++- tests/test_main.py | 29 +++++++++++++++++++++++++++++ 6 files changed, 51 insertions(+), 5 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 96a606a..342ff74 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -28,6 +28,7 @@ dev = [ "selenium", "webdriver-manager", "dash[testing]", + "fastexcel" ] [tool.pytest.ini_options] @@ -38,6 +39,7 @@ testpaths = [ "tests" ] env = [ - "DATA_FILE_PARQUET_PATH=tests/test.parquet" + "DATA_FILE_PARQUET_PATH=tests/test.parquet", + "DEVELOPMENT=true" ] addopts = "-p no:warnings" diff --git a/src/pages/acheteur.py b/src/pages/acheteur.py index 9e083c0..199c757 100644 --- a/src/pages/acheteur.py +++ b/src/pages/acheteur.py @@ -1,4 +1,5 @@ import datetime +from typing import Any import dash_bootstrap_components as dbc import polars as pl @@ -352,7 +353,7 @@ def get_top_titulaires(data): ) def download_acheteur_data( n_clicks, - data: [dict], + data: list[dict[str, Any]], acheteur_nom: str, annee: str, ): diff --git a/src/pages/tableau.py b/src/pages/tableau.py index 2bf295d..56fb9b8 100644 --- a/src/pages/tableau.py +++ b/src/pages/tableau.py @@ -326,7 +326,7 @@ def download_data(n_clicks, filter_query, sort_by, hidden_columns: list = None): if filter_query: lff = filter_table_data(lff, filter_query, "tab download") - if len(sort_by) > 0: + if sort_by and len(sort_by) > 0: lff = sort_table_data(lff, sort_by) def to_bytes(buffer): diff --git a/src/pages/titulaire.py b/src/pages/titulaire.py index 92ff313..b7e9001 100644 --- a/src/pages/titulaire.py +++ b/src/pages/titulaire.py @@ -1,4 +1,5 @@ import datetime +from typing import Any import dash_bootstrap_components as dbc import polars as pl @@ -366,7 +367,7 @@ def get_top_acheteurs(data): ) def download_titulaire_data( n_clicks, - data: [dict], + data: list[dict[str, Any]], titulaire_nom: str, annee: str, ): diff --git a/tests/conftest.py b/tests/conftest.py index 7531524..b14e0f8 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -43,8 +43,21 @@ def test_data(): pl.DataFrame(data).write_parquet("tests/test.parquet") yield path + if os.path.exists(path): + os.unlink(path) + print(path, "deleted") + def pytest_setup_options(): options = Options() - options.add_argument("--window-size=1200,800") + options.add_argument("--window-size=1200,1200 ") + options.add_experimental_option( + "prefs", + { + "download.default_directory": "/home/colin/git/decp.info", + "download.prompt_for_download": False, + "download.directory_upgrade": True, + "safebrowsing.enabled": True, + }, + ) return options diff --git a/tests/test_main.py b/tests/test_main.py index 453a806..1b8e7db 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -1,3 +1,4 @@ +import polars as pl from dash.testing.composite import DashComposite from selenium.webdriver import Keys from selenium.webdriver.common.by import By @@ -58,3 +59,31 @@ def test_002_filter_persistence(dash_duo: DashComposite): filter_input.send_keys(Keys.ENTER) filter_input = open_page_and_check_filter_input() assert filter_input.get_attribute("value") == "11" + + +def test_003_tableau_download(dash_duo: DashComposite): + from pages.acheteur import download_acheteur_data + from pages.tableau import download_data + from pages.titulaire import download_titulaire_data + from src.app import app + + # Juste pour instancier l'app + print(app.server.name) + + dicts = pl.read_parquet("tests/test.parquet").to_dicts() + + outputs = [ + download_data(1, "", [], None), + download_acheteur_data(1, dicts, "a1", "2025"), + download_titulaire_data(1, dicts, "t1", "2025"), + ] + for output in outputs: + assert isinstance(output, dict) + for f in ["content", "filename", "type", "base64"]: + assert f in output + assert isinstance(output["content"], str) and len(output["content"]) > 100 + assert isinstance(output["filename"], str) and output["filename"].startswith( + "decp_" + ) + assert output["type"] is None + assert output["base64"] is True