22
33from dataclasses import replace
44from datetime import date
5+ from datetime import datetime
56from datetime import timedelta
7+ from datetime import timezone
68from typing import Any
79
810import pytest
@@ -269,11 +271,14 @@ def test_custom_version_schemes() -> None:
269271 assert custom_computed == no_guess_dev_version (version )
270272
271273
274+ # Fixed time for consistent test behavior across timezone boundaries
275+ # This prevents issue #687 where tests failed around midnight in non-UTC timezones
276+ _TEST_TIME = datetime (2023 , 12 , 15 , 12 , 0 , 0 , tzinfo = timezone .utc )
277+
278+
272279def date_offset (base_date : date | None = None , days_offset : int = 0 ) -> date :
273280 if base_date is None :
274- from setuptools_scm .version import _source_epoch_or_utc_now
275-
276- base_date = _source_epoch_or_utc_now ().date ()
281+ base_date = _TEST_TIME .date ()
277282 return base_date - timedelta (days = days_offset )
278283
279284
@@ -304,12 +309,23 @@ def date_to_str(
304309 id = "leading 0s" ,
305310 ),
306311 pytest .param (
307- meta (date_to_str (days_offset = 3 ), config = c_non_normalize , dirty = True ),
312+ meta (
313+ date_to_str (days_offset = 3 ),
314+ config = c_non_normalize ,
315+ dirty = True ,
316+ time = _TEST_TIME ,
317+ ),
308318 date_to_str () + ".0.dev0" ,
309319 id = "dirty other day" ,
310320 ),
311321 pytest .param (
312- meta (date_to_str (), config = c_non_normalize , distance = 2 , branch = "default" ),
322+ meta (
323+ date_to_str (),
324+ config = c_non_normalize ,
325+ distance = 2 ,
326+ branch = "default" ,
327+ time = _TEST_TIME ,
328+ ),
313329 date_to_str () + ".1.dev2" ,
314330 id = "normal branch" ,
315331 ),
@@ -382,8 +398,8 @@ def test_calver_by_date(version: ScmVersion, expected_next: str) -> None:
382398 [
383399 pytest .param (meta ("1.0.0" , config = c ), "1.0.0" , id = "SemVer exact stays" ),
384400 pytest .param (
385- meta ("1.0.0" , config = c_non_normalize , dirty = True ),
386- "09.02.13.1 .dev0" ,
401+ meta ("1.0.0" , config = c_non_normalize , dirty = True , time = _TEST_TIME ),
402+ "23.12.15.0 .dev0" ,
387403 id = "SemVer dirty is replaced by date" ,
388404 marks = pytest .mark .filterwarnings ("ignore:.*legacy version.*:UserWarning" ),
389405 ),
@@ -397,7 +413,12 @@ def test_calver_by_date_semver(version: ScmVersion, expected_next: str) -> None:
397413def test_calver_by_date_future_warning () -> None :
398414 with pytest .warns (UserWarning , match = "your previous tag*" ):
399415 calver_by_date (
400- meta (date_to_str (days_offset = - 2 ), config = c_non_normalize , distance = 2 )
416+ meta (
417+ date_to_str (days_offset = - 2 ),
418+ config = c_non_normalize ,
419+ distance = 2 ,
420+ time = _TEST_TIME ,
421+ )
401422 )
402423
403424
0 commit comments