Добавлены тесты для Environment
This commit is contained in:
101
net/xeaf/rack/tests/utils/date_utils_now_tests.py
Normal file
101
net/xeaf/rack/tests/utils/date_utils_now_tests.py
Normal file
@@ -0,0 +1,101 @@
|
||||
# DRF Rack
|
||||
# Библиотека классов расширений для Django REST Framework
|
||||
#
|
||||
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
|
||||
# Все права защищены. Лицензия: MIT
|
||||
|
||||
"""
|
||||
Описание класса DateUtilsNowTests
|
||||
"""
|
||||
|
||||
import datetime
|
||||
from unittest.mock import patch
|
||||
|
||||
from django.utils import timezone
|
||||
|
||||
from net.xeaf.rack.core.testing import CoreSimpleTestCase
|
||||
from net.xeaf.rack.utils import DateUtils
|
||||
|
||||
|
||||
class DateUtilsNowTests(CoreSimpleTestCase):
|
||||
"""
|
||||
Тестовый класс для DateUtils.now()
|
||||
"""
|
||||
|
||||
def test_now_returns_current_datetime(self):
|
||||
"""
|
||||
Проверяет, что метод now() возвращает текущую дату и время.
|
||||
Тестирует позитивный сценарий получения текущего времени.
|
||||
"""
|
||||
|
||||
# Arrange
|
||||
expected_now = datetime.datetime(2024, 1, 15, 12, 30, 45, tzinfo=datetime.timezone.utc)
|
||||
|
||||
# Act
|
||||
with patch('django.utils.timezone.now', return_value=expected_now):
|
||||
result = DateUtils.now()
|
||||
|
||||
# Assert
|
||||
self.assertEqual(result, expected_now)
|
||||
self.assertIsInstance(result, datetime.datetime)
|
||||
|
||||
def test_now_returns_aware_datetime(self):
|
||||
"""
|
||||
Проверяет, что now() возвращает aware datetime (с часовым поясом).
|
||||
Тестирует, что возвращаемое время содержит информацию о часовом поясе.
|
||||
"""
|
||||
|
||||
# Arrange & Act
|
||||
result = DateUtils.now()
|
||||
|
||||
# Assert
|
||||
self.assertIsNotNone(result.tzinfo)
|
||||
self.assertTrue(timezone.is_aware(result))
|
||||
|
||||
def test_now_returns_correct_type(self):
|
||||
"""
|
||||
Проверяет, что now() возвращает объект типа datetime.datetime.
|
||||
Тестирует корректность типа возвращаемого значения.
|
||||
"""
|
||||
|
||||
# Arrange & Act
|
||||
result = DateUtils.now()
|
||||
|
||||
# Assert
|
||||
self.assertIsInstance(result, datetime.datetime)
|
||||
|
||||
def test_now_uses_django_timezone(self):
|
||||
"""
|
||||
Проверяет, что now() использует django.utils.timezone.now().
|
||||
Тестирует, что метод вызывает правильную функцию из Django.
|
||||
"""
|
||||
|
||||
# Arrange
|
||||
expected_time = datetime.datetime(2024, 6, 1, 10, 0, 0, tzinfo=datetime.timezone.utc)
|
||||
|
||||
# Act
|
||||
with patch('django.utils.timezone.now', return_value=expected_time) as mock_now:
|
||||
result = DateUtils.now()
|
||||
|
||||
# Assert
|
||||
mock_now.assert_called_once()
|
||||
self.assertEqual(result, expected_time)
|
||||
|
||||
def test_now_returns_different_values_on_consecutive_calls(self):
|
||||
"""
|
||||
Проверяет, что при последовательных вызовах now() возвращаются разные значения.
|
||||
Тестирует, что метод действительно возвращает актуальное время.
|
||||
"""
|
||||
|
||||
# Arrange
|
||||
time1 = datetime.datetime(2024, 1, 1, 0, 0, 0, tzinfo=datetime.timezone.utc)
|
||||
time2 = datetime.datetime(2024, 1, 1, 0, 0, 1, tzinfo=datetime.timezone.utc)
|
||||
|
||||
# Act
|
||||
with patch('django.utils.timezone.now', side_effect=[time1, time2]):
|
||||
result1 = DateUtils.now()
|
||||
result2 = DateUtils.now()
|
||||
|
||||
# Assert
|
||||
self.assertNotEqual(result1, result2)
|
||||
self.assertLess(result1, result2)
|
||||
Reference in New Issue
Block a user