Bonjour !

Bon , je vais probablement me faire déchiqueter sur place par @sver ou wiztricks mais tant pis, j'expose mon problème.

Pour des besoins de comparaison de dates entre elles, j'ai besoin de calculer le nombre de jours séparant la date du jour d'une date donnée.

Pour ce faire, j'ai une classe Converter qui, entre autres, dispose d'une méthode statique nommée gap_with_today :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
from datetime import datetime
from typing import ClassVar
 
class Converter:
    TODAY: ClassVar[str] = datetime.now().strftime("%Y-%m-%d")
 
    @staticmethod
    def gap_with_today(date: str) -> int:
        return (
            datetime.strptime(Converter.TODAY, "%Y-%m-%d").date().day
            - datetime.strptime(date, "%Y-%m-%d").date().day)
Voici mon test :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from datetime import datetime
import pytest
from app.converter import Converter
 
@pytest.fixture
def conv() -> Converter:
    return Converter()
 
class TestConverter:
    @pytest.mark.parametrize(
        "date,expected",
        [
            ("2022-01-01", 0),
            ("2022-12-31", -365),
        ],
    )
    def test_gap_with_today(self, conv: Converter, date: str, expected: int) -> None:
        Converter.TODAY = "2022-01-01"
        assert conv.gap_with_today(date) == expected
Comme on le voit, dans le test je force la date du jour à devenir 2022-01-01. Lorsque le test passe sur le 1er élément de la fixture parametrize de pytest, le résultat attendu donne bien 0 en retour (2022-01-01 - 2022-01-01). Pour le second élément de la fixture, je m'attends à avoir -365 comme résultat de la différence en nombre de jours entre 2022-01-01 et 2022-12-31.

Mais le test passe au rouge :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
FAILED tests/unit/test_converter.py::TestConverter::test_gap_with_today[2022-12-31-365] - AssertionError: assert -30 == -365
La méthode retourne -30 en écart alors forcément, pytest se plaint.

Chuis pas doué avec les dates, ça vous l'aurez remarqué mais avez-vous un moyen simple de comparer deux dates formatées %Y-%m-%d de manière plus efficace ?