From 3728cd5e335d0b3bde08ee48397d473c4585ee33 Mon Sep 17 00:00:00 2001 From: Sina Atalay <79940989+sinaatalay@users.noreply.github.com> Date: Wed, 25 Mar 2026 03:58:47 +0300 Subject: [PATCH] Add Hypothesis tests for BaseEntryWithComplexFields date adjustment logic - date_only_clears_start_and_end: providing date nullifies start/end - start_only_implies_present: start without end defaults to "present" - end_only_becomes_date: end without start treated as single date --- .../bases/test_entry_with_complex_fields.py | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/tests/schema/models/cv/entries/bases/test_entry_with_complex_fields.py b/tests/schema/models/cv/entries/bases/test_entry_with_complex_fields.py index 98c77bfe..3e51d816 100644 --- a/tests/schema/models/cv/entries/bases/test_entry_with_complex_fields.py +++ b/tests/schema/models/cv/entries/bases/test_entry_with_complex_fields.py @@ -2,12 +2,15 @@ from datetime import date as Date import pydantic import pytest +from hypothesis import given, settings +from hypothesis import strategies as st from rendercv.exception import RenderCVInternalError from rendercv.schema.models.cv.entries.bases.entry_with_complex_fields import ( BaseEntryWithComplexFields, get_date_object, ) +from tests.strategies import valid_date_strings class TestGetDateObject: @@ -61,3 +64,30 @@ class TestBaseEntryWithComplexFields: BaseEntryWithComplexFields( start_date=start_date, end_date=end_date, date=date ) + + @settings(deadline=None) + @given(date=valid_date_strings()) + def test_date_only_clears_start_and_end(self, date: str) -> None: + entry = BaseEntryWithComplexFields( + date=date, start_date="2020-01", end_date="2021-01" + ) + assert entry.start_date is None + assert entry.end_date is None + + @settings(deadline=None) + @given( + start_date=st.dates( + min_value=Date(1900, 1, 1), max_value=Date(2025, 12, 31) + ).map(lambda d: d.isoformat()) + ) + def test_start_only_implies_present(self, start_date: str) -> None: + entry = BaseEntryWithComplexFields(start_date=start_date) + assert entry.end_date == "present" + + @settings(deadline=None) + @given(end_date=valid_date_strings()) + def test_end_only_becomes_date(self, end_date: str) -> None: + entry = BaseEntryWithComplexFields(end_date=end_date) + assert entry.date == end_date + assert entry.start_date is None + assert entry.end_date is None