aa-killtracker 0.16.0__py3-none-any.whl → 0.18.0a2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,9 +1,8 @@
1
+ import datetime as dt
1
2
  import unittest
2
- from datetime import timedelta
3
3
  from unittest.mock import patch
4
4
 
5
5
  import requests_mock
6
- from redis.exceptions import LockError
7
6
 
8
7
  from django.core.cache import cache
9
8
  from django.core.exceptions import ImproperlyConfigured
@@ -18,6 +17,7 @@ from killtracker.core.killmails import (
18
17
  ZKB_API_URL,
19
18
  ZKB_REDISQ_URL,
20
19
  Killmail,
20
+ ZKBTooManyRequestsError,
21
21
  _EntityCount,
22
22
  )
23
23
  from killtracker.exceptions import KillmailDoesNotExist
@@ -31,11 +31,12 @@ requests_mock.mock.case_sensitive = True
31
31
 
32
32
 
33
33
  @requests_mock.Mocker()
34
- @patch(MODULE_PATH + ".get_redis_client")
34
+ @patch(MODULE_PATH + ".cache")
35
35
  class TestCreateFromZkbRedisq(NoSocketsTestCase):
36
36
  @patch(MODULE_PATH + ".KILLTRACKER_QUEUE_ID", "dummy")
37
- def test_should_return_killmail(self, requests_mocker, mock_redis):
37
+ def test_should_return_killmail(self, requests_mocker, mock_cache):
38
38
  # given
39
+ mock_cache.get.return_value = None
39
40
  requests_mocker.register_uri(
40
41
  "GET",
41
42
  ZKB_REDISQ_URL,
@@ -48,7 +49,7 @@ class TestCreateFromZkbRedisq(NoSocketsTestCase):
48
49
  self.assertIsNotNone(killmail)
49
50
  self.assertEqual(killmail.id, 10000001)
50
51
  self.assertEqual(killmail.solar_system_id, 30004984)
51
- self.assertAlmostEqual(killmail.time, now(), delta=timedelta(seconds=120))
52
+ self.assertAlmostEqual(killmail.time, now(), delta=dt.timedelta(seconds=120))
52
53
  self.assertEqual(killmail.victim.alliance_id, 3011)
53
54
  self.assertEqual(killmail.victim.character_id, 1011)
54
55
  self.assertEqual(killmail.victim.corporation_id, 2011)
@@ -75,9 +76,10 @@ class TestCreateFromZkbRedisq(NoSocketsTestCase):
75
76
 
76
77
  @patch(MODULE_PATH + ".KILLTRACKER_QUEUE_ID", "dummy")
77
78
  def test_should_return_none_when_zkb_returns_empty_package(
78
- self, requests_mocker, mock_redis
79
+ self, requests_mocker, mock_cache
79
80
  ):
80
81
  # given
82
+ mock_cache.get.return_value = None
81
83
  requests_mocker.register_uri(
82
84
  "GET", ZKB_REDISQ_URL, status_code=200, json={"package": None}
83
85
  )
@@ -88,9 +90,10 @@ class TestCreateFromZkbRedisq(NoSocketsTestCase):
88
90
 
89
91
  @patch(MODULE_PATH + ".KILLTRACKER_QUEUE_ID", "dummy")
90
92
  def test_should_handle_zkb_data_has_no_solar_system(
91
- self, requests_mocker, mock_redis
93
+ self, requests_mocker, mock_cache
92
94
  ):
93
95
  # given
96
+ mock_cache.get.return_value = None
94
97
  requests_mocker.register_uri(
95
98
  "GET",
96
99
  ZKB_REDISQ_URL,
@@ -103,23 +106,48 @@ class TestCreateFromZkbRedisq(NoSocketsTestCase):
103
106
  self.assertIsNotNone(killmail)
104
107
 
105
108
  @patch(MODULE_PATH + ".KILLTRACKER_QUEUE_ID", "dummy")
106
- def test_should_return_none_when_zkb_returns_429_error(
107
- self, requests_mocker, mock_redis
108
- ):
109
+ def test_should_return_none_when_http_error(self, requests_mocker, mock_cache):
109
110
  # given
110
- requests_mocker.register_uri(
111
- "GET", ZKB_REDISQ_URL, status_code=429, text="429 too many requests"
112
- )
111
+ mock_cache.get.return_value = None
112
+ requests_mocker.register_uri("GET", ZKB_REDISQ_URL, status_code=500)
113
113
  # when
114
114
  killmail = Killmail.create_from_zkb_redisq()
115
115
  # then
116
116
  self.assertIsNone(killmail)
117
117
 
118
+ @patch(MODULE_PATH + ".KILLTRACKER_QUEUE_ID", "dummy")
119
+ def test_should_return_raise_too_many_requests_error(
120
+ self, requests_mocker, mock_cache
121
+ ):
122
+ # given
123
+ mock_cache.get.return_value = None
124
+ requests_mocker.register_uri(
125
+ "GET", ZKB_REDISQ_URL, status_code=429, text="429 too many requests"
126
+ )
127
+ # when/then
128
+ with self.assertRaises(ZKBTooManyRequestsError):
129
+ Killmail.create_from_zkb_redisq()
130
+
131
+ @patch(MODULE_PATH + ".KILLTRACKER_QUEUE_ID", "dummy")
132
+ def test_should_reraise_too_many_requests_error_when_ongoing(
133
+ self, requests_mocker, mock_cache
134
+ ):
135
+ # given
136
+ retry_at = now() + dt.timedelta(hours=3)
137
+ mock_cache.get.return_value = retry_at.isoformat()
138
+ requests_mocker.register_uri("GET", ZKB_REDISQ_URL, status_code=500)
139
+ # when/then
140
+ self.assertEqual(requests_mocker.call_count, 0)
141
+ with self.assertRaises(ZKBTooManyRequestsError) as ex:
142
+ Killmail.create_from_zkb_redisq()
143
+ self.assertEqual(retry_at, ex.exception.retry_at)
144
+
118
145
  @patch(MODULE_PATH + ".KILLTRACKER_QUEUE_ID", "dummy")
119
146
  def test_should_return_none_when_zkb_returns_general_error(
120
- self, requests_mocker, mock_redis
147
+ self, requests_mocker, mock_cache
121
148
  ):
122
149
  # given
150
+ mock_cache.get.return_value = None
123
151
  requests_mocker.register_uri(
124
152
  "GET",
125
153
  ZKB_REDISQ_URL,
@@ -135,9 +163,10 @@ You can only have one request to listen.php in flight at any time, otherwise you
135
163
 
136
164
  @patch(MODULE_PATH + ".KILLTRACKER_QUEUE_ID", "dummy")
137
165
  def test_should_return_none_when_zkb_does_not_return_json(
138
- self, requests_mocker, mock_redis
166
+ self, requests_mocker, mock_cache
139
167
  ):
140
168
  # given
169
+ mock_cache.get.return_value = None
141
170
  requests_mocker.register_uri(
142
171
  "GET", ZKB_REDISQ_URL, status_code=200, text="this is not JSON"
143
172
  )
@@ -146,18 +175,10 @@ You can only have one request to listen.php in flight at any time, otherwise you
146
175
  # then
147
176
  self.assertIsNone(killmail)
148
177
 
149
- @patch(MODULE_PATH + ".KILLTRACKER_QUEUE_ID", "dummy")
150
- def test_should_return_none_if_lock_not_acquired(self, requests_mocker, mock_redis):
151
- # given
152
- mock_redis.return_value.lock.side_effect = LockError
153
- # when
154
- killmail = Killmail.create_from_zkb_redisq()
155
- # then
156
- self.assertIsNone(killmail)
157
-
158
178
  @patch(MODULE_PATH + ".KILLTRACKER_QUEUE_ID", "Voltron9000")
159
- def test_should_have_queue_id_in_request(self, requests_mocker, mock_redis):
179
+ def test_should_have_queue_id_in_request(self, requests_mocker, mock_cache):
160
180
  # given
181
+ mock_cache.get.return_value = None
161
182
  requests_mocker.register_uri(
162
183
  "GET", ZKB_REDISQ_URL, status_code=200, json={"package": None}
163
184
  )
@@ -171,8 +192,9 @@ You can only have one request to listen.php in flight at any time, otherwise you
171
192
  self.assertEqual(queue_id[0], "Voltron9000")
172
193
 
173
194
  @patch(MODULE_PATH + ".KILLTRACKER_QUEUE_ID", "")
174
- def test_should_abort_when_no_queue_id_defined(self, requests_mocker, mock_redis):
195
+ def test_should_abort_when_no_queue_id_defined(self, requests_mocker, mock_cache):
175
196
  # given
197
+ mock_cache.get.return_value = None
176
198
  requests_mocker.register_uri(
177
199
  "GET", ZKB_REDISQ_URL, status_code=200, json={"package": None}
178
200
  )
@@ -181,8 +203,9 @@ You can only have one request to listen.php in flight at any time, otherwise you
181
203
  Killmail.create_from_zkb_redisq()
182
204
 
183
205
  @patch(MODULE_PATH + ".KILLTRACKER_QUEUE_ID", "Möchtegern")
184
- def test_should_urlize_queue_ids(self, requests_mocker, mock_redis):
206
+ def test_should_urlize_queue_ids(self, requests_mocker, mock_cache):
185
207
  # given
208
+ mock_cache.get.return_value = None
186
209
  requests_mocker.register_uri(
187
210
  "GET", ZKB_REDISQ_URL, status_code=200, json={"package": None}
188
211
  )
@@ -196,8 +219,9 @@ You can only have one request to listen.php in flight at any time, otherwise you
196
219
  self.assertEqual(queue_id[0], "M%C3%B6chtegern")
197
220
 
198
221
  @patch(MODULE_PATH + ".KILLTRACKER_QUEUE_ID", "alpha,bravo")
199
- def test_should_not_accept_list_for_queue_id(self, requests_mocker, mock_redis):
222
+ def test_should_not_accept_list_for_queue_id(self, requests_mocker, mock_cache):
200
223
  # given
224
+ mock_cache.get.return_value = None
201
225
  requests_mocker.register_uri(
202
226
  "GET", ZKB_REDISQ_URL, status_code=200, json={"package": None}
203
227
  )
@@ -205,6 +229,27 @@ You can only have one request to listen.php in flight at any time, otherwise you
205
229
  with self.assertRaises(ImproperlyConfigured):
206
230
  Killmail.create_from_zkb_redisq()
207
231
 
232
+ @patch(MODULE_PATH + ".sleep")
233
+ @patch(MODULE_PATH + ".KILLTRACKER_QUEUE_ID", "dummy")
234
+ def test_should_wait_until_next_slot_if_needed(
235
+ self, requests_mocker, mock_sleep, mock_cache
236
+ ):
237
+ def cache_get(v):
238
+ if v != "killtracker-last-request":
239
+ return None
240
+ return now().isoformat()
241
+
242
+ # given
243
+ mock_cache.get = cache_get
244
+ requests_mocker.register_uri(
245
+ "GET", ZKB_REDISQ_URL, status_code=200, json={"package": None}
246
+ )
247
+ # when
248
+ killmail = Killmail.create_from_zkb_redisq()
249
+ # then
250
+ self.assertIsNone(killmail)
251
+ self.assertTrue(mock_sleep.called)
252
+
208
253
 
209
254
  class TestKillmailSerialization(NoSocketsTestCase):
210
255
  def test_dict_serialization(self):
@@ -337,7 +382,7 @@ class TestCreateFromZkbApi(NoSocketsTestCase):
337
382
  killmail = Killmail.create_from_zkb_api(killmail_id)
338
383
  self.assertIsNotNone(killmail)
339
384
  self.assertEqual(killmail.id, killmail_id)
340
- self.assertAlmostEqual(killmail.time, now(), delta=timedelta(seconds=120))
385
+ self.assertAlmostEqual(killmail.time, now(), delta=dt.timedelta(seconds=120))
341
386
 
342
387
  self.assertEqual(killmail.victim.alliance_id, 3011)
343
388
  self.assertEqual(killmail.victim.character_id, 1011)
@@ -0,0 +1,34 @@
1
+ from unittest.mock import patch
2
+
3
+ from django.test import TestCase
4
+
5
+ from killtracker.core.worker_shutdown import is_shutting_down
6
+
7
+ MODULE_PATH = "killtracker.core.worker_shutdown"
8
+
9
+
10
+ class FakeTask:
11
+ class FakeRequest:
12
+ def __init__(self, hostname: str):
13
+ self.hostname = hostname
14
+
15
+ def __init__(self, hostname: str):
16
+ self.request = self.FakeRequest(hostname)
17
+
18
+
19
+ @patch(MODULE_PATH + ".cache")
20
+ class TestWorkerShutdown(TestCase):
21
+ def test_should_report_false_when_not_set(self, mock_cache):
22
+ mock_cache.get.return_value = None
23
+ got = is_shutting_down("dummy")
24
+ self.assertFalse(got)
25
+
26
+ def test_should_report_true_when_set(self, mock_cache):
27
+ mock_cache.get.return_value = "value"
28
+ got = is_shutting_down(FakeTask("dummy"))
29
+ self.assertTrue(got)
30
+
31
+ def test_should_report_false_when_task_not_valid(self, mock_cache):
32
+ mock_cache.get.return_value = "value"
33
+ got = is_shutting_down("invalid")
34
+ self.assertFalse(got)
@@ -848,7 +848,7 @@ class TestTrackerCalculateTrackerInfo(LoadTestDataMixin, NoSocketsTestCase):
848
848
  class TestTrackerEnqueueKillmail(LoadTestDataMixin, TestCase):
849
849
  def setUp(self) -> None:
850
850
  self.tracker = TrackerFactory(name="My Tracker", webhook=self.webhook_1)
851
- self.webhook_1.main_queue.clear()
851
+ self.webhook_1._main_queue.clear()
852
852
 
853
853
  @patch(MODELS_PATH + ".webhooks.KILLTRACKER_WEBHOOK_SET_AVATAR", True)
854
854
  @patch("eveuniverse.models.universe_2.esi")
@@ -866,8 +866,8 @@ class TestTrackerEnqueueKillmail(LoadTestDataMixin, TestCase):
866
866
 
867
867
  self.tracker.generate_killmail_message(Killmail.from_json(killmail.asjson()))
868
868
 
869
- self.assertEqual(self.webhook_1.main_queue.size(), 1)
870
- message = json.loads(self.webhook_1.main_queue.dequeue())
869
+ self.assertEqual(self.webhook_1._main_queue.size(), 1)
870
+ message = json.loads(self.webhook_1._main_queue.dequeue())
871
871
 
872
872
  self.assertEqual(message["username"], "Killtracker")
873
873
  self.assertIsNotNone(message["avatar_url"])
@@ -893,8 +893,8 @@ class TestTrackerEnqueueKillmail(LoadTestDataMixin, TestCase):
893
893
 
894
894
  self.tracker.generate_killmail_message(Killmail.from_json(killmail.asjson()))
895
895
 
896
- self.assertEqual(self.webhook_1.main_queue.size(), 1)
897
- message = json.loads(self.webhook_1.main_queue.dequeue())
896
+ self.assertEqual(self.webhook_1._main_queue.size(), 1)
897
+ message = json.loads(self.webhook_1._main_queue.dequeue())
898
898
  self.assertNotIn("username", message)
899
899
  self.assertNotIn("avatar_url", message)
900
900
  self.assertIn("My Tracker", message["content"])
@@ -906,8 +906,8 @@ class TestTrackerEnqueueKillmail(LoadTestDataMixin, TestCase):
906
906
 
907
907
  self.tracker.generate_killmail_message(Killmail.from_json(killmail.asjson()))
908
908
 
909
- self.assertEqual(self.webhook_1.main_queue.size(), 1)
910
- message = json.loads(self.webhook_1.main_queue.dequeue())
909
+ self.assertEqual(self.webhook_1._main_queue.size(), 1)
910
+ message = json.loads(self.webhook_1._main_queue.dequeue())
911
911
  self.assertIn("| Fleetkill", message["embeds"][0]["title"])
912
912
 
913
913
  def test_can_add_intro_text(self):
@@ -915,8 +915,8 @@ class TestTrackerEnqueueKillmail(LoadTestDataMixin, TestCase):
915
915
 
916
916
  self.tracker.generate_killmail_message(killmail, intro_text="Intro Text")
917
917
 
918
- self.assertEqual(self.webhook_1.main_queue.size(), 1)
919
- message = json.loads(self.webhook_1.main_queue.dequeue())
918
+ self.assertEqual(self.webhook_1._main_queue.size(), 1)
919
+ message = json.loads(self.webhook_1._main_queue.dequeue())
920
920
  self.assertIn("Intro Text", message["content"])
921
921
 
922
922
  def test_without_tracker_info(self):
@@ -924,7 +924,7 @@ class TestTrackerEnqueueKillmail(LoadTestDataMixin, TestCase):
924
924
 
925
925
  self.tracker.generate_killmail_message(Killmail.from_json(killmail.asjson()))
926
926
 
927
- self.assertEqual(self.webhook_1.main_queue.size(), 1)
927
+ self.assertEqual(self.webhook_1._main_queue.size(), 1)
928
928
 
929
929
  def test_can_ping_everybody(self):
930
930
  tracker = TrackerFactory(
@@ -935,8 +935,8 @@ class TestTrackerEnqueueKillmail(LoadTestDataMixin, TestCase):
935
935
 
936
936
  tracker.generate_killmail_message(Killmail.from_json(killmail.asjson()))
937
937
 
938
- self.assertEqual(self.webhook_1.main_queue.size(), 1)
939
- message = json.loads(self.webhook_1.main_queue.dequeue())
938
+ self.assertEqual(self.webhook_1._main_queue.size(), 1)
939
+ message = json.loads(self.webhook_1._main_queue.dequeue())
940
940
  self.assertIn("@everybody", message["content"])
941
941
 
942
942
  def test_can_ping_here(self):
@@ -947,8 +947,8 @@ class TestTrackerEnqueueKillmail(LoadTestDataMixin, TestCase):
947
947
 
948
948
  self.tracker.generate_killmail_message(Killmail.from_json(killmail.asjson()))
949
949
 
950
- self.assertEqual(self.webhook_1.main_queue.size(), 1)
951
- message = json.loads(self.webhook_1.main_queue.dequeue())
950
+ self.assertEqual(self.webhook_1._main_queue.size(), 1)
951
+ message = json.loads(self.webhook_1._main_queue.dequeue())
952
952
  self.assertIn("@here", message["content"])
953
953
 
954
954
  def test_can_ping_nobody(self):
@@ -958,8 +958,8 @@ class TestTrackerEnqueueKillmail(LoadTestDataMixin, TestCase):
958
958
 
959
959
  self.tracker.generate_killmail_message(Killmail.from_json(killmail.asjson()))
960
960
 
961
- self.assertEqual(self.webhook_1.main_queue.size(), 1)
962
- message = json.loads(self.webhook_1.main_queue.dequeue())
961
+ self.assertEqual(self.webhook_1._main_queue.size(), 1)
962
+ message = json.loads(self.webhook_1._main_queue.dequeue())
963
963
  self.assertNotIn("@everybody", message["content"])
964
964
  self.assertNotIn("@here", message["content"])
965
965
 
@@ -970,8 +970,8 @@ class TestTrackerEnqueueKillmail(LoadTestDataMixin, TestCase):
970
970
 
971
971
  self.tracker.generate_killmail_message(Killmail.from_json(killmail.asjson()))
972
972
 
973
- self.assertEqual(self.webhook_1.main_queue.size(), 1)
974
- message = json.loads(self.webhook_1.main_queue.dequeue())
973
+ self.assertEqual(self.webhook_1._main_queue.size(), 1)
974
+ message = json.loads(self.webhook_1._main_queue.dequeue())
975
975
  self.assertNotIn("Ping Nobody", message["content"])
976
976
 
977
977
  def test_can_send_npc_killmail(self):
@@ -979,28 +979,28 @@ class TestTrackerEnqueueKillmail(LoadTestDataMixin, TestCase):
979
979
 
980
980
  self.tracker.generate_killmail_message(Killmail.from_json(killmail.asjson()))
981
981
 
982
- self.assertEqual(self.webhook_1.main_queue.size(), 1)
982
+ self.assertEqual(self.webhook_1._main_queue.size(), 1)
983
983
 
984
984
  def test_can_handle_victim_without_character(self):
985
985
  killmail = self.tracker.process_killmail(load_killmail(10000501))
986
986
 
987
987
  self.tracker.generate_killmail_message(Killmail.from_json(killmail.asjson()))
988
988
 
989
- self.assertEqual(self.webhook_1.main_queue.size(), 1)
989
+ self.assertEqual(self.webhook_1._main_queue.size(), 1)
990
990
 
991
991
  def test_can_handle_victim_without_corporation(self):
992
992
  killmail = self.tracker.process_killmail(load_killmail(10000502))
993
993
 
994
994
  self.tracker.generate_killmail_message(Killmail.from_json(killmail.asjson()))
995
995
 
996
- self.assertEqual(self.webhook_1.main_queue.size(), 1)
996
+ self.assertEqual(self.webhook_1._main_queue.size(), 1)
997
997
 
998
998
  def test_can_handle_final_attacker_with_no_character(self):
999
999
  killmail = self.tracker.process_killmail(load_killmail(10000503))
1000
1000
 
1001
1001
  self.tracker.generate_killmail_message(Killmail.from_json(killmail.asjson()))
1002
1002
 
1003
- self.assertEqual(self.webhook_1.main_queue.size(), 1)
1003
+ self.assertEqual(self.webhook_1._main_queue.size(), 1)
1004
1004
 
1005
1005
  def test_can_handle_matching_type_ids(self):
1006
1006
  svipul = EveType.objects.get(id=34562)
@@ -1009,4 +1009,4 @@ class TestTrackerEnqueueKillmail(LoadTestDataMixin, TestCase):
1009
1009
 
1010
1010
  self.tracker.generate_killmail_message(Killmail.from_json(killmail.asjson()))
1011
1011
 
1012
- self.assertEqual(self.webhook_1.main_queue.size(), 1)
1012
+ self.assertEqual(self.webhook_1._main_queue.size(), 1)
@@ -8,6 +8,7 @@ from eveuniverse.models import EveConstellation, EveRegion, EveSolarSystem, EveT
8
8
 
9
9
  from app_utils.testing import NoSocketsTestCase
10
10
 
11
+ from killtracker.core.discord_messages import DiscordMessage
11
12
  from killtracker.core.killmails import Killmail
12
13
  from killtracker.tests.testdata.factories import TrackerFactory
13
14
  from killtracker.tests.testdata.helpers import LoadTestDataMixin, load_killmail
@@ -107,10 +108,10 @@ class TestTrackerGenerateKillmailMessage(LoadTestDataMixin, TestCase):
107
108
  # when
108
109
  self.tracker.generate_killmail_message(killmail_json)
109
110
  # then
110
- _, kwargs = mock_enqueue_message.call_args
111
- content = kwargs["content"]
112
- self.assertIn("My Tracker", content)
113
- embed = kwargs["embeds"][0]
111
+ arg, _ = mock_enqueue_message.call_args
112
+ message: DiscordMessage = arg[0]
113
+ self.assertIn("My Tracker", message.content)
114
+ embed = message.embeds[0]
114
115
  self.assertEqual(embed.title, "Haras | Svipul | Killmail")
115
116
  self.assertEqual(embed.thumbnail.url, svipul.icon_url(size=128))
116
117
  html = markdown(embed.description)
@@ -1,63 +1,77 @@
1
- import json
2
-
3
- import dhooks_lite
4
1
  import requests_mock
5
2
 
6
3
  from django.core.cache import cache
7
4
  from django.test import TestCase
8
5
 
9
- from app_utils.json import JSONDateTimeDecoder
10
-
6
+ from killtracker.core.discord_messages import DiscordMessage
11
7
  from killtracker.exceptions import WebhookTooManyRequests
12
8
  from killtracker.models import Webhook
13
9
  from killtracker.tests.testdata.helpers import LoadTestDataMixin
14
10
 
15
11
 
16
- class TestWebhookQueue(LoadTestDataMixin, TestCase):
12
+ class TestWebhookQueue(TestCase):
17
13
  @classmethod
18
14
  def setUpClass(cls):
19
15
  super().setUpClass()
16
+ cls.webhook_1 = Webhook.objects.create(
17
+ name="Webhook 1", url="http://www.example.com/webhook_1", is_enabled=True
18
+ )
20
19
 
21
20
  def setUp(self) -> None:
22
- self.webhook_1.main_queue.clear()
23
- self.webhook_1.error_queue.clear()
21
+ self.webhook_1._main_queue.clear()
22
+ self.webhook_1._error_queue.clear()
24
23
 
25
24
  def test_reset_failed_messages(self):
26
25
  message = "Test message"
27
- self.webhook_1.error_queue.enqueue(message)
28
- self.webhook_1.error_queue.enqueue(message)
29
- self.assertEqual(self.webhook_1.error_queue.size(), 2)
30
- self.assertEqual(self.webhook_1.main_queue.size(), 0)
26
+ self.webhook_1._error_queue.enqueue(message)
27
+ self.webhook_1._error_queue.enqueue(message)
28
+ self.assertEqual(self.webhook_1._error_queue.size(), 2)
29
+ self.assertEqual(self.webhook_1._main_queue.size(), 0)
31
30
  self.webhook_1.reset_failed_messages()
32
- self.assertEqual(self.webhook_1.error_queue.size(), 0)
33
- self.assertEqual(self.webhook_1.main_queue.size(), 2)
34
-
35
- def test_discord_message_asjson_normal(self):
36
- embed = dhooks_lite.Embed(description="my_description")
37
- result = Webhook._discord_message_asjson(
38
- content="my_content",
39
- username="my_username",
40
- avatar_url="my_avatar_url",
41
- embeds=[embed],
42
- )
43
- message_python = json.loads(result, cls=JSONDateTimeDecoder)
44
- expected = {
45
- "content": "my_content",
46
- "embeds": [{"description": "my_description", "type": "rich"}],
47
- "username": "my_username",
48
- "avatar_url": "my_avatar_url",
49
- }
50
- self.assertDictEqual(message_python, expected)
51
-
52
- def test_discord_message_asjson_empty(self):
53
- with self.assertRaises(ValueError):
54
- Webhook._discord_message_asjson("")
31
+ self.assertEqual(self.webhook_1._error_queue.size(), 0)
32
+ self.assertEqual(self.webhook_1._main_queue.size(), 2)
33
+
34
+ def test_should_enqueue_and_dequeue_message_from_main_queue(self):
35
+ m1 = DiscordMessage(content="content")
36
+ self.webhook_1.enqueue_message(m1)
37
+ m2 = self.webhook_1.dequeue_message()
38
+ self.assertEqual(m1, m2)
39
+
40
+ def test_should_enqueue_and_dequeue_message_from_error_queue(self):
41
+ m1 = DiscordMessage(content="content")
42
+ self.webhook_1.enqueue_message(m1, is_error=True)
43
+ m2 = self.webhook_1.dequeue_message(is_error=True)
44
+ self.assertEqual(m1, m2)
45
+
46
+ def test_should_return_size_of_main_queue(self):
47
+ m1 = DiscordMessage(content="content")
48
+ self.webhook_1.enqueue_message(m1)
49
+ self.assertEqual(self.webhook_1.messages_queued(), 1)
50
+
51
+ def test_should_return_size_of_error_queue(self):
52
+ m1 = DiscordMessage(content="content")
53
+ self.webhook_1.enqueue_message(m1, is_error=True)
54
+ self.assertEqual(self.webhook_1.messages_queued(is_error=True), 1)
55
+
56
+ def test_should_clear_main_queue(self):
57
+ m1 = DiscordMessage(content="content")
58
+ self.webhook_1.enqueue_message(m1)
59
+ self.assertEqual(self.webhook_1.messages_queued(), 1)
60
+ self.webhook_1.delete_queued_messages()
61
+ self.assertEqual(self.webhook_1.messages_queued(), 0)
62
+
63
+ def test_should_clear_error_queue(self):
64
+ m1 = DiscordMessage(content="content")
65
+ self.webhook_1.enqueue_message(m1, is_error=True)
66
+ self.assertEqual(self.webhook_1.messages_queued(is_error=True), 1)
67
+ self.webhook_1.delete_queued_messages(is_error=True)
68
+ self.assertEqual(self.webhook_1.messages_queued(is_error=True), 0)
55
69
 
56
70
 
57
71
  @requests_mock.Mocker()
58
72
  class TestWebhookSendMessage(LoadTestDataMixin, TestCase):
59
73
  def setUp(self) -> None:
60
- self.message = Webhook._discord_message_asjson(content="Test message")
74
+ self.message = DiscordMessage(content="Test message")
61
75
  cache.clear()
62
76
 
63
77
  def test_when_send_ok_returns_true(self, requests_mocker):
@@ -85,7 +99,7 @@ class TestWebhookSendMessage(LoadTestDataMixin, TestCase):
85
99
  },
86
100
  )
87
101
  # when
88
- response = self.webhook_1.send_message_to_webhook(self.message)
102
+ response = self.webhook_1.send_message(self.message)
89
103
  # then
90
104
  self.assertTrue(response.status_ok)
91
105
  self.assertTrue(requests_mocker.called)
@@ -94,7 +108,7 @@ class TestWebhookSendMessage(LoadTestDataMixin, TestCase):
94
108
  # given
95
109
  requests_mocker.register_uri("POST", self.webhook_1.url, status_code=404)
96
110
  # when
97
- response = self.webhook_1.send_message_to_webhook(self.message)
111
+ response = self.webhook_1.send_message(self.message)
98
112
  # then
99
113
  self.assertFalse(response.status_ok)
100
114
  self.assertTrue(requests_mocker.called)
@@ -118,7 +132,7 @@ class TestWebhookSendMessage(LoadTestDataMixin, TestCase):
118
132
  )
119
133
  # when/then
120
134
  try:
121
- self.webhook_1.send_message_to_webhook(self.message)
135
+ self.webhook_1.send_message(self.message)
122
136
  except Exception as ex:
123
137
  self.assertIsInstance(ex, WebhookTooManyRequests)
124
138
  self.assertEqual(ex.retry_after, 2002)
@@ -142,7 +156,7 @@ class TestWebhookSendMessage(LoadTestDataMixin, TestCase):
142
156
  )
143
157
  # when/then
144
158
  try:
145
- self.webhook_1.send_message_to_webhook(self.message)
159
+ self.webhook_1.send_message(self.message)
146
160
  except Exception as ex:
147
161
  self.assertIsInstance(ex, WebhookTooManyRequests)
148
162
  self.assertEqual(ex.retry_after, WebhookTooManyRequests.DEFAULT_RESET_AFTER)
@@ -3,7 +3,6 @@ from unittest.mock import patch
3
3
  import dhooks_lite
4
4
  import requests_mock
5
5
 
6
- from django.core.cache import cache
7
6
  from django.test import TestCase
8
7
  from django.test.utils import override_settings
9
8
 
@@ -12,6 +11,7 @@ from killtracker.core.killmails import ZKB_REDISQ_URL
12
11
 
13
12
  from .testdata.factories import TrackerFactory
14
13
  from .testdata.helpers import LoadTestDataMixin, killmails_data
14
+ from .utils import reset_celery_once_locks
15
15
 
16
16
  PACKAGE_PATH = "killtracker"
17
17
 
@@ -26,7 +26,7 @@ class TestTasksEnd2End(LoadTestDataMixin, TestCase):
26
26
  @classmethod
27
27
  def setUpClass(cls) -> None:
28
28
  super().setUpClass()
29
- cache.clear()
29
+ reset_celery_once_locks()
30
30
  cls.tracker_1 = TrackerFactory(
31
31
  name="My Tracker",
32
32
  exclude_null_sec=True,