2
2
3
3
from dataclasses import replace
4
4
from datetime import date
5
+ from datetime import datetime
5
6
from datetime import timedelta
7
+ from datetime import timezone
6
8
from typing import Any
7
9
8
10
import pytest
@@ -269,11 +271,14 @@ def test_custom_version_schemes() -> None:
269
271
assert custom_computed == no_guess_dev_version (version )
270
272
271
273
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
+
272
279
def date_offset (base_date : date | None = None , days_offset : int = 0 ) -> date :
273
280
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 ()
277
282
return base_date - timedelta (days = days_offset )
278
283
279
284
@@ -304,12 +309,23 @@ def date_to_str(
304
309
id = "leading 0s" ,
305
310
),
306
311
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
+ ),
308
318
date_to_str () + ".0.dev0" ,
309
319
id = "dirty other day" ,
310
320
),
311
321
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
+ ),
313
329
date_to_str () + ".1.dev2" ,
314
330
id = "normal branch" ,
315
331
),
@@ -382,8 +398,8 @@ def test_calver_by_date(version: ScmVersion, expected_next: str) -> None:
382
398
[
383
399
pytest .param (meta ("1.0.0" , config = c ), "1.0.0" , id = "SemVer exact stays" ),
384
400
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" ,
387
403
id = "SemVer dirty is replaced by date" ,
388
404
marks = pytest .mark .filterwarnings ("ignore:.*legacy version.*:UserWarning" ),
389
405
),
@@ -397,7 +413,12 @@ def test_calver_by_date_semver(version: ScmVersion, expected_next: str) -> None:
397
413
def test_calver_by_date_future_warning () -> None :
398
414
with pytest .warns (UserWarning , match = "your previous tag*" ):
399
415
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
+ )
401
422
)
402
423
403
424
0 commit comments