Skip to content

Commit c78baf9

Browse files
author
Andrew Yoo
committed
add unit tests
1 parent 43586cd commit c78baf9

File tree

1 file changed

+114
-0
lines changed

1 file changed

+114
-0
lines changed

t/unit/test_utils.py

+114
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
from unittest import mock
2+
from django.test import TestCase
3+
from datetime import datetime
4+
import time
5+
6+
from django_celery_beat import utils
7+
from django.utils import timezone
8+
9+
class UtilsTest(TestCase):
10+
11+
@mock.patch('django_celery_beat.utils.timezone.localtime')
12+
@mock.patch('django_celery_beat.utils.timezone.get_default_timezone')
13+
@mock.patch('django_celery_beat.utils.timezone.make_aware')
14+
@mock.patch('django_celery_beat.utils.time.localtime')
15+
@mock.patch('django_celery_beat.utils.timezone.is_naive')
16+
@mock.patch('django_celery_beat.utils.getattr')
17+
def test_make_aware_use_tz_naive(self, mock_getattr, mock_is_naive, mock_localtime_1, mock_make_aware, mock_get_default_timezone, mock_localtime_2):
18+
dt = datetime(2022, 11, 6, 1, 15, 0)
19+
mock_getattr.return_value = True
20+
mock_is_naive.return_value = True
21+
mock_get_default_timezone.return_value = "America/Los_Angeles"
22+
mock_localtime_2.return_value = time.struct_time([2022, 11, 6, 1, 15, 0, 0, 310, 0])
23+
mock_make_aware.return_value = dt
24+
25+
self.assertEquals(utils.make_aware(dt), mock_localtime_2.return_value)
26+
27+
mock_localtime_1.assert_not_called()
28+
mock_make_aware.assert_called_with(dt, timezone.utc)
29+
mock_get_default_timezone.assert_called()
30+
mock_localtime_2.assert_called_with(dt, "America/Los_Angeles")
31+
32+
@mock.patch('django_celery_beat.utils.timezone.localtime')
33+
@mock.patch('django_celery_beat.utils.timezone.get_default_timezone')
34+
@mock.patch('django_celery_beat.utils.timezone.make_aware')
35+
@mock.patch('django_celery_beat.utils.time.localtime')
36+
@mock.patch('django_celery_beat.utils.timezone.is_naive')
37+
@mock.patch('django_celery_beat.utils.getattr')
38+
def test_make_aware_use_tz_not_naive(self, mock_getattr, mock_is_naive, mock_localtime_1, mock_make_aware, mock_get_default_timezone, mock_localtime_2):
39+
dt = datetime(2022, 11, 6, 1, 15, 0)
40+
mock_getattr.return_value = True
41+
mock_is_naive.return_value = False
42+
mock_get_default_timezone.return_value = "America/Los_Angeles"
43+
mock_localtime_2.return_value = time.struct_time([2022, 11, 6, 1, 15, 0, 0, 310, 0])
44+
mock_make_aware.return_value = dt
45+
46+
self.assertEquals(utils.make_aware(dt), mock_localtime_2.return_value)
47+
48+
mock_localtime_1.assert_not_called()
49+
mock_make_aware.assert_not_called()
50+
mock_get_default_timezone.assert_called()
51+
mock_localtime_2.assert_called_with(dt, "America/Los_Angeles")
52+
53+
@mock.patch('django_celery_beat.utils.timezone.localtime')
54+
@mock.patch('django_celery_beat.utils.timezone.get_default_timezone')
55+
@mock.patch('django_celery_beat.utils.timezone.make_aware')
56+
@mock.patch('django_celery_beat.utils.time.localtime')
57+
@mock.patch('django_celery_beat.utils.timezone.is_naive')
58+
@mock.patch('django_celery_beat.utils.getattr')
59+
def test_make_aware_not_use_tz_naive_dst(self, mock_getattr, mock_is_naive, mock_localtime_1, mock_make_aware, mock_get_default_timezone, mock_localtime_2):
60+
dt = datetime(2022, 11, 6, 1, 15, 0)
61+
mock_getattr.return_value = False
62+
mock_is_naive.return_value = True
63+
mock_get_default_timezone.return_value = "America/Los_Angeles"
64+
mock_localtime_1.return_value = time.struct_time([2022, 11, 6, 1, 15, 0, 0, 310, 1])
65+
mock_make_aware.return_value = dt
66+
67+
self.assertEquals(utils.make_aware(dt), dt)
68+
69+
mock_localtime_1.assert_called_with()
70+
mock_make_aware.assert_called_with(dt, "America/Los_Angeles", is_dst=True)
71+
mock_get_default_timezone.assert_called()
72+
mock_localtime_2.assert_not_called()
73+
74+
@mock.patch('django_celery_beat.utils.timezone.localtime')
75+
@mock.patch('django_celery_beat.utils.timezone.get_default_timezone')
76+
@mock.patch('django_celery_beat.utils.timezone.make_aware')
77+
@mock.patch('django_celery_beat.utils.time.localtime')
78+
@mock.patch('django_celery_beat.utils.timezone.is_naive')
79+
@mock.patch('django_celery_beat.utils.getattr')
80+
def test_make_aware_not_use_tz_naive_not_dst(self, mock_getattr, mock_is_naive, mock_localtime_1, mock_make_aware, mock_get_default_timezone, mock_localtime_2):
81+
dt = datetime(2022, 11, 6, 1, 15, 0)
82+
mock_getattr.return_value = False
83+
mock_is_naive.return_value = True
84+
mock_get_default_timezone.return_value = "America/Los_Angeles"
85+
mock_localtime_1.return_value = time.struct_time([2022, 11, 6, 1, 15, 0, 0, 310, 0])
86+
mock_make_aware.return_value = dt
87+
88+
self.assertEquals(utils.make_aware(dt), dt)
89+
90+
mock_localtime_1.assert_called_with()
91+
mock_make_aware.assert_called_with(dt, "America/Los_Angeles", is_dst=False)
92+
mock_get_default_timezone.assert_called()
93+
mock_localtime_2.assert_not_called()
94+
95+
@mock.patch('django_celery_beat.utils.timezone.localtime')
96+
@mock.patch('django_celery_beat.utils.timezone.get_default_timezone')
97+
@mock.patch('django_celery_beat.utils.timezone.make_aware')
98+
@mock.patch('django_celery_beat.utils.time.localtime')
99+
@mock.patch('django_celery_beat.utils.timezone.is_naive')
100+
@mock.patch('django_celery_beat.utils.getattr')
101+
def test_make_aware_not_use_tz_not_naive_dst(self, mock_getattr, mock_is_naive, mock_localtime_1, mock_make_aware, mock_get_default_timezone, mock_localtime_2):
102+
dt = datetime(2022, 11, 6, 1, 15, 0)
103+
mock_getattr.return_value = False
104+
mock_is_naive.return_value = False
105+
mock_get_default_timezone.return_value = "America/Los_Angeles"
106+
mock_localtime_1.return_value = time.struct_time([2022, 11, 6, 1, 15, 0, 0, 310, 0])
107+
mock_make_aware.return_value = dt
108+
109+
self.assertEquals(utils.make_aware(dt), dt)
110+
111+
mock_localtime_1.assert_not_called()
112+
mock_make_aware.assert_not_called()
113+
mock_get_default_timezone.assert_not_called()
114+
mock_localtime_2.assert_not_called()

0 commit comments

Comments
 (0)