|
10 | 10 | else: |
11 | 11 | import unittest |
12 | 12 |
|
| 13 | +from unittest.mock import patch, call |
| 14 | + |
13 | 15 | class TestProvider(unittest.TestCase): |
14 | 16 | """ |
15 | 17 | Integration tests ~ provider class with as little mocking as possible. |
@@ -40,6 +42,32 @@ def test_publisher_shall_append_message(cls): |
40 | 42 | cls.assertEqual(len(pro.msg_queue), 1) |
41 | 43 | cls.assertEqual(pro.msg_queue[0], expected_msg) |
42 | 44 |
|
| 45 | + def test_provider_shall_update_affected_subscribers_with_published_messages(cls): |
| 46 | + pro = Provider() |
| 47 | + pub = Publisher(pro) |
| 48 | + sub1 = Subscriber('sub 1 name', pro) |
| 49 | + sub1.subscribe('sub 1 msg 1') |
| 50 | + sub1.subscribe('sub 1 msg 2') |
| 51 | + sub2 = Subscriber('sub 2 name', pro) |
| 52 | + sub2.subscribe('sub 2 msg 1') |
| 53 | + sub2.subscribe('sub 2 msg 2') |
| 54 | + with patch.object(sub1, 'run') as mock_subscriber1_run,\ |
| 55 | + patch.object(sub2, 'run') as mock_subscriber2_run: |
| 56 | + pro.update() |
| 57 | + cls.assertEqual(mock_subscriber1_run.call_count, 0) |
| 58 | + cls.assertEqual(mock_subscriber2_run.call_count, 0) |
| 59 | + pub.publish('sub 1 msg 1') |
| 60 | + pub.publish('sub 1 msg 2') |
| 61 | + pub.publish('sub 2 msg 1') |
| 62 | + pub.publish('sub 2 msg 2') |
| 63 | + with patch.object(sub1, 'run') as mock_subscriber1_run,\ |
| 64 | + patch.object(sub2, 'run') as mock_subscriber2_run: |
| 65 | + pro.update() |
| 66 | + expected_sub1_calls = [call('sub 1 msg 1'), call('sub 1 msg 2')] |
| 67 | + mock_subscriber1_run.assert_has_calls(expected_sub1_calls) |
| 68 | + expected_sub2_calls = [call('sub 2 msg 1'), call('sub 2 msg 2')] |
| 69 | + mock_subscriber2_run.assert_has_calls(expected_sub2_calls) |
| 70 | + |
43 | 71 | if __name__ == "__main__": |
44 | 72 | unittest.main() |
45 | 73 |
|
0 commit comments