/
test_progress.py
65 lines (54 loc) · 2.9 KB
/
test_progress.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
import unittest
from datetime import datetime, timezone
import mock
from publish.progress import Progress, ProgressLogger
class TestProgress(unittest.TestCase):
def test_get_progress(self):
progress = Progress(10)
self.assertEqual('0 of 10', progress.get_progress())
self.assertEqual('0 of 10', progress.get_progress())
self.assertEqual('item', progress.observe('item'))
self.assertEqual('1 of 10', progress.get_progress())
self.assertEqual('1 of 10', progress.get_progress())
self.assertEqual(1, progress.observe(1))
self.assertEqual('2 of 10', progress.get_progress())
self.assertEqual('2 of 10', progress.get_progress())
self.assertEqual(1.2, progress.observe(1.2))
self.assertEqual('3 of 10', progress.get_progress())
self.assertEqual('3 of 10', progress.get_progress())
obj = object()
self.assertEqual(obj, progress.observe(obj))
self.assertEqual('4 of 10', progress.get_progress())
self.assertEqual('4 of 10', progress.get_progress())
class TestProgressLogger(unittest.TestCase):
def test(self):
progress = Progress(10)
logger = mock.MagicMock(info=mock.Mock())
plogger = ProgressLogger(progress, 60, 'progress: {progress} in {time}', logger)
try:
ts = datetime(2022, 6, 1, 12, 34, 56, tzinfo=timezone.utc)
with mock.patch('publish.progress.datetime', utcnow=mock.Mock(return_value=ts)):
plogger.start()
logger.info.assert_not_called()
progress.observe('item')
logger.info.assert_not_called()
ts = datetime(2022, 6, 1, 12, 35, 00, tzinfo=timezone.utc)
with mock.patch('publish.progress.datetime', utcnow=mock.Mock(return_value=ts)):
plogger._log_progress()
self.assertEqual([mock.call('progress: 1 of 10 in 4 seconds')], logger.info.call_args_list)
logger.info.reset_mock()
progress.observe('item')
progress.observe('item')
logger.info.assert_not_called()
ts = datetime(2022, 6, 1, 12, 40, 00, tzinfo=timezone.utc)
with mock.patch('publish.progress.datetime', utcnow=mock.Mock(return_value=ts)):
plogger._log_progress()
self.assertEqual([mock.call('progress: 3 of 10 in 5 minutes and 4 seconds')], logger.info.call_args_list)
logger.info.reset_mock()
finally:
ts = datetime(2022, 6, 1, 12, 41, 23, tzinfo=timezone.utc)
with mock.patch('publish.progress.datetime', utcnow=mock.Mock(return_value=ts)):
plogger.finish('finished: {observations} of {items} in {duration}')
self.assertEqual([mock.call('finished: 3 of 10 in 6 minutes and 27 seconds')], logger.info.call_args_list)
logger.info.reset_mock()
self.assertEqual('6 minutes and 27 seconds', plogger.duration)