Skip to content

Commit

Permalink
#27: Add unit test and strengthen function.
Browse files Browse the repository at this point in the history
  • Loading branch information
zgypa committed Apr 29, 2024
1 parent 6f927a2 commit 9c2d6ee
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 13 deletions.
20 changes: 12 additions & 8 deletions dicom4ortho/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -271,6 +271,17 @@ def dental_provider_lastname(self, lastname):

@ property
def timezone(self) -> datetime.timezone:
""" Convert the TimezoneOffsetFromUTC to a Python datetime.timezone.
:return: timezone from TimezoneOffsetFromUTC as a Python datetime.timezone object, or None if TimezoneOffsetFromUTC is not something that can be converted to an integer.
"""
try:
return datetime.timezone(datetime.timedelta(hours=int(self._ds.TimezoneOffsetFromUTC)/100))
except ValueError:
return None

@ timezone.setter
def timezone(self, timezone: datetime.timezone) -> None:
''' Set timezone of TimezoneOffsetFromUTC from a Python datetime.timezone object.
If you know the timezone in string format, like "-0900", then you might be better off to set the `_ds` object directly.
Expand All @@ -286,15 +297,8 @@ def timezone(self) -> datetime.timezone:
Args:
timezone: datetime.timezone
Returns:
datetime.timezone: Python timezone object
None
'''
"""
:return: timezone from TimezoneOffsetFromUTC as a Python datetime.timezone object.
"""
return datetime.timezone(datetime.timedelta(hours=int(self._ds.TimezoneOffsetFromUTC)/100))

@ timezone.setter
def timezone(self, timezone: datetime.timezone) -> None:
self._ds.TimezoneOffsetFromUTC = datetime.datetime.now(
timezone).strftime("%z")

Expand Down
35 changes: 30 additions & 5 deletions test/test_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
'''
from unittest import TestCase
import logging
import datetime
from dicom4ortho.m_ada1107 import ADA1107
from dicom4ortho.model import DicomBase

Expand All @@ -23,10 +24,34 @@ def test_load_views(self):
f'Views ver: [{v.VIEWS["VERSION"]}] Codes ver: [{v.CODES["VERSION"]}]')


class DicomBaseTest(TestCase):
def setUp(self) -> None:
return super().setUp()

def test_acquisition_datetime(self):
db = DicomBase()
class TestDicomBaseAcquisitionDateTimeSetter(TestCase):
def setUp(self):
# Assuming the class that contains the setter is named ImagingStudy
self.dicombase = DicomBase()

def test_with_timezone(self):
# Test datetime with timezone
dt_with_tz = datetime.datetime(2023, 1, 1, 12, 0, tzinfo=datetime.timezone.utc)
self.dicombase.timezone = datetime.timezone(datetime.timedelta(hours=-5)) # New York Time
self.dicombase.acquisition_datetime = dt_with_tz
self.assertEqual(self.dicombase._ds.AcquisitionDateTime[-5:], '+0000') # UTC timezone

def test_without_timezone(self):
# Test datetime without timezone, class timezone is set
dt_without_tz = datetime.datetime(2023, 1, 1, 12, 0)
self.dicombase.timezone = datetime.timezone(datetime.timedelta(hours=-5)) # New York Time
self.dicombase.acquisition_datetime = dt_without_tz
self.assertEqual(self.dicombase._ds.AcquisitionDateTime[-5:], '-0500') # New York timezone

def test_no_class_timezone(self):
# Test datetime without timezone and no class timezone set
dt_without_tz = datetime.datetime(2023, 1, 1, 12, 0)
self.dicombase.timezone = None
self.dicombase.acquisition_datetime = dt_without_tz
# This checks if the timezone has been set to local timezone, may need to adjust based on local timezone
# For example, if running in UTC environment, it should end with '+0000'
expected_tz = datetime.datetime.now().astimezone().strftime('%z')
self.assertEqual(self.dicombase._ds.AcquisitionDateTime[-5:], expected_tz)


0 comments on commit 9c2d6ee

Please sign in to comment.