Skip to content

Commit 414e0fe

Browse files
committed
✅ add unit tests for format_dt
1 parent e2a4367 commit 414e0fe

File tree

1 file changed

+54
-0
lines changed

1 file changed

+54
-0
lines changed

tests/test_format_dt.py

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import datetime
2+
import random
3+
import pytest
4+
from discord.utils import format_dt
5+
6+
# Fix seed so that time tests are reproducible
7+
random.seed(42)
8+
9+
ALL_STYLES = ["t", "T", "d", "D", "f", "F", "R", None]
10+
11+
DATETIME_CASES = [
12+
(datetime.datetime(1970, 1, 1, 0, 0, 0, tzinfo=datetime.timezone.utc), 0),
13+
(datetime.datetime(2000, 2, 29, 12, 0, 0, tzinfo=datetime.timezone.utc), 951825600),
14+
(datetime.datetime(1999, 12, 31, 23, 59, 59, tzinfo=datetime.timezone.utc), 946684799),
15+
(datetime.datetime(2023, 1, 2, 3, 4, 5, tzinfo=datetime.timezone.utc), 1672628645),
16+
(datetime.datetime(2050, 6, 15, 7, 30, 0, tzinfo=datetime.timezone.utc), 2538891000),
17+
]
18+
19+
20+
def random_time():
21+
return datetime.time(
22+
random.randint(0, 23),
23+
random.randint(0, 59),
24+
random.randint(0, 59),
25+
)
26+
27+
28+
@pytest.mark.parametrize(("dt", "expected_ts"), DATETIME_CASES)
29+
@pytest.mark.parametrize("style", ALL_STYLES)
30+
def test_format_dt_formats_datetime(dt, expected_ts, style):
31+
"""
32+
For each (dt, expected_ts) pair and each style,
33+
format_dt should produce the correct Discord timestamp.
34+
"""
35+
if style is None:
36+
expected = f"<t:{expected_ts}>"
37+
else:
38+
expected = f"<t:{expected_ts}:{style}>"
39+
result = format_dt(dt, style=style)
40+
assert result == expected
41+
42+
43+
@pytest.mark.parametrize("style", ALL_STYLES)
44+
def test_format_dt_formats_time_equivalence(style):
45+
"""
46+
For a time-only input, format_dt(time, style) should equal
47+
format_dt(datetime.combine(today, time), style).
48+
"""
49+
tm = random_time()
50+
today = datetime.datetime.now().date()
51+
result_time = format_dt(tm, style=style)
52+
dt = datetime.datetime.combine(today, tm)
53+
result_dt = format_dt(dt, style=style)
54+
assert result_time == result_dt

0 commit comments

Comments
 (0)