1+ import datetime
2+ import random
3+ import string
14from unittest import TestCase
25
3- from icloudpd .string_helpers import truncate_middle
6+ from icloudpd .string_helpers import parse_timestamp_or_timedelta , truncate_middle
47
58
69class TruncateMiddleTestCase (TestCase ):
@@ -17,3 +20,49 @@ def test_truncate_middle(self) -> None:
1720 assert truncate_middle ("test_filename.jpg" , 0 ) == ""
1821 with self .assertRaises (ValueError ):
1922 truncate_middle ("test_filename.jpg" , - 1 )
23+
24+
25+ class ParseTimestampeOrTimeDeltaTestCase (TestCase ):
26+ def test_totality (self ) -> None :
27+ characters = string .ascii_letters + string .digits
28+ for _case in range (500 ):
29+ target_length = random .randint (0 , 100 )
30+ target_string = "" .join (random .choice (characters ) for i in range (target_length ))
31+ _result = parse_timestamp_or_timedelta (target_string )
32+ # not throwing is okay
33+
34+ def test_naive (self ) -> None :
35+ assert parse_timestamp_or_timedelta ("2025-01-02T03:04:05.0006" ) == datetime .datetime (
36+ 2025 , 1 , 2 , 3 , 4 , 5 , 600
37+ )
38+
39+ def test_aware (self ) -> None :
40+ assert parse_timestamp_or_timedelta ("2025-01-02T03:04:05.0006Z" ) == datetime .datetime (
41+ 2025 , 1 , 2 , 3 , 4 , 5 , 600 , datetime .timezone .utc
42+ )
43+
44+ def test_aware_8 (self ) -> None :
45+ assert parse_timestamp_or_timedelta ("2025-01-02T03:04:05.0006+0800" ) == datetime .datetime (
46+ 2025 , 1 , 2 , 3 , 4 , 5 , 600 , datetime .timezone (datetime .timedelta (hours = 8 ))
47+ )
48+
49+ def test_timestamp_invalid (self ) -> None :
50+ assert isinstance (parse_timestamp_or_timedelta ("2025-01" ), ValueError )
51+
52+ def test_delta_totality (self ) -> None :
53+ digits = string .digits
54+ characters = ["d" , "D" ]
55+ for _case in range (500 ):
56+ target_length = random .randint (1 , 5 )
57+ target_string = "" .join (
58+ random .choice (digits ) for i in range (target_length )
59+ ) + random .choice (characters )
60+ result = parse_timestamp_or_timedelta (target_string )
61+ assert isinstance (result , datetime .timedelta )
62+
63+ def test_delta (self ) -> None :
64+ assert parse_timestamp_or_timedelta ("1d" ) == datetime .timedelta (days = 1 )
65+ assert parse_timestamp_or_timedelta ("0d" ) == datetime .timedelta (days = 0 )
66+
67+ def test_delta_invalid (self ) -> None :
68+ assert isinstance (parse_timestamp_or_timedelta ("-1d" ), ValueError )
0 commit comments