Skip to content

Commit 22c73a9

Browse files
committed
Test suite for RenderHelper
1 parent 1e5f1e4 commit 22c73a9

File tree

1 file changed

+126
-0
lines changed

1 file changed

+126
-0
lines changed

tests/test_render_helper.py

Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
import datetime as dt
2+
import pytest
3+
from unittest.mock import MagicMock, patch
4+
import sys
5+
import os
6+
7+
# Add the src directory to the path so we can import the modules
8+
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "src"))
9+
10+
from render.render import RenderHelper
11+
from config import DashboardConfig
12+
13+
14+
class TestRenderHelper:
15+
"""Test suite for RenderHelper class methods."""
16+
17+
@pytest.fixture
18+
def mock_config(self):
19+
"""Create a mock DashboardConfig for testing."""
20+
config = MagicMock(spec=DashboardConfig)
21+
return config
22+
23+
@pytest.fixture
24+
def render_helper(self, mock_config):
25+
"""Create a RenderHelper instance with mocked config."""
26+
with patch("render.render.structlog.get_logger"):
27+
return RenderHelper(mock_config)
28+
29+
def test_extend_list_shorter_list(self, render_helper):
30+
"""Test extend_list when list is shorter than target length."""
31+
test_list = ["item1", "item2"]
32+
render_helper.extend_list(test_list, 5, "default")
33+
expected = ["item1", "item2", "default", "default", "default"]
34+
assert test_list == expected
35+
36+
def test_extend_list_empty_list(self, render_helper):
37+
"""Test extend_list with empty list."""
38+
test_list = []
39+
render_helper.extend_list(test_list, 3, "default")
40+
expected = ["default", "default", "default"]
41+
assert test_list == expected
42+
43+
def test_extend_list_exact_length(self, render_helper):
44+
"""Test extend_list when list is already the target length."""
45+
test_list = ["item1", "item2", "item3"]
46+
original_list = test_list.copy()
47+
render_helper.extend_list(test_list, 3, "default")
48+
assert test_list == original_list
49+
50+
def test_extend_list_longer_list(self, render_helper):
51+
"""Test extend_list when list is longer than target length."""
52+
test_list = ["item1", "item2", "item3", "item4", "item5"]
53+
original_list = test_list.copy()
54+
render_helper.extend_list(test_list, 3, "default")
55+
assert test_list == original_list
56+
57+
def test_extend_list_zero_length(self, render_helper):
58+
"""Test extend_list with zero target length."""
59+
test_list = ["item1", "item2"]
60+
original_list = test_list.copy()
61+
render_helper.extend_list(test_list, 0, "default")
62+
assert test_list == original_list
63+
64+
def test_extend_list_different_default_values(self, render_helper):
65+
"""Test extend_list with different default value types."""
66+
test_list = [1, 2]
67+
render_helper.extend_list(test_list, 4, 0)
68+
assert test_list == [1, 2, 0, 0]
69+
70+
def test_get_short_time_24hour_format(self, render_helper):
71+
"""Test get_short_time with 24-hour format."""
72+
# Test various times in 24-hour format
73+
time_cases = [
74+
(dt.datetime(2024, 1, 1, 0, 0), "0:00"),
75+
(dt.datetime(2024, 1, 1, 9, 30), "9:30"),
76+
(dt.datetime(2024, 1, 1, 12, 0), "12:00"),
77+
(dt.datetime(2024, 1, 1, 23, 59), "23:59"),
78+
(dt.datetime(2024, 1, 1, 14, 5), "14:05"),
79+
]
80+
81+
for datetime_obj, expected in time_cases:
82+
result = render_helper.get_short_time(datetime_obj, is24hour=True)
83+
assert result == expected, (
84+
f"Failed for {datetime_obj}: expected {expected}, got {result}"
85+
)
86+
87+
def test_get_short_time_12hour_format(self, render_helper):
88+
"""Test get_short_time with 12-hour format."""
89+
test_cases = [
90+
# Midnight cases
91+
(dt.datetime(2024, 1, 1, 0, 0), "12am"),
92+
(dt.datetime(2024, 1, 1, 0, 30), "12:30am"),
93+
# Morning cases
94+
(dt.datetime(2024, 1, 1, 1, 0), "1am"),
95+
(dt.datetime(2024, 1, 1, 9, 15), "9:15am"),
96+
(dt.datetime(2024, 1, 1, 11, 45), "11:45am"),
97+
# Noon cases
98+
(dt.datetime(2024, 1, 1, 12, 0), "12pm"),
99+
(dt.datetime(2024, 1, 1, 12, 30), "12:30pm"),
100+
# Afternoon/Evening cases
101+
(dt.datetime(2024, 1, 1, 13, 0), "1pm"),
102+
(dt.datetime(2024, 1, 1, 15, 20), "3:20pm"),
103+
(dt.datetime(2024, 1, 1, 23, 59), "11:59pm"),
104+
]
105+
106+
for datetime_obj, expected in test_cases:
107+
result = render_helper.get_short_time(datetime_obj, is24hour=False)
108+
assert result == expected, (
109+
f"Failed for {datetime_obj}: expected {expected}, got {result}"
110+
)
111+
112+
def test_get_short_time_zero_minutes(self, render_helper):
113+
"""Test get_short_time when minutes are zero in 12-hour format."""
114+
# When minutes are 0, they should not be displayed
115+
test_cases = [
116+
(dt.datetime(2024, 1, 1, 0, 0), "12am"),
117+
(dt.datetime(2024, 1, 1, 5, 0), "5am"),
118+
(dt.datetime(2024, 1, 1, 12, 0), "12pm"),
119+
(dt.datetime(2024, 1, 1, 18, 0), "6pm"),
120+
]
121+
122+
for datetime_obj, expected in test_cases:
123+
result = render_helper.get_short_time(datetime_obj, is24hour=False)
124+
assert result == expected, (
125+
f"Failed for {datetime_obj}: expected {expected}, got {result}"
126+
)

0 commit comments

Comments
 (0)