testing
This commit is contained in:
89
backend/tests/test_utils.py
Normal file
89
backend/tests/test_utils.py
Normal file
@@ -0,0 +1,89 @@
|
||||
"""Tests for utility functions (backend/utils.py)."""
|
||||
import pytest
|
||||
from datetime import datetime, timezone, timedelta
|
||||
from utils import utc_to_ist, format_ist_timestamp
|
||||
|
||||
IST = timezone(timedelta(hours=5, minutes=30))
|
||||
|
||||
|
||||
class TestUtcToIst:
|
||||
def test_midnight_utc_becomes_530_ist(self):
|
||||
utc = datetime(2024, 1, 1, 0, 0, 0)
|
||||
ist = utc_to_ist(utc)
|
||||
assert ist.hour == 5
|
||||
assert ist.minute == 30
|
||||
|
||||
def test_adds_five_hours_thirty_minutes(self):
|
||||
utc = datetime(2024, 6, 15, 10, 0, 0)
|
||||
ist = utc_to_ist(utc)
|
||||
assert ist.hour == 15
|
||||
assert ist.minute == 30
|
||||
|
||||
def test_rolls_over_to_next_day(self):
|
||||
utc = datetime(2024, 1, 1, 22, 0, 0) # 22:00 UTC → 03:30 next day IST
|
||||
ist = utc_to_ist(utc)
|
||||
assert ist.day == 2
|
||||
assert ist.hour == 3
|
||||
assert ist.minute == 30
|
||||
|
||||
def test_rolls_over_to_next_month(self):
|
||||
utc = datetime(2024, 1, 31, 23, 0, 0) # Jan 31 → Feb 1 IST
|
||||
ist = utc_to_ist(utc)
|
||||
assert ist.month == 2
|
||||
assert ist.day == 1
|
||||
|
||||
def test_output_has_ist_timezone_offset(self):
|
||||
utc = datetime(2024, 1, 1, 12, 0, 0)
|
||||
ist = utc_to_ist(utc)
|
||||
assert ist.utcoffset() == timedelta(hours=5, minutes=30)
|
||||
|
||||
def test_preserves_seconds(self):
|
||||
utc = datetime(2024, 3, 15, 8, 45, 30)
|
||||
ist = utc_to_ist(utc)
|
||||
assert ist.second == 30
|
||||
|
||||
def test_noon_utc_is_1730_ist(self):
|
||||
utc = datetime(2024, 7, 4, 12, 0, 0)
|
||||
ist = utc_to_ist(utc)
|
||||
assert ist.hour == 17
|
||||
assert ist.minute == 30
|
||||
|
||||
|
||||
class TestFormatIstTimestamp:
|
||||
def test_converts_z_suffix_timestamp(self):
|
||||
result = format_ist_timestamp("2024-01-01T00:00:00Z")
|
||||
assert "+05:30" in result
|
||||
|
||||
def test_converts_explicit_utc_offset_timestamp(self):
|
||||
result = format_ist_timestamp("2024-01-01T00:00:00+00:00")
|
||||
assert "+05:30" in result
|
||||
|
||||
def test_midnight_utc_produces_0530_ist(self):
|
||||
result = format_ist_timestamp("2024-01-01T00:00:00Z")
|
||||
assert "05:30:00+05:30" in result
|
||||
|
||||
def test_noon_utc_produces_1730_ist(self):
|
||||
result = format_ist_timestamp("2024-01-01T12:00:00Z")
|
||||
assert "17:30:00+05:30" in result
|
||||
|
||||
def test_returns_iso_format_string(self):
|
||||
result = format_ist_timestamp("2024-06-15T08:00:00Z")
|
||||
# Should be parseable as ISO datetime
|
||||
parsed = datetime.fromisoformat(result)
|
||||
assert parsed is not None
|
||||
|
||||
def test_invalid_text_raises_value_error(self):
|
||||
with pytest.raises(ValueError):
|
||||
format_ist_timestamp("not-a-date")
|
||||
|
||||
def test_invalid_month_raises_value_error(self):
|
||||
with pytest.raises(ValueError):
|
||||
format_ist_timestamp("2024-13-01T00:00:00Z")
|
||||
|
||||
def test_empty_string_raises_value_error(self):
|
||||
with pytest.raises(ValueError):
|
||||
format_ist_timestamp("")
|
||||
|
||||
def test_slash_separated_date_raises_value_error(self):
|
||||
with pytest.raises(ValueError):
|
||||
format_ist_timestamp("2024/01/01T00:00:00") # Slashes not valid ISO format
|
||||
Reference in New Issue
Block a user