🧪 Ajout d'une suite de tests unitaires + CI #2

Merged
mat merged 15 commits from tests/add-test-suite into main 2026-07-04 07:46:22 +00:00
Owner

Ajout d'une suite de tests unitaires + CI

Le dépôt n'avait aucun test. Cette PR ajoute une suite de tests unitaires couvrant les 11 méthodes publiques de ComwattClient, plus une CI qui les exécute sur Forgejo et sur GitHub.

Tests

  • Harnais : pytest.ini (testpaths = tests, filterwarnings = error), requirements-dev.txt (deps de test épinglées : pytest, responses), tests/conftest.py (constante BASE_URL + fixture client).
  • 24 tests en 4 modules, chaque méthode ayant un cas succès et un cas erreur. HTTP entièrement bouchonné avec responses — aucun appel réseau.
    • test_authenticate.py — auth + hash SHA-256 exact du mot de passe, retour None.
    • test_user_and_sites.pyget_authenticated_user, get_sites.
    • test_aggregations.pyget_site_networks_ts_time_ago (les deux branches de aggregation_type), get_site_consumption_breakdown_time_ago, get_device_ts_time_ago.
    • test_devices.pyget_devices, get_device, put_device (corps JSON vérifié), switch_capacity (True/False).
  • Les tests vérifient le comportement réel (méthode, URL/chemin, params parsés, corps JSON, valeur de retour), pas juste « un mock a été appelé ».
  • Aucune modification du code de production. Un bug de message d'erreur existant (« Error retrieving sites » copié-collé sur des méthodes device) est documenté sans être figé (assertion sur le code de statut seul).

CI — deux fichiers (le modèle utilisé aussi dans agent-fleet.nvim)

Forgejo Actions ne lit que .forgejo/workflows/ dès que ce dossier existe (il ignore alors .github/workflows/), et il ne résout pas les refs d'actions courtes (actions/checkout@v4). D'où deux fichiers :

  • .forgejo/workflows/tests.yml — pour git.greil.fr. Utilise https://data.forgejo.org/actions/checkout@v4. L'image ubuntu-latest du runner fournit python3 mais pas pip, donc le job crée un virtualenv (python3-venv) pour amorcer pip (ce qui évite aussi le blocage PEP 668 de Debian), puis installe les deps et lance pytest.
  • .github/workflows/tests.yml — pour le miroir GitHub. Refs standard (actions/checkout@v4, actions/setup-python@v5), matrice Python 3.9→3.12, gardé par if: github.server_url == 'https://github.com'.

Vérification

  • Local : python -m pytest24 passed, sortie propre (validé aussi en conteneurs python:3.12 et debian:bookworm/py3.11).
  • CI Forgejo : verte sur push et pull_request.
## Ajout d'une suite de tests unitaires + CI Le dépôt n'avait **aucun test**. Cette PR ajoute une suite de tests unitaires couvrant les 11 méthodes publiques de `ComwattClient`, plus une CI qui les exécute sur Forgejo et sur GitHub. ### Tests - **Harnais** : `pytest.ini` (`testpaths = tests`, `filterwarnings = error`), `requirements-dev.txt` (deps de test épinglées : `pytest`, `responses`), `tests/conftest.py` (constante `BASE_URL` + fixture `client`). - **24 tests** en 4 modules, chaque méthode ayant un cas *succès* **et** un cas *erreur*. HTTP entièrement bouchonné avec `responses` — aucun appel réseau. - `test_authenticate.py` — auth + hash SHA-256 exact du mot de passe, retour `None`. - `test_user_and_sites.py` — `get_authenticated_user`, `get_sites`. - `test_aggregations.py` — `get_site_networks_ts_time_ago` (les deux branches de `aggregation_type`), `get_site_consumption_breakdown_time_ago`, `get_device_ts_time_ago`. - `test_devices.py` — `get_devices`, `get_device`, `put_device` (corps JSON vérifié), `switch_capacity` (`True`/`False`). - Les tests vérifient le **comportement réel** (méthode, URL/chemin, params parsés, corps JSON, valeur de retour), pas juste « un mock a été appelé ». - **Aucune modification du code de production.** Un bug de message d'erreur existant (« Error retrieving sites » copié-collé sur des méthodes device) est documenté sans être figé (assertion sur le code de statut seul). ### CI — deux fichiers (le modèle utilisé aussi dans `agent-fleet.nvim`) Forgejo Actions ne lit **que** `.forgejo/workflows/` dès que ce dossier existe (il ignore alors `.github/workflows/`), et il ne résout pas les refs d'actions courtes (`actions/checkout@v4`). D'où deux fichiers : - **`.forgejo/workflows/tests.yml`** — pour `git.greil.fr`. Utilise `https://data.forgejo.org/actions/checkout@v4`. L'image `ubuntu-latest` du runner fournit `python3` mais **pas `pip`**, donc le job crée un virtualenv (`python3-venv`) pour amorcer pip (ce qui évite aussi le blocage PEP 668 de Debian), puis installe les deps et lance `pytest`. - **`.github/workflows/tests.yml`** — pour le miroir GitHub. Refs standard (`actions/checkout@v4`, `actions/setup-python@v5`), matrice Python 3.9→3.12, gardé par `if: github.server_url == 'https://github.com'`. ### Vérification - Local : `python -m pytest` → **24 passed**, sortie propre (validé aussi en conteneurs `python:3.12` et `debian:bookworm`/py3.11). - CI Forgejo : **verte** sur `push` et `pull_request`.
- pytest.ini: testpaths=tests, filterwarnings=error for pristine output
- requirements-dev.txt: pytest==9.1.1, responses==0.26.2
- tests/conftest.py: client fixture + BASE_URL constant (shared convention)
- tests/test_authenticate.py: success and error tests for authenticate(),
  verifying request method/URL/body and return value against mocked HTTP
👷 Add CI workflow to run test suite on push/PR
Some checks failed
Tests / test (3.10) (push) Failing after 9s
Tests / test (3.11) (push) Failing after 6s
Tests / test (3.12) (push) Failing after 6s
Tests / test (3.9) (push) Failing after 6s
Tests / test (3.10) (pull_request) Failing after 6s
Tests / test (3.11) (pull_request) Failing after 6s
Tests / test (3.12) (pull_request) Failing after 6s
Tests / test (3.9) (pull_request) Failing after 6s
795cbaa3cf
👷 Fix CI: Forgejo needs full-URL action refs
Some checks failed
Tests / test (3.10) (push) Failing after 6s
Tests / test (3.11) (push) Failing after 6s
Tests / test (3.12) (push) Failing after 6s
Tests / test (3.9) (push) Failing after 6s
Tests / test (3.10) (pull_request) Failing after 6s
Tests / test (3.11) (pull_request) Failing after 6s
Tests / test (3.12) (pull_request) Failing after 6s
Tests / test (3.9) (pull_request) Failing after 6s
bf63b8fa31
Forgejo does not resolve bare 'actions/checkout@v4' refs on this instance,
so the job failed at setup. Add .forgejo/workflows/tests.yml using
https://data.forgejo.org/actions/* refs, and guard the .github one with
'if: github.server_url == ...' so Forgejo (which also reads .github/workflows)
skips it and only GitHub runs it.
🔧 CI diagnostic: distinct job names, simplify Forgejo workflow
Some checks failed
Tests / forgejo-pytest (push) Failing after 6s
Tests / forgejo-pytest (pull_request) Failing after 6s
1bf39a24f0
Rename jobs (forgejo-pytest / github-pytest) to identify which workflow
Forgejo actually executes, and reduce the Forgejo job to a single Python
version to isolate the planning failure.
🔧 CI diagnostic: drop setup-python, use image python3
Some checks failed
Tests / forgejo-pytest (push) Failing after 4s
Tests / forgejo-pytest (pull_request) Failing after 4s
1fb2b234da
🔧 CI: pull setup-python from github.com (mirror unusable)
Some checks failed
Tests / forgejo-pytest (push) Failing after 35s
Tests / forgejo-pytest (pull_request) Failing after 6s
96df5e5521
🔧 CI: run Forgejo job in python:3.12 container
Some checks failed
Tests / forgejo-pytest (push) Failing after 32s
Tests / forgejo-pytest (pull_request) Failing after 2s
08c079f3fa
🔧 CI bisect: trivial container step only
All checks were successful
Tests / forgejo-pytest (push) Successful in 2s
Tests / forgejo-pytest (pull_request) Successful in 2s
38fd68d4a5
🔧 CI bisect: container + checkout
Some checks failed
Tests / forgejo-pytest (push) Failing after 2s
Tests / forgejo-pytest (pull_request) Failing after 2s
85cc9da328
🔧 CI bisect: default image + checkout + setup-python (sanity only)
Some checks failed
Tests / forgejo-pytest (push) Failing after 6s
Tests / forgejo-pytest (pull_request) Failing after 6s
e3a5d36f51
🔧 CI probe: enumerate default runner image capabilities
Some checks failed
Tests / p-python3 (push) Successful in 2s
Tests / p-python (push) Failing after 2s
Tests / p-pip3 (push) Failing after 2s
Tests / p-git (push) Successful in 2s
Tests / p-apt (push) Successful in 2s
Tests / p-checkout (push) Successful in 4s
Tests / p-python3 (pull_request) Successful in 2s
Tests / p-python (pull_request) Failing after 2s
Tests / p-pip3 (pull_request) Failing after 2s
Tests / p-git (pull_request) Successful in 2s
Tests / p-apt (pull_request) Successful in 2s
Tests / p-checkout (pull_request) Successful in 4s
98170e5a17
🔧 CI: bootstrap pip via venv (runner image ships python3 without pip)
All checks were successful
Tests / forgejo-pytest (push) Successful in 38s
Tests / forgejo-pytest (pull_request) Successful in 37s
a20882f554
mat merged commit f8d126408f into main 2026-07-04 07:46:22 +00:00
mat deleted branch tests/add-test-suite 2026-07-04 07:46:22 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
mat/python-comwatt-client!2
No description provided.