|
1 | 1 | """Unit tests for cli_output module.""" |
2 | 2 |
|
| 3 | +from datetime import datetime, timezone |
3 | 4 | from unittest.mock import Mock, patch |
4 | 5 |
|
5 | 6 | from cli_output.status import ( |
|
10 | 11 | print_status, |
11 | 12 | ) |
12 | 13 |
|
| 14 | +FROZEN_NOW = datetime(2025, 6, 15, 12, 0, tzinfo=timezone.utc) |
| 15 | + |
| 16 | + |
| 17 | +class FrozenDatetime(datetime): |
| 18 | + @classmethod |
| 19 | + def now(cls, tz=None): |
| 20 | + return FROZEN_NOW if tz is None else FROZEN_NOW.astimezone(tz) |
| 21 | + |
13 | 22 |
|
14 | 23 | class TestProgressBar: |
15 | 24 | """Tests for _create_progress_bar function.""" |
@@ -52,6 +61,7 @@ def test_custom_width(self): |
52 | 61 | assert bar == "█" * 5 + "░" * 5 |
53 | 62 |
|
54 | 63 |
|
| 64 | +@patch("cli_output.status.datetime", FrozenDatetime) |
55 | 65 | class TestDisplayCreditLine: |
56 | 66 | """Tests for _display_credit_line function.""" |
57 | 67 |
|
@@ -132,6 +142,7 @@ def test_timezone_naive_datetime(self, mock_console): |
132 | 142 | mock_console.print.assert_called_once() |
133 | 143 |
|
134 | 144 |
|
| 145 | +@patch("cli_output.status.datetime", FrozenDatetime) |
135 | 146 | class TestDisplayBucketCreditLine: |
136 | 147 | """Tests for _display_bucket_credit_line function.""" |
137 | 148 |
|
@@ -192,6 +203,7 @@ def test_timezone_naive_datetime(self, mock_console): |
192 | 203 | mock_console.print.assert_called_once() |
193 | 204 |
|
194 | 205 |
|
| 206 | +@patch("cli_output.status.datetime", FrozenDatetime) |
195 | 207 | class TestDisplayStatusMessage: |
196 | 208 | """Tests for _display_status_message function.""" |
197 | 209 |
|
@@ -271,6 +283,7 @@ def test_null_plan_credits_and_empty_purchased(self, mock_console): |
271 | 283 | assert "No rendering credits remaining" in call_args |
272 | 284 |
|
273 | 285 |
|
| 286 | +@patch("cli_output.status.datetime", FrozenDatetime) |
274 | 287 | class TestPrintStatus: |
275 | 288 | """Tests for print_status function.""" |
276 | 289 |
|
|
0 commit comments