# DRF Rack # Библиотека классов расширений для Django REST Framework # # Автор: Николай В. Анохин # Все права защищены. Лицензия: 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)