-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest_booking_scheduler.py
124 lines (87 loc) · 4.9 KB
/
test_booking_scheduler.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
from datetime import datetime, timedelta
import io
import sys
import unittest
from unittest.mock import Mock, patch
from schedule import *
from booking_scheduler import *
def get_date_time(date: str):
try:
return datetime.strptime(date, '%Y-%m-%d %H:%M')
except:
raise ValueError('Invalid date format')
TIME_NOT_OCLOCK = get_date_time('2021-01-01 12:30')
TIME_OCLOCK = get_date_time('2021-01-01 12:00')
DEFAULT_CAPACITY = 3
class BookingSchedulerTest(unittest.TestCase):
def setUp(self):
self.CUSTOMER = Customer('Fake Name', '010-1234-5678')
self.bs = BookingScheduler(DEFAULT_CAPACITY)
self.backup_stdout = sys.stdout
self.stdout = io.StringIO()
sys.stdout = self.stdout
self.sms_sender = Mock(spec=SmsSender)
def send_mock(schedule):
print(
f"Try to send SMS to {schedule.get_customer().phone_number} for schedule at {schedule.get_date_time()}")
self.sms_sender.send.side_effect = send_mock
self.email_sender = Mock(spec=MailSender)
def send_mail_mock(schedule):
print(
f"Try to Send email to {schedule.get_customer().get_email()} for schedule at {schedule.get_date_time()}")
self.email_sender.send_mail.side_effect = send_mail_mock
self.bs.set_sms_sender(self.sms_sender)
self.bs.set_mail_sender(self.email_sender)
def tearDown(self):
sys.stdout = self.backup_stdout
def test_not_oclock(self):
with self.assertRaises(ValueError):
self.bs.add_schedule(Schedule(TIME_NOT_OCLOCK, DEFAULT_CAPACITY - 1, self.CUSTOMER))
def test_oclock(self):
self.bs.add_schedule(Schedule(TIME_OCLOCK, DEFAULT_CAPACITY - 1, self.CUSTOMER))
self.assertEqual(self.stdout.getvalue(),
"Try to send SMS to 010-1234-5678 for schedule at 2021-01-01 12:00:00\n")
def test_capacity_overflow1(self):
with self.assertRaises(ValueError):
self.bs.add_schedule(Schedule(TIME_OCLOCK, DEFAULT_CAPACITY + 1, self.CUSTOMER))
def test_capacity_overflow2(self):
self.bs.add_schedule(Schedule(TIME_OCLOCK, DEFAULT_CAPACITY, self.CUSTOMER))
with self.assertRaises(ValueError):
self.bs.add_schedule(Schedule(TIME_OCLOCK, DEFAULT_CAPACITY, self.CUSTOMER))
def test_normal(self):
self.bs.add_schedule(Schedule(TIME_OCLOCK, DEFAULT_CAPACITY, self.CUSTOMER))
self.bs.add_schedule(Schedule(TIME_OCLOCK + timedelta(hours=1), DEFAULT_CAPACITY, self.CUSTOMER))
self.assertEqual(self.stdout.getvalue(),
'Try to send SMS to 010-1234-5678 for schedule at 2021-01-01 12:00:00\nTry to send SMS to 010-1234-5678 for schedule at 2021-01-01 13:00:00\n')
def test_normal_check_sms(self):
self.bs.set_sms_sender(self.sms_sender)
self.bs.add_schedule(Schedule(TIME_OCLOCK, DEFAULT_CAPACITY, self.CUSTOMER))
self.sms_sender.send.assert_called_once()
self.assertEqual(self.stdout.getvalue(),
'Try to send SMS to 010-1234-5678 for schedule at 2021-01-01 12:00:00\n')
def test_normal_check_email_without_email(self):
self.bs.add_schedule(Schedule(TIME_OCLOCK, DEFAULT_CAPACITY, self.CUSTOMER))
self.sms_sender.send.assert_called_once()
self.email_sender.send_mail.assert_not_called()
self.assertEqual(self.stdout.getvalue(),
'Try to send SMS to 010-1234-5678 for schedule at 2021-01-01 12:00:00\n')
def test_normal_check_email_with_email(self):
self.bs.set_sms_sender(self.sms_sender)
self.bs.set_mail_sender(self.email_sender)
self.CUSTOMER.set_email('[email protected]')
self.bs.add_schedule(Schedule(TIME_OCLOCK, DEFAULT_CAPACITY, self.CUSTOMER))
self.sms_sender.send.assert_called_once()
self.email_sender.send_mail.assert_called_once()
self.assertEqual(self.stdout.getvalue(),
'Try to send SMS to 010-1234-5678 for schedule at 2021-01-01 12:00:00\nTry to Send email to [email protected] for schedule at 2021-01-01 12:00:00\n')
@patch.object(BookingScheduler, 'get_system_day', return_value=get_date_time('2020-12-27 12:00'))
def test_sunday(self, mock_get_system_day):
with self.assertRaises(ValueError):
self.bs.add_schedule(Schedule(TIME_OCLOCK, DEFAULT_CAPACITY, self.CUSTOMER))
@patch.object(BookingScheduler, 'get_system_day', return_value=TIME_OCLOCK)
def test_non_sunday(self, mock_get_system_days):
self.bs.add_schedule(Schedule(TIME_OCLOCK, DEFAULT_CAPACITY, self.CUSTOMER))
self.assertEqual(self.stdout.getvalue(),
'Try to send SMS to 010-1234-5678 for schedule at 2021-01-01 12:00:00\n')
if __name__ == '__main__':
unittest.main()