aa-ledger 0.9.9__py3-none-any.whl → 0.9.9.1__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.
Files changed (77) hide show
  1. {aa_ledger-0.9.9.dist-info → aa_ledger-0.9.9.1.dist-info}/METADATA +1 -1
  2. {aa_ledger-0.9.9.dist-info → aa_ledger-0.9.9.1.dist-info}/RECORD +77 -77
  3. ledger/__init__.py +9 -9
  4. ledger/api/api_helper/billboard_helper.py +277 -277
  5. ledger/api/ledger/admin.py +289 -289
  6. ledger/app_settings.py +50 -50
  7. ledger/constants.py +5 -0
  8. ledger/decorators.py +92 -11
  9. ledger/helpers/alliance.py +353 -334
  10. ledger/helpers/character.py +260 -260
  11. ledger/helpers/core.py +565 -565
  12. ledger/helpers/corporation.py +455 -421
  13. ledger/helpers/etag.py +237 -237
  14. ledger/helpers/ref_type.py +475 -475
  15. ledger/locale/cs_CZ/LC_MESSAGES/django.po +942 -942
  16. ledger/locale/de/LC_MESSAGES/django.po +961 -961
  17. ledger/locale/django.pot +942 -942
  18. ledger/locale/es/LC_MESSAGES/django.po +943 -943
  19. ledger/locale/fr_FR/LC_MESSAGES/django.po +942 -942
  20. ledger/locale/it_IT/LC_MESSAGES/django.po +942 -942
  21. ledger/locale/ja/LC_MESSAGES/django.po +943 -943
  22. ledger/locale/ko_KR/LC_MESSAGES/django.po +942 -942
  23. ledger/locale/nl_NL/LC_MESSAGES/django.po +942 -942
  24. ledger/locale/pl_PL/LC_MESSAGES/django.po +942 -942
  25. ledger/locale/ru/LC_MESSAGES/django.po +945 -945
  26. ledger/locale/sk/LC_MESSAGES/django.po +944 -944
  27. ledger/locale/uk/LC_MESSAGES/django.po +946 -946
  28. ledger/locale/zh_Hans/LC_MESSAGES/django.po +943 -943
  29. ledger/managers/character_mining_manager.py +239 -239
  30. ledger/managers/character_planetary_manager.py +1 -1
  31. ledger/migrations/0016_characterminingledger_price_per_unit.py +21 -21
  32. ledger/models/characteraudit.py +496 -496
  33. ledger/static/ledger/css/cards.css +1 -1
  34. ledger/static/ledger/css/table.css +1 -1
  35. ledger/static/ledger/js/charts.js +221 -221
  36. ledger/static/ledger/js/planetary.js +143 -143
  37. ledger/tasks.py +442 -449
  38. ledger/templates/ledger/allyledger/admin/alliance_administration.html +46 -46
  39. ledger/templates/ledger/allyledger/admin/alliance_overview.html +108 -108
  40. ledger/templates/ledger/allyledger/alliance_ledger.html +86 -86
  41. ledger/templates/ledger/bundles/ally-administration-bundles.html +59 -59
  42. ledger/templates/ledger/bundles/char-administration-bundles.html +66 -66
  43. ledger/templates/ledger/bundles/character-ledger-bundles.html +66 -66
  44. ledger/templates/ledger/bundles/corp-administration-bundles.html +68 -68
  45. ledger/templates/ledger/bundles/corporation-ledger-bundles.html +75 -75
  46. ledger/templates/ledger/charledger/admin/character_administration.html +39 -39
  47. ledger/templates/ledger/charledger/admin/character_overview.html +106 -106
  48. ledger/templates/ledger/charledger/character_ledger.html +94 -94
  49. ledger/templates/ledger/charledger/planetary/planetary_ledger.html +54 -54
  50. ledger/templates/ledger/corpledger/admin/corporation_administration.html +39 -39
  51. ledger/templates/ledger/corpledger/admin/corporation_overview.html +108 -108
  52. ledger/templates/ledger/corpledger/corporation_ledger.html +129 -86
  53. ledger/templates/ledger/partials/administration/alliance.html +37 -37
  54. ledger/templates/ledger/partials/administration/alliance_corporations.html +58 -58
  55. ledger/templates/ledger/partials/administration/corporation_characters.html +34 -34
  56. ledger/templates/ledger/partials/information/daily.html +56 -56
  57. ledger/templates/ledger/partials/information/day.html +48 -48
  58. ledger/templates/ledger/partials/information/hourly.html +53 -53
  59. ledger/templates/ledger/partials/information/summary.html +88 -88
  60. ledger/templates/ledger/partials/information/view_character_content.html +35 -35
  61. ledger/templates/ledger/partials/table/char-ledger.html +85 -85
  62. ledger/templates/ledger/partials/table/corp-ledger.html +66 -66
  63. ledger/templates/ledger/partials/view/card.html +160 -160
  64. ledger/tests/test_decarators.py +102 -17
  65. ledger/tests/test_helpers/test_etag.py +149 -149
  66. ledger/tests/test_managers/test_character_mining_manager.py +54 -54
  67. ledger/tests/test_models/test_characterminingledger.py +107 -106
  68. ledger/tests/test_tasks.py +282 -282
  69. ledger/tests/test_templatetags.py +5 -2
  70. ledger/tests/test_views/test_access.py +852 -852
  71. ledger/tests/testdata/esi.json +1 -2
  72. ledger/tests/testdata/eveuniverse.json +391 -391
  73. ledger/urls.py +66 -21
  74. ledger/views/alliance/alliance_ledger.py +203 -203
  75. ledger/views/corporation/corporation_ledger.py +25 -9
  76. {aa_ledger-0.9.9.dist-info → aa_ledger-0.9.9.1.dist-info}/WHEEL +0 -0
  77. {aa_ledger-0.9.9.dist-info → aa_ledger-0.9.9.1.dist-info}/licenses/LICENSE +0 -0
@@ -1,852 +1,852 @@
1
- """TestView class."""
2
-
3
- # Standard Library
4
- from http import HTTPStatus
5
- from unittest.mock import Mock, patch
6
-
7
- # Django
8
- from django.contrib.messages.middleware import MessageMiddleware
9
- from django.contrib.sessions.middleware import SessionMiddleware
10
- from django.test import RequestFactory, TestCase
11
- from django.urls import reverse
12
-
13
- # Alliance Auth (External Libs)
14
- from app_utils.testing import (
15
- create_user_from_evecharacter,
16
- )
17
-
18
- # AA Ledger
19
- from ledger.tests.testdata.generate_characteraudit import (
20
- add_characteraudit_character_to_user,
21
- create_user_from_evecharacter_with_access,
22
- )
23
- from ledger.tests.testdata.generate_corporationaudit import (
24
- add_corporationaudit_corporation_to_user,
25
- )
26
- from ledger.tests.testdata.load_allianceauth import load_allianceauth
27
- from ledger.tests.testdata.load_eveuniverse import load_eveuniverse
28
- from ledger.views import index
29
- from ledger.views.alliance import alliance_ledger
30
- from ledger.views.character import character_ledger, planetary
31
- from ledger.views.corporation import corporation_ledger
32
-
33
- INDEX_PATH = "ledger.views.index"
34
- CHARLEDGER_PATH = "ledger.views.character.character_ledger"
35
- CORPLEDGER_PATH = "ledger.views.corporation.corporation_ledger"
36
- ALLYLEDGER_PATH = "ledger.views.alliance.alliance_ledger"
37
-
38
-
39
- @patch(INDEX_PATH + ".messages")
40
- class TestViewIndexAccess(TestCase):
41
- @classmethod
42
- def setUpClass(cls):
43
- super().setUpClass()
44
- load_allianceauth()
45
- load_eveuniverse()
46
-
47
- cls.factory = RequestFactory()
48
- cls.user, cls.character_ownership = create_user_from_evecharacter_with_access(
49
- 1002
50
- )
51
- cls.superuser, cls.character_ownership = (
52
- create_user_from_evecharacter_with_access(1001)
53
- )
54
-
55
- def test_admin(self, mock_messages):
56
- """Test admin access."""
57
- # given
58
- self.superuser.is_superuser = True
59
- self.superuser.save()
60
-
61
- request = self.factory.get(reverse("ledger:admin"))
62
- request.user = self.superuser
63
- # when
64
- response = index.admin(request)
65
- # then
66
- self.assertEqual(response.status_code, HTTPStatus.OK)
67
- self.assertContains(response, "Administration")
68
-
69
- def test_admin_no_access(self, mock_messages):
70
- """Test admin access."""
71
- # given
72
- request = self.factory.get(reverse("ledger:admin"))
73
- request.user = self.user
74
-
75
- middleware = SessionMiddleware(Mock())
76
- middleware.process_request(request)
77
- # when
78
- response = index.admin(request)
79
- # then
80
- self.assertEqual(response.status_code, HTTPStatus.FOUND)
81
- self.assertTrue(mock_messages.error.called)
82
-
83
- def test_admin_clear_all_etags(self, mock_messages):
84
- """Test clear all etags."""
85
- # given
86
- self.superuser.is_superuser = True
87
- self.superuser.save()
88
- request = self.factory.post(
89
- reverse("ledger:admin"), data={"run_clear_etag": True}
90
- )
91
- request.user = self.superuser
92
-
93
- middleware = SessionMiddleware(Mock())
94
- middleware.process_request(request)
95
- # when
96
- response = index.admin(request)
97
- # then
98
- self.assertEqual(response.status_code, HTTPStatus.OK)
99
- mock_messages.info.assert_called_once_with(request, "Queued Clear All ETags")
100
-
101
- def test_force_refresh(self, mock_messages):
102
- """Test force refresh."""
103
- # given
104
- self.superuser.is_superuser = True
105
- self.superuser.save()
106
- request = self.factory.post(
107
- reverse("ledger:admin"), data={"force_refresh": True}
108
- )
109
- request.user = self.superuser
110
-
111
- middleware = SessionMiddleware(Mock())
112
- middleware.process_request(request)
113
- # when
114
- response = index.admin(request)
115
- # then
116
- self.assertEqual(response.status_code, HTTPStatus.OK)
117
-
118
- def test_run_char_updates(self, mock_messages):
119
- """Test run char updates."""
120
- # given
121
- self.superuser.is_superuser = True
122
- self.superuser.save()
123
- request = self.factory.post(
124
- reverse("ledger:admin"), data={"run_char_updates": True}
125
- )
126
- request.user = self.superuser
127
-
128
- middleware = SessionMiddleware(Mock())
129
- middleware.process_request(request)
130
- # when
131
- response = index.admin(request)
132
- # then
133
- self.assertEqual(response.status_code, HTTPStatus.OK)
134
- mock_messages.info.assert_called_once_with(
135
- request, "Queued Update All Characters"
136
- )
137
-
138
- def test_run_corp_updates(self, mock_messages):
139
- """Test Run corp updates."""
140
- # given
141
- self.superuser.is_superuser = True
142
- self.superuser.save()
143
- request = self.factory.post(
144
- reverse("ledger:admin"), data={"run_corp_updates": True}
145
- )
146
- request.user = self.superuser
147
-
148
- middleware = SessionMiddleware(Mock())
149
- middleware.process_request(request)
150
- # when
151
- response = index.admin(request)
152
- # then
153
- self.assertEqual(response.status_code, HTTPStatus.OK)
154
- mock_messages.info.assert_called_once_with(
155
- request, "Queued Update All Corporations"
156
- )
157
-
158
-
159
- class TestViewCharacterLedgerAccess(TestCase):
160
- @classmethod
161
- def setUpClass(cls):
162
- super().setUpClass()
163
- load_allianceauth()
164
- load_eveuniverse()
165
-
166
- cls.factory = RequestFactory()
167
- cls.user, cls.character_ownership = create_user_from_evecharacter_with_access(
168
- 1001
169
- )
170
- cls.user2, cls.character_ownership2 = create_user_from_evecharacter_with_access(
171
- 1002
172
- )
173
- cls.audit = add_characteraudit_character_to_user(
174
- cls.user, cls.character_ownership.character.character_id
175
- )
176
-
177
- def test_view_character_ledger(self):
178
- """Test view character ledger."""
179
- # given
180
- request = self.factory.get(
181
- reverse(
182
- "ledger:character_ledger",
183
- args=[self.character_ownership.character.character_id],
184
- )
185
- )
186
- request.user = self.user
187
- # when
188
- response = character_ledger.character_ledger(
189
- request, self.character_ownership.character.character_id
190
- )
191
- # then
192
- self.assertEqual(response.status_code, HTTPStatus.OK)
193
- self.assertContains(response, "Character Ledger")
194
-
195
- @patch(CHARLEDGER_PATH + ".messages")
196
- def test_view_character_ledger_without_permission(self, mock_messages):
197
- """Test view character ledger without permission."""
198
- # given
199
- request = self.factory.get(reverse("ledger:character_ledger", args=[1003]))
200
- request.user = self.user
201
-
202
- # Add session middleware to process the request
203
- middleware = SessionMiddleware(Mock())
204
- middleware.process_request(request)
205
- message_middleware = MessageMiddleware(Mock())
206
- message_middleware.process_request(request)
207
- # when
208
- response = character_ledger.character_ledger(request, 1003)
209
- # then
210
- self.assertEqual(response.status_code, HTTPStatus.OK)
211
- self.assertContains(response, "Character Ledger")
212
- self.assertTrue(mock_messages.error.called)
213
-
214
- def test_view_character_details(self):
215
- """Test view character details."""
216
- # given
217
- request = self.factory.get(
218
- reverse(
219
- "ledger:character_details_year",
220
- args=[self.character_ownership.character.character_id, 2025],
221
- )
222
- )
223
- request.user = self.user
224
- # when
225
- response = character_ledger.character_details(
226
- request, self.character_ownership.character.character_id, year=2025
227
- )
228
- # then
229
- self.assertEqual(response.status_code, HTTPStatus.OK)
230
- self.assertContains(
231
- response,
232
- "No ratting data found...",
233
- )
234
-
235
- def test_view_character_details_no_permission(self):
236
- """Test view character details."""
237
- # given
238
- request = self.factory.get(
239
- reverse(
240
- "ledger:character_details_year",
241
- args=[self.character_ownership.character.character_id, 2025],
242
- )
243
- )
244
- request.user = self.user2
245
-
246
- # when
247
- response = character_ledger.character_details(
248
- request, self.character_ownership.character.character_id, year=2025
249
- )
250
- # then
251
- self.assertEqual(response.status_code, HTTPStatus.OK)
252
- self.assertContains(response, "Permission Denied")
253
-
254
- def test_view_character_overview(self):
255
- """Test view character overview."""
256
- # given
257
- request = self.factory.get(reverse("ledger:character_overview"))
258
- request.user = self.user
259
- # when
260
- response = character_ledger.character_overview(request)
261
- # then
262
- self.assertEqual(response.status_code, HTTPStatus.OK)
263
- self.assertContains(response, "Character Overview")
264
-
265
- def test_view_character_administration(self):
266
- """Test view character administration."""
267
- # given
268
- request = self.factory.get(
269
- reverse(
270
- "ledger:character_administration",
271
- args=[self.character_ownership.character.character_id],
272
- )
273
- )
274
- request.user = self.user
275
- # when
276
- response = character_ledger.character_administration(
277
- request, self.character_ownership.character.character_id
278
- )
279
- # then
280
- self.assertEqual(response.status_code, HTTPStatus.OK)
281
- self.assertContains(response, "Administration")
282
-
283
- def test_view_character_administration_withouth_character_id(self):
284
- """Test view character administration."""
285
- # given
286
- request = self.factory.get(
287
- reverse(
288
- "ledger:character_administration",
289
- args=[self.character_ownership.character.character_id],
290
- )
291
- )
292
- request.user = self.user
293
- # when
294
- response = character_ledger.character_administration(request)
295
- # then
296
- self.assertEqual(response.status_code, HTTPStatus.OK)
297
- self.assertContains(response, "Administration")
298
-
299
- @patch(CHARLEDGER_PATH + ".messages")
300
- def test_view_character_administration_no_permission(self, mock_messages):
301
- """Test view character administration."""
302
- # given
303
- request = self.factory.get(
304
- reverse("ledger:character_administration", args=[1002])
305
- )
306
- request.user = self.user
307
- middleware = SessionMiddleware(Mock())
308
- middleware.process_request(request)
309
- # when
310
- response = character_ledger.character_administration(request, 1002)
311
- # then
312
- self.assertEqual(response.status_code, HTTPStatus.FOUND)
313
- mock_messages.error.assert_called_once_with(request, "Permission Denied")
314
-
315
-
316
- class TestViewCorporationLedgerAccess(TestCase):
317
- @classmethod
318
- def setUpClass(cls):
319
- super().setUpClass()
320
- load_allianceauth()
321
- load_eveuniverse()
322
-
323
- cls.factory = RequestFactory()
324
- cls.user, cls.character_ownership = create_user_from_evecharacter(
325
- 1001,
326
- permissions=[
327
- "ledger.basic_access",
328
- "ledger.advanced_access",
329
- "ledger.manage_access",
330
- "ledger.corp_audit_manager",
331
- ],
332
- )
333
- cls.user_no_perm, cls.character_ownership_no_perm = (
334
- create_user_from_evecharacter(
335
- 1002,
336
- permissions=[
337
- "ledger.basic_access",
338
- "ledger.advanced_access",
339
- "ledger.manage_access",
340
- ],
341
- )
342
- )
343
- cls.audit = add_corporationaudit_corporation_to_user(cls.user, 1001)
344
-
345
- def test_view_corporation_ledger_index(self):
346
- """Test view corporation ledger index."""
347
- # given
348
- request = self.factory.get(reverse("ledger:corporation_ledger_index"))
349
- request.user = self.user
350
- # when
351
- response = corporation_ledger.corporation_ledger_index(request)
352
- # then
353
- self.assertEqual(response.status_code, HTTPStatus.FOUND)
354
-
355
- def test_view_corporation_ledger(self):
356
- """Test view corporation ledger."""
357
- # given
358
- request = self.factory.get(
359
- reverse(
360
- "ledger:corporation_ledger",
361
- args=[self.character_ownership.character.corporation_id],
362
- )
363
- )
364
- request.user = self.user
365
- # when
366
- response = corporation_ledger.corporation_ledger(
367
- request, self.character_ownership.character.corporation_id
368
- )
369
- # then
370
- self.assertEqual(response.status_code, HTTPStatus.OK)
371
- self.assertContains(response, "Corporation Ledger")
372
-
373
- @patch(CORPLEDGER_PATH + ".messages")
374
- def test_view_corporation_ledger_not_found(self, mock_messages):
375
- """Test view corporation ledger not found."""
376
- # given
377
- request = self.factory.get(reverse("ledger:corporation_ledger", args=[9999]))
378
- request.user = self.user
379
-
380
- # Add session middleware to process the request
381
- middleware = SessionMiddleware(Mock())
382
- middleware.process_request(request)
383
- message_middleware = MessageMiddleware(Mock())
384
- message_middleware.process_request(request)
385
- # when
386
- response = corporation_ledger.corporation_ledger(request, 9999)
387
- # then
388
- self.assertEqual(response.status_code, HTTPStatus.OK)
389
- self.assertContains(response, "Corporation Ledger")
390
- self.assertTrue(mock_messages.info.called)
391
-
392
- @patch(CORPLEDGER_PATH + ".messages")
393
- def test_view_corporation_ledger_without_permission(self, mock_messages):
394
- """Test view corporation ledger without permission."""
395
- # given
396
- request = self.factory.get(reverse("ledger:corporation_ledger", args=[2001]))
397
- request.user = self.user_no_perm
398
-
399
- # Add session middleware to process the request
400
- middleware = SessionMiddleware(Mock())
401
- middleware.process_request(request)
402
- message_middleware = MessageMiddleware(Mock())
403
- message_middleware.process_request(request)
404
- # when
405
- response = corporation_ledger.corporation_ledger(request, 2001)
406
- # then
407
- self.assertEqual(response.status_code, HTTPStatus.OK)
408
- self.assertContains(response, "Corporation Ledger")
409
- self.assertTrue(mock_messages.error.called)
410
-
411
- def test_view_corporation_details(self):
412
- """Test view corporation details."""
413
- # given
414
- request = self.factory.get(
415
- reverse(
416
- "ledger:corporation_details_year",
417
- args=[self.character_ownership.character.corporation_id, 2025, 1001],
418
- )
419
- )
420
- request.user = self.user
421
- # when
422
- response = corporation_ledger.corporation_details(
423
- request,
424
- self.character_ownership.character.corporation_id,
425
- entity_id=1001,
426
- year=2025,
427
- )
428
- # then
429
- self.assertEqual(response.status_code, HTTPStatus.OK)
430
- self.assertContains(response, "No ratting data found...")
431
-
432
- def test_view_corporation_details_no_permission(self):
433
- """Test view corporation details."""
434
- # given
435
- request = self.factory.get(
436
- reverse(
437
- "ledger:corporation_details_year",
438
- args=[2001, 2025, 1001],
439
- )
440
- )
441
- request.user = self.user_no_perm
442
-
443
- # when
444
- response = corporation_ledger.corporation_details(
445
- request, 2001, entity_id=1001, year=2025
446
- )
447
- # then
448
- self.assertEqual(response.status_code, HTTPStatus.OK)
449
- self.assertContains(response, "Permission Denied")
450
-
451
- def test_view_corporation_details_not_found(self):
452
- """Test view corporation details."""
453
- # given
454
- request = self.factory.get(
455
- reverse(
456
- "ledger:corporation_details_year",
457
- args=[9999, 2025, 9999],
458
- )
459
- )
460
- request.user = self.user_no_perm
461
-
462
- # when
463
- response = corporation_ledger.corporation_details(
464
- request, 9999, entity_id=9999, year=2025
465
- )
466
- # then
467
- self.assertEqual(response.status_code, HTTPStatus.OK)
468
- self.assertContains(response, "Corporation not found")
469
-
470
- def test_view_corporation_overview(self):
471
- """Test view corporation overview."""
472
- # given
473
- request = self.factory.get(reverse("ledger:corporation_overview"))
474
- request.user = self.user
475
- # when
476
- response = corporation_ledger.corporation_overview(request)
477
- # then
478
- self.assertEqual(response.status_code, HTTPStatus.OK)
479
- self.assertContains(response, "Corporation Overview")
480
-
481
- def test_view_corporation_administration(self):
482
- """Test view corporation administration."""
483
- # given
484
- request = self.factory.get(
485
- reverse(
486
- "ledger:corporation_administration",
487
- args=[self.character_ownership.character.corporation_id],
488
- )
489
- )
490
- request.user = self.user
491
- # when
492
- response = corporation_ledger.corporation_administration(
493
- request, self.character_ownership.character.corporation_id
494
- )
495
- # then
496
- self.assertEqual(response.status_code, HTTPStatus.OK)
497
- self.assertContains(response, "Administration")
498
-
499
- @patch(CORPLEDGER_PATH + ".messages")
500
- def test_view_corporation_administration_no_permission(self, mock_messages):
501
- """Test view corporation administration."""
502
- # given
503
- request = self.factory.get(
504
- reverse("ledger:corporation_administration", args=[2001])
505
- )
506
- request.user = self.user_no_perm
507
- middleware = SessionMiddleware(Mock())
508
- middleware.process_request(request)
509
- # when
510
- response = corporation_ledger.corporation_administration(request, 2001)
511
- # then
512
- self.assertEqual(response.status_code, HTTPStatus.FOUND)
513
- mock_messages.error.assert_called_once_with(request, "Permission Denied")
514
-
515
- @patch(CORPLEDGER_PATH + ".messages")
516
- def test_view_corporation_administration_corporation_not_found(self, mock_messages):
517
- """Test view corporation administration."""
518
- # given
519
- request = self.factory.get(
520
- reverse("ledger:corporation_administration", args=[6666])
521
- )
522
- request.user = self.user
523
- middleware = SessionMiddleware(Mock())
524
- middleware.process_request(request)
525
- # when
526
- response = corporation_ledger.corporation_administration(request, 6666)
527
- # then
528
- self.assertEqual(response.status_code, HTTPStatus.FOUND)
529
- mock_messages.info.assert_called_once_with(request, "Corporation not found")
530
-
531
-
532
- class TestViewAllianceLedgerAccess(TestCase):
533
- @classmethod
534
- def setUpClass(cls):
535
- super().setUpClass()
536
- load_allianceauth()
537
- load_eveuniverse()
538
-
539
- cls.factory = RequestFactory()
540
- cls.user, cls.character_ownership = create_user_from_evecharacter(
541
- 1001,
542
- permissions=[
543
- "ledger.basic_access",
544
- "ledger.advanced_access",
545
- ],
546
- )
547
- cls.user_no_perm, cls.character_ownership_no_perm = (
548
- create_user_from_evecharacter(
549
- 1003,
550
- permissions=[
551
- "ledger.basic_access",
552
- "ledger.advanced_access",
553
- ],
554
- )
555
- )
556
- cls.user_admin, cls.character_ownership_admin = create_user_from_evecharacter(
557
- 1002,
558
- permissions=[
559
- "ledger.basic_access",
560
- "ledger.advanced_access",
561
- "ledger.manage_access",
562
- ],
563
- )
564
- cls.audit = add_corporationaudit_corporation_to_user(cls.user, 1001)
565
- cls.audit_admin = add_corporationaudit_corporation_to_user(cls.user_admin, 1002)
566
- cls.user_has_no_alliance, cls.character_ownership_no_alliance = (
567
- create_user_from_evecharacter(
568
- 1000,
569
- permissions=[
570
- "ledger.basic_access",
571
- "ledger.advanced_access",
572
- ],
573
- )
574
- )
575
-
576
- def test_view_alliance_ledger_index(self):
577
- """Test view alliance ledger index."""
578
- # given
579
- request = self.factory.get(reverse("ledger:alliance_ledger_index"))
580
- request.user = self.user
581
- # when
582
- response = alliance_ledger.alliance_ledger_index(request)
583
- # then
584
- self.assertEqual(response.status_code, HTTPStatus.FOUND)
585
-
586
- @patch(ALLYLEDGER_PATH + ".messages")
587
- def test_view_alliance_ledger_index_exception(self, mock_messages):
588
- """Test view alliance ledger."""
589
- # given
590
- request = self.factory.get(
591
- reverse(
592
- "ledger:alliance_ledger_index",
593
- )
594
- )
595
- middleware = SessionMiddleware(Mock())
596
- middleware.process_request(request)
597
- request.user = self.user_has_no_alliance
598
- # when
599
- response = alliance_ledger.alliance_ledger_index(request)
600
- # then
601
- self.assertEqual(response.status_code, HTTPStatus.FOUND)
602
- mock_messages.error.assert_called_once_with(
603
- request, "You do not have an alliance."
604
- )
605
-
606
- def test_view_alliance_ledger(self):
607
- """Test view alliance ledger."""
608
- # given
609
- request = self.factory.get(
610
- reverse(
611
- "ledger:alliance_ledger",
612
- args=[self.character_ownership.character.alliance_id],
613
- )
614
- )
615
- request.user = self.user
616
- # when
617
- response = alliance_ledger.alliance_ledger(
618
- request, self.character_ownership.character.alliance_id
619
- )
620
- # then
621
- self.assertEqual(response.status_code, HTTPStatus.OK)
622
- self.assertContains(response, "Alliance Ledger")
623
-
624
- @patch(ALLYLEDGER_PATH + ".messages")
625
- def test_view_alliance_ledger_not_found(self, mock_messages):
626
- """Test view alliance ledger not found."""
627
- # given
628
- request = self.factory.get(reverse("ledger:alliance_ledger", args=[9999]))
629
- request.user = self.user
630
-
631
- # Add session middleware to process the request
632
- middleware = SessionMiddleware(Mock())
633
- middleware.process_request(request)
634
- message_middleware = MessageMiddleware(Mock())
635
- message_middleware.process_request(request)
636
- # when
637
- response = alliance_ledger.alliance_ledger(request, 9999)
638
- # then
639
- self.assertEqual(response.status_code, HTTPStatus.OK)
640
- self.assertContains(response, "Alliance Ledger")
641
- self.assertTrue(mock_messages.info.called)
642
-
643
- @patch(ALLYLEDGER_PATH + ".messages")
644
- def test_view_alliance_ledger_without_permission(self, mock_messages):
645
- """Test view alliance ledger without permission."""
646
- # given
647
- request = self.factory.get(reverse("ledger:alliance_ledger", args=[3001]))
648
- request.user = self.user_no_perm
649
-
650
- # Add session middleware to process the request
651
- middleware = SessionMiddleware(Mock())
652
- middleware.process_request(request)
653
- message_middleware = MessageMiddleware(Mock())
654
- message_middleware.process_request(request)
655
- # when
656
- response = alliance_ledger.alliance_ledger(request, 3001)
657
- # then
658
- self.assertEqual(response.status_code, HTTPStatus.OK)
659
- self.assertContains(response, "Alliance Ledger")
660
- self.assertTrue(mock_messages.error.called)
661
-
662
- def test_view_alliance_details(self):
663
- """Test view alliance details."""
664
- # given
665
- request = self.factory.get(
666
- reverse(
667
- "ledger:alliance_details_year",
668
- args=[self.character_ownership.character.alliance_id, 2025, 1001],
669
- )
670
- )
671
- request.user = self.user
672
- # when
673
- response = alliance_ledger.alliance_details(
674
- request,
675
- self.character_ownership.character.alliance_id,
676
- entity_id=1001,
677
- year=2025,
678
- )
679
- # then
680
- self.assertEqual(response.status_code, HTTPStatus.OK)
681
- self.assertContains(response, "No ratting data found...")
682
-
683
- def test_view_alliance_details_no_permission(self):
684
- """Test view alliance details without permission."""
685
- # given
686
- request = self.factory.get(
687
- reverse(
688
- "ledger:alliance_details_year",
689
- args=[3001, 2025, 2001],
690
- )
691
- )
692
- request.user = self.user_no_perm
693
-
694
- # when
695
- response = alliance_ledger.alliance_details(
696
- request, 3001, entity_id=2001, year=2025
697
- )
698
- # then
699
- self.assertEqual(response.status_code, HTTPStatus.OK)
700
- self.assertContains(response, "Permission Denied")
701
-
702
- def test_view_alliance_details_not_found(self):
703
- """Test view alliance details not found."""
704
- # given
705
- request = self.factory.get(
706
- reverse(
707
- "ledger:alliance_details_year",
708
- args=[9999, 2025, 9999],
709
- )
710
- )
711
- request.user = self.user_no_perm
712
-
713
- # when
714
- response = alliance_ledger.alliance_details(
715
- request, 9999, entity_id=9999, year=2025
716
- )
717
- # then
718
- self.assertEqual(response.status_code, HTTPStatus.OK)
719
- self.assertContains(response, "Alliance not found.")
720
-
721
- def test_view_alliance_overview(self):
722
- """Test view alliance overview."""
723
- # given
724
- request = self.factory.get(reverse("ledger:alliance_overview"))
725
- request.user = self.user
726
- # when
727
- response = alliance_ledger.alliance_overview(request)
728
- # then
729
- self.assertEqual(response.status_code, HTTPStatus.OK)
730
- self.assertContains(response, "Alliance Overview")
731
-
732
- def test_view_alliance_administration(self):
733
- """Test view alliance administration."""
734
- # given
735
- request = self.factory.get(
736
- reverse(
737
- "ledger:alliance_administration",
738
- args=[self.character_ownership_admin.character.alliance_id],
739
- )
740
- )
741
- request.user = self.user_admin
742
- # when
743
- response = alliance_ledger.alliance_administration(
744
- request, self.character_ownership_admin.character.alliance_id
745
- )
746
- # then
747
- self.assertEqual(response.status_code, HTTPStatus.OK)
748
- self.assertContains(response, "Administration")
749
-
750
- @patch(ALLYLEDGER_PATH + ".messages")
751
- def test_view_alliance_administration_no_permission(self, mock_messages):
752
- """Test view alliance administration."""
753
- # given
754
- request = self.factory.get(
755
- reverse("ledger:alliance_administration", args=[3001])
756
- )
757
- request.user = self.user_admin
758
- middleware = SessionMiddleware(Mock())
759
- middleware.process_request(request)
760
- # when
761
- response = alliance_ledger.alliance_administration(request, 3001)
762
- # then
763
- self.assertEqual(response.status_code, HTTPStatus.FOUND)
764
- mock_messages.error.assert_called_once_with(request, "Permission Denied")
765
-
766
- @patch(ALLYLEDGER_PATH + ".messages")
767
- def test_view_alliance_administration_alliance_not_found(self, mock_messages):
768
- """Test view alliance administration."""
769
- # given
770
- request = self.factory.get(
771
- reverse("ledger:alliance_administration", args=[6666])
772
- )
773
- request.user = self.user_admin
774
- middleware = SessionMiddleware(Mock())
775
- middleware.process_request(request)
776
- # when
777
- response = alliance_ledger.alliance_administration(request, 6666)
778
- # then
779
- self.assertEqual(response.status_code, HTTPStatus.FOUND)
780
- mock_messages.info.assert_called_once_with(request, "Alliance not found.")
781
-
782
-
783
- class TestViewPlanetaryLedgerAccess(TestCase):
784
- @classmethod
785
- def setUpClass(cls):
786
- super().setUpClass()
787
- load_allianceauth()
788
- load_eveuniverse()
789
-
790
- cls.factory = RequestFactory()
791
- cls.user, cls.character_ownership = create_user_from_evecharacter(
792
- 1001,
793
- permissions=[
794
- "ledger.basic_access",
795
- "ledger.advanced_access",
796
- ],
797
- )
798
-
799
- def test_view_planetary_ledger_index(self):
800
- """Test view planetary ledger index."""
801
- # given
802
- request = self.factory.get(reverse("ledger:planetary_ledger_index"))
803
- request.user = self.user
804
- # when
805
- response = planetary.planetary_ledger_index(request)
806
- # then
807
- self.assertEqual(response.status_code, HTTPStatus.FOUND)
808
-
809
- def test_view_planetary_ledger(self):
810
- """Test view planetary ledger."""
811
- # given
812
- request = self.factory.get(
813
- reverse(
814
- "ledger:planetary_ledger",
815
- args=[self.character_ownership.character.character_id],
816
- )
817
- )
818
- request.user = self.user
819
- # when
820
- response = planetary.planetary_ledger(
821
- request, self.character_ownership.character.character_id
822
- )
823
- # then
824
- self.assertEqual(response.status_code, HTTPStatus.OK)
825
- self.assertContains(response, "Planetary Details")
826
-
827
- def test_view_planetary_ledger_without_character_id(self):
828
- """Test view character ledger."""
829
- # given
830
- request = self.factory.get(
831
- reverse(
832
- "ledger:planetary_ledger",
833
- args=[self.character_ownership.character.character_id],
834
- )
835
- )
836
- request.user = self.user
837
- # when
838
- response = planetary.planetary_ledger(request)
839
- # then
840
- self.assertEqual(response.status_code, HTTPStatus.OK)
841
- self.assertContains(response, "Planetary Details")
842
-
843
- def test_view_planetary_overview(self):
844
- """Test view planetary overview."""
845
- # given
846
- request = self.factory.get(reverse("ledger:planetary_overview"))
847
- request.user = self.user
848
- # when
849
- response = planetary.planetary_overview(request)
850
- # then
851
- self.assertEqual(response.status_code, HTTPStatus.OK)
852
- self.assertContains(response, "Planetary Overview")
1
+ """TestView class."""
2
+
3
+ # Standard Library
4
+ from http import HTTPStatus
5
+ from unittest.mock import Mock, patch
6
+
7
+ # Django
8
+ from django.contrib.messages.middleware import MessageMiddleware
9
+ from django.contrib.sessions.middleware import SessionMiddleware
10
+ from django.test import RequestFactory, TestCase
11
+ from django.urls import reverse
12
+
13
+ # Alliance Auth (External Libs)
14
+ from app_utils.testing import (
15
+ create_user_from_evecharacter,
16
+ )
17
+
18
+ # AA Ledger
19
+ from ledger.tests.testdata.generate_characteraudit import (
20
+ add_characteraudit_character_to_user,
21
+ create_user_from_evecharacter_with_access,
22
+ )
23
+ from ledger.tests.testdata.generate_corporationaudit import (
24
+ add_corporationaudit_corporation_to_user,
25
+ )
26
+ from ledger.tests.testdata.load_allianceauth import load_allianceauth
27
+ from ledger.tests.testdata.load_eveuniverse import load_eveuniverse
28
+ from ledger.views import index
29
+ from ledger.views.alliance import alliance_ledger
30
+ from ledger.views.character import character_ledger, planetary
31
+ from ledger.views.corporation import corporation_ledger
32
+
33
+ INDEX_PATH = "ledger.views.index"
34
+ CHARLEDGER_PATH = "ledger.views.character.character_ledger"
35
+ CORPLEDGER_PATH = "ledger.views.corporation.corporation_ledger"
36
+ ALLYLEDGER_PATH = "ledger.views.alliance.alliance_ledger"
37
+
38
+
39
+ @patch(INDEX_PATH + ".messages")
40
+ class TestViewIndexAccess(TestCase):
41
+ @classmethod
42
+ def setUpClass(cls):
43
+ super().setUpClass()
44
+ load_allianceauth()
45
+ load_eveuniverse()
46
+
47
+ cls.factory = RequestFactory()
48
+ cls.user, cls.character_ownership = create_user_from_evecharacter_with_access(
49
+ 1002
50
+ )
51
+ cls.superuser, cls.character_ownership = (
52
+ create_user_from_evecharacter_with_access(1001)
53
+ )
54
+
55
+ def test_admin(self, mock_messages):
56
+ """Test admin access."""
57
+ # given
58
+ self.superuser.is_superuser = True
59
+ self.superuser.save()
60
+
61
+ request = self.factory.get(reverse("ledger:admin"))
62
+ request.user = self.superuser
63
+ # when
64
+ response = index.admin(request)
65
+ # then
66
+ self.assertEqual(response.status_code, HTTPStatus.OK)
67
+ self.assertContains(response, "Administration")
68
+
69
+ def test_admin_no_access(self, mock_messages):
70
+ """Test admin access."""
71
+ # given
72
+ request = self.factory.get(reverse("ledger:admin"))
73
+ request.user = self.user
74
+
75
+ middleware = SessionMiddleware(Mock())
76
+ middleware.process_request(request)
77
+ # when
78
+ response = index.admin(request)
79
+ # then
80
+ self.assertEqual(response.status_code, HTTPStatus.FOUND)
81
+ self.assertTrue(mock_messages.error.called)
82
+
83
+ def test_admin_clear_all_etags(self, mock_messages):
84
+ """Test clear all etags."""
85
+ # given
86
+ self.superuser.is_superuser = True
87
+ self.superuser.save()
88
+ request = self.factory.post(
89
+ reverse("ledger:admin"), data={"run_clear_etag": True}
90
+ )
91
+ request.user = self.superuser
92
+
93
+ middleware = SessionMiddleware(Mock())
94
+ middleware.process_request(request)
95
+ # when
96
+ response = index.admin(request)
97
+ # then
98
+ self.assertEqual(response.status_code, HTTPStatus.OK)
99
+ mock_messages.info.assert_called_once_with(request, "Queued Clear All ETags")
100
+
101
+ def test_force_refresh(self, mock_messages):
102
+ """Test force refresh."""
103
+ # given
104
+ self.superuser.is_superuser = True
105
+ self.superuser.save()
106
+ request = self.factory.post(
107
+ reverse("ledger:admin"), data={"force_refresh": True}
108
+ )
109
+ request.user = self.superuser
110
+
111
+ middleware = SessionMiddleware(Mock())
112
+ middleware.process_request(request)
113
+ # when
114
+ response = index.admin(request)
115
+ # then
116
+ self.assertEqual(response.status_code, HTTPStatus.OK)
117
+
118
+ def test_run_char_updates(self, mock_messages):
119
+ """Test run char updates."""
120
+ # given
121
+ self.superuser.is_superuser = True
122
+ self.superuser.save()
123
+ request = self.factory.post(
124
+ reverse("ledger:admin"), data={"run_char_updates": True}
125
+ )
126
+ request.user = self.superuser
127
+
128
+ middleware = SessionMiddleware(Mock())
129
+ middleware.process_request(request)
130
+ # when
131
+ response = index.admin(request)
132
+ # then
133
+ self.assertEqual(response.status_code, HTTPStatus.OK)
134
+ mock_messages.info.assert_called_once_with(
135
+ request, "Queued Update All Characters"
136
+ )
137
+
138
+ def test_run_corp_updates(self, mock_messages):
139
+ """Test Run corp updates."""
140
+ # given
141
+ self.superuser.is_superuser = True
142
+ self.superuser.save()
143
+ request = self.factory.post(
144
+ reverse("ledger:admin"), data={"run_corp_updates": True}
145
+ )
146
+ request.user = self.superuser
147
+
148
+ middleware = SessionMiddleware(Mock())
149
+ middleware.process_request(request)
150
+ # when
151
+ response = index.admin(request)
152
+ # then
153
+ self.assertEqual(response.status_code, HTTPStatus.OK)
154
+ mock_messages.info.assert_called_once_with(
155
+ request, "Queued Update All Corporations"
156
+ )
157
+
158
+
159
+ class TestViewCharacterLedgerAccess(TestCase):
160
+ @classmethod
161
+ def setUpClass(cls):
162
+ super().setUpClass()
163
+ load_allianceauth()
164
+ load_eveuniverse()
165
+
166
+ cls.factory = RequestFactory()
167
+ cls.user, cls.character_ownership = create_user_from_evecharacter_with_access(
168
+ 1001
169
+ )
170
+ cls.user2, cls.character_ownership2 = create_user_from_evecharacter_with_access(
171
+ 1002
172
+ )
173
+ cls.audit = add_characteraudit_character_to_user(
174
+ cls.user, cls.character_ownership.character.character_id
175
+ )
176
+
177
+ def test_view_character_ledger(self):
178
+ """Test view character ledger."""
179
+ # given
180
+ request = self.factory.get(
181
+ reverse(
182
+ "ledger:character_ledger",
183
+ args=[self.character_ownership.character.character_id],
184
+ )
185
+ )
186
+ request.user = self.user
187
+ # when
188
+ response = character_ledger.character_ledger(
189
+ request, self.character_ownership.character.character_id
190
+ )
191
+ # then
192
+ self.assertEqual(response.status_code, HTTPStatus.OK)
193
+ self.assertContains(response, "Character Ledger")
194
+
195
+ @patch(CHARLEDGER_PATH + ".messages")
196
+ def test_view_character_ledger_without_permission(self, mock_messages):
197
+ """Test view character ledger without permission."""
198
+ # given
199
+ request = self.factory.get(reverse("ledger:character_ledger", args=[1003]))
200
+ request.user = self.user
201
+
202
+ # Add session middleware to process the request
203
+ middleware = SessionMiddleware(Mock())
204
+ middleware.process_request(request)
205
+ message_middleware = MessageMiddleware(Mock())
206
+ message_middleware.process_request(request)
207
+ # when
208
+ response = character_ledger.character_ledger(request, 1003)
209
+ # then
210
+ self.assertEqual(response.status_code, HTTPStatus.OK)
211
+ self.assertContains(response, "Character Ledger")
212
+ self.assertTrue(mock_messages.error.called)
213
+
214
+ def test_view_character_details(self):
215
+ """Test view character details."""
216
+ # given
217
+ request = self.factory.get(
218
+ reverse(
219
+ "ledger:character_details",
220
+ args=[self.character_ownership.character.character_id, 2025],
221
+ )
222
+ )
223
+ request.user = self.user
224
+ # when
225
+ response = character_ledger.character_details(
226
+ request, self.character_ownership.character.character_id, year=2025
227
+ )
228
+ # then
229
+ self.assertEqual(response.status_code, HTTPStatus.OK)
230
+ self.assertContains(
231
+ response,
232
+ "No ratting data found...",
233
+ )
234
+
235
+ def test_view_character_details_no_permission(self):
236
+ """Test view character details."""
237
+ # given
238
+ request = self.factory.get(
239
+ reverse(
240
+ "ledger:character_details",
241
+ args=[self.character_ownership.character.character_id, 2025],
242
+ )
243
+ )
244
+ request.user = self.user2
245
+
246
+ # when
247
+ response = character_ledger.character_details(
248
+ request, self.character_ownership.character.character_id, year=2025
249
+ )
250
+ # then
251
+ self.assertEqual(response.status_code, HTTPStatus.OK)
252
+ self.assertContains(response, "Permission Denied")
253
+
254
+ def test_view_character_overview(self):
255
+ """Test view character overview."""
256
+ # given
257
+ request = self.factory.get(reverse("ledger:character_overview"))
258
+ request.user = self.user
259
+ # when
260
+ response = character_ledger.character_overview(request)
261
+ # then
262
+ self.assertEqual(response.status_code, HTTPStatus.OK)
263
+ self.assertContains(response, "Character Overview")
264
+
265
+ def test_view_character_administration(self):
266
+ """Test view character administration."""
267
+ # given
268
+ request = self.factory.get(
269
+ reverse(
270
+ "ledger:character_administration",
271
+ args=[self.character_ownership.character.character_id],
272
+ )
273
+ )
274
+ request.user = self.user
275
+ # when
276
+ response = character_ledger.character_administration(
277
+ request, self.character_ownership.character.character_id
278
+ )
279
+ # then
280
+ self.assertEqual(response.status_code, HTTPStatus.OK)
281
+ self.assertContains(response, "Administration")
282
+
283
+ def test_view_character_administration_withouth_character_id(self):
284
+ """Test view character administration."""
285
+ # given
286
+ request = self.factory.get(
287
+ reverse(
288
+ "ledger:character_administration",
289
+ args=[self.character_ownership.character.character_id],
290
+ )
291
+ )
292
+ request.user = self.user
293
+ # when
294
+ response = character_ledger.character_administration(request)
295
+ # then
296
+ self.assertEqual(response.status_code, HTTPStatus.OK)
297
+ self.assertContains(response, "Administration")
298
+
299
+ @patch(CHARLEDGER_PATH + ".messages")
300
+ def test_view_character_administration_no_permission(self, mock_messages):
301
+ """Test view character administration."""
302
+ # given
303
+ request = self.factory.get(
304
+ reverse("ledger:character_administration", args=[1002])
305
+ )
306
+ request.user = self.user
307
+ middleware = SessionMiddleware(Mock())
308
+ middleware.process_request(request)
309
+ # when
310
+ response = character_ledger.character_administration(request, 1002)
311
+ # then
312
+ self.assertEqual(response.status_code, HTTPStatus.FOUND)
313
+ mock_messages.error.assert_called_once_with(request, "Permission Denied")
314
+
315
+
316
+ class TestViewCorporationLedgerAccess(TestCase):
317
+ @classmethod
318
+ def setUpClass(cls):
319
+ super().setUpClass()
320
+ load_allianceauth()
321
+ load_eveuniverse()
322
+
323
+ cls.factory = RequestFactory()
324
+ cls.user, cls.character_ownership = create_user_from_evecharacter(
325
+ 1001,
326
+ permissions=[
327
+ "ledger.basic_access",
328
+ "ledger.advanced_access",
329
+ "ledger.manage_access",
330
+ "ledger.corp_audit_manager",
331
+ ],
332
+ )
333
+ cls.user_no_perm, cls.character_ownership_no_perm = (
334
+ create_user_from_evecharacter(
335
+ 1002,
336
+ permissions=[
337
+ "ledger.basic_access",
338
+ "ledger.advanced_access",
339
+ "ledger.manage_access",
340
+ ],
341
+ )
342
+ )
343
+ cls.audit = add_corporationaudit_corporation_to_user(cls.user, 1001)
344
+
345
+ def test_view_corporation_ledger_index(self):
346
+ """Test view corporation ledger index."""
347
+ # given
348
+ request = self.factory.get(reverse("ledger:corporation_ledger_index"))
349
+ request.user = self.user
350
+ # when
351
+ response = corporation_ledger.corporation_ledger_index(request)
352
+ # then
353
+ self.assertEqual(response.status_code, HTTPStatus.FOUND)
354
+
355
+ def test_view_corporation_ledger(self):
356
+ """Test view corporation ledger."""
357
+ # given
358
+ request = self.factory.get(
359
+ reverse(
360
+ "ledger:corporation_ledger",
361
+ args=[self.character_ownership.character.corporation_id],
362
+ )
363
+ )
364
+ request.user = self.user
365
+ # when
366
+ response = corporation_ledger.corporation_ledger(
367
+ request, self.character_ownership.character.corporation_id
368
+ )
369
+ # then
370
+ self.assertEqual(response.status_code, HTTPStatus.OK)
371
+ self.assertContains(response, "Corporation Ledger")
372
+
373
+ @patch(CORPLEDGER_PATH + ".messages")
374
+ def test_view_corporation_ledger_not_found(self, mock_messages):
375
+ """Test view corporation ledger not found."""
376
+ # given
377
+ request = self.factory.get(reverse("ledger:corporation_ledger", args=[9999]))
378
+ request.user = self.user
379
+
380
+ # Add session middleware to process the request
381
+ middleware = SessionMiddleware(Mock())
382
+ middleware.process_request(request)
383
+ message_middleware = MessageMiddleware(Mock())
384
+ message_middleware.process_request(request)
385
+ # when
386
+ response = corporation_ledger.corporation_ledger(request, 9999)
387
+ # then
388
+ self.assertEqual(response.status_code, HTTPStatus.OK)
389
+ self.assertContains(response, "Corporation Ledger")
390
+ self.assertTrue(mock_messages.info.called)
391
+
392
+ @patch(CORPLEDGER_PATH + ".messages")
393
+ def test_view_corporation_ledger_without_permission(self, mock_messages):
394
+ """Test view corporation ledger without permission."""
395
+ # given
396
+ request = self.factory.get(reverse("ledger:corporation_ledger", args=[2001]))
397
+ request.user = self.user_no_perm
398
+
399
+ # Add session middleware to process the request
400
+ middleware = SessionMiddleware(Mock())
401
+ middleware.process_request(request)
402
+ message_middleware = MessageMiddleware(Mock())
403
+ message_middleware.process_request(request)
404
+ # when
405
+ response = corporation_ledger.corporation_ledger(request, 2001)
406
+ # then
407
+ self.assertEqual(response.status_code, HTTPStatus.OK)
408
+ self.assertContains(response, "Corporation Ledger")
409
+ self.assertTrue(mock_messages.error.called)
410
+
411
+ def test_view_corporation_details(self):
412
+ """Test view corporation details."""
413
+ # given
414
+ request = self.factory.get(
415
+ reverse(
416
+ "ledger:corporation_details",
417
+ args=[self.character_ownership.character.corporation_id, 2025, 1001],
418
+ )
419
+ )
420
+ request.user = self.user
421
+ # when
422
+ response = corporation_ledger.corporation_details(
423
+ request,
424
+ self.character_ownership.character.corporation_id,
425
+ entity_id=1001,
426
+ year=2025,
427
+ )
428
+ # then
429
+ self.assertEqual(response.status_code, HTTPStatus.OK)
430
+ self.assertContains(response, "No ratting data found...")
431
+
432
+ def test_view_corporation_details_no_permission(self):
433
+ """Test view corporation details."""
434
+ # given
435
+ request = self.factory.get(
436
+ reverse(
437
+ "ledger:corporation_details",
438
+ args=[2001, 2025, 1001],
439
+ )
440
+ )
441
+ request.user = self.user_no_perm
442
+
443
+ # when
444
+ response = corporation_ledger.corporation_details(
445
+ request, 2001, entity_id=1001, year=2025
446
+ )
447
+ # then
448
+ self.assertEqual(response.status_code, HTTPStatus.OK)
449
+ self.assertContains(response, "Permission Denied")
450
+
451
+ def test_view_corporation_details_not_found(self):
452
+ """Test view corporation details."""
453
+ # given
454
+ request = self.factory.get(
455
+ reverse(
456
+ "ledger:corporation_details",
457
+ args=[9999, 2025, 9999],
458
+ )
459
+ )
460
+ request.user = self.user_no_perm
461
+
462
+ # when
463
+ response = corporation_ledger.corporation_details(
464
+ request, 9999, entity_id=9999, year=2025
465
+ )
466
+ # then
467
+ self.assertEqual(response.status_code, HTTPStatus.OK)
468
+ self.assertContains(response, "Corporation not found")
469
+
470
+ def test_view_corporation_overview(self):
471
+ """Test view corporation overview."""
472
+ # given
473
+ request = self.factory.get(reverse("ledger:corporation_overview"))
474
+ request.user = self.user
475
+ # when
476
+ response = corporation_ledger.corporation_overview(request)
477
+ # then
478
+ self.assertEqual(response.status_code, HTTPStatus.OK)
479
+ self.assertContains(response, "Corporation Overview")
480
+
481
+ def test_view_corporation_administration(self):
482
+ """Test view corporation administration."""
483
+ # given
484
+ request = self.factory.get(
485
+ reverse(
486
+ "ledger:corporation_administration",
487
+ args=[self.character_ownership.character.corporation_id],
488
+ )
489
+ )
490
+ request.user = self.user
491
+ # when
492
+ response = corporation_ledger.corporation_administration(
493
+ request, self.character_ownership.character.corporation_id
494
+ )
495
+ # then
496
+ self.assertEqual(response.status_code, HTTPStatus.OK)
497
+ self.assertContains(response, "Administration")
498
+
499
+ @patch(CORPLEDGER_PATH + ".messages")
500
+ def test_view_corporation_administration_no_permission(self, mock_messages):
501
+ """Test view corporation administration."""
502
+ # given
503
+ request = self.factory.get(
504
+ reverse("ledger:corporation_administration", args=[2001])
505
+ )
506
+ request.user = self.user_no_perm
507
+ middleware = SessionMiddleware(Mock())
508
+ middleware.process_request(request)
509
+ # when
510
+ response = corporation_ledger.corporation_administration(request, 2001)
511
+ # then
512
+ self.assertEqual(response.status_code, HTTPStatus.FOUND)
513
+ mock_messages.error.assert_called_once_with(request, "Permission Denied")
514
+
515
+ @patch(CORPLEDGER_PATH + ".messages")
516
+ def test_view_corporation_administration_corporation_not_found(self, mock_messages):
517
+ """Test view corporation administration."""
518
+ # given
519
+ request = self.factory.get(
520
+ reverse("ledger:corporation_administration", args=[6666])
521
+ )
522
+ request.user = self.user
523
+ middleware = SessionMiddleware(Mock())
524
+ middleware.process_request(request)
525
+ # when
526
+ response = corporation_ledger.corporation_administration(request, 6666)
527
+ # then
528
+ self.assertEqual(response.status_code, HTTPStatus.FOUND)
529
+ mock_messages.info.assert_called_once_with(request, "Corporation not found")
530
+
531
+
532
+ class TestViewAllianceLedgerAccess(TestCase):
533
+ @classmethod
534
+ def setUpClass(cls):
535
+ super().setUpClass()
536
+ load_allianceauth()
537
+ load_eveuniverse()
538
+
539
+ cls.factory = RequestFactory()
540
+ cls.user, cls.character_ownership = create_user_from_evecharacter(
541
+ 1001,
542
+ permissions=[
543
+ "ledger.basic_access",
544
+ "ledger.advanced_access",
545
+ ],
546
+ )
547
+ cls.user_no_perm, cls.character_ownership_no_perm = (
548
+ create_user_from_evecharacter(
549
+ 1003,
550
+ permissions=[
551
+ "ledger.basic_access",
552
+ "ledger.advanced_access",
553
+ ],
554
+ )
555
+ )
556
+ cls.user_admin, cls.character_ownership_admin = create_user_from_evecharacter(
557
+ 1002,
558
+ permissions=[
559
+ "ledger.basic_access",
560
+ "ledger.advanced_access",
561
+ "ledger.manage_access",
562
+ ],
563
+ )
564
+ cls.audit = add_corporationaudit_corporation_to_user(cls.user, 1001)
565
+ cls.audit_admin = add_corporationaudit_corporation_to_user(cls.user_admin, 1002)
566
+ cls.user_has_no_alliance, cls.character_ownership_no_alliance = (
567
+ create_user_from_evecharacter(
568
+ 1000,
569
+ permissions=[
570
+ "ledger.basic_access",
571
+ "ledger.advanced_access",
572
+ ],
573
+ )
574
+ )
575
+
576
+ def test_view_alliance_ledger_index(self):
577
+ """Test view alliance ledger index."""
578
+ # given
579
+ request = self.factory.get(reverse("ledger:alliance_ledger_index"))
580
+ request.user = self.user
581
+ # when
582
+ response = alliance_ledger.alliance_ledger_index(request)
583
+ # then
584
+ self.assertEqual(response.status_code, HTTPStatus.FOUND)
585
+
586
+ @patch(ALLYLEDGER_PATH + ".messages")
587
+ def test_view_alliance_ledger_index_exception(self, mock_messages):
588
+ """Test view alliance ledger."""
589
+ # given
590
+ request = self.factory.get(
591
+ reverse(
592
+ "ledger:alliance_ledger_index",
593
+ )
594
+ )
595
+ middleware = SessionMiddleware(Mock())
596
+ middleware.process_request(request)
597
+ request.user = self.user_has_no_alliance
598
+ # when
599
+ response = alliance_ledger.alliance_ledger_index(request)
600
+ # then
601
+ self.assertEqual(response.status_code, HTTPStatus.FOUND)
602
+ mock_messages.error.assert_called_once_with(
603
+ request, "You do not have an alliance."
604
+ )
605
+
606
+ def test_view_alliance_ledger(self):
607
+ """Test view alliance ledger."""
608
+ # given
609
+ request = self.factory.get(
610
+ reverse(
611
+ "ledger:alliance_ledger",
612
+ args=[self.character_ownership.character.alliance_id],
613
+ )
614
+ )
615
+ request.user = self.user
616
+ # when
617
+ response = alliance_ledger.alliance_ledger(
618
+ request, self.character_ownership.character.alliance_id
619
+ )
620
+ # then
621
+ self.assertEqual(response.status_code, HTTPStatus.OK)
622
+ self.assertContains(response, "Alliance Ledger")
623
+
624
+ @patch(ALLYLEDGER_PATH + ".messages")
625
+ def test_view_alliance_ledger_not_found(self, mock_messages):
626
+ """Test view alliance ledger not found."""
627
+ # given
628
+ request = self.factory.get(reverse("ledger:alliance_ledger", args=[9999]))
629
+ request.user = self.user
630
+
631
+ # Add session middleware to process the request
632
+ middleware = SessionMiddleware(Mock())
633
+ middleware.process_request(request)
634
+ message_middleware = MessageMiddleware(Mock())
635
+ message_middleware.process_request(request)
636
+ # when
637
+ response = alliance_ledger.alliance_ledger(request, 9999)
638
+ # then
639
+ self.assertEqual(response.status_code, HTTPStatus.OK)
640
+ self.assertContains(response, "Alliance Ledger")
641
+ self.assertTrue(mock_messages.info.called)
642
+
643
+ @patch(ALLYLEDGER_PATH + ".messages")
644
+ def test_view_alliance_ledger_without_permission(self, mock_messages):
645
+ """Test view alliance ledger without permission."""
646
+ # given
647
+ request = self.factory.get(reverse("ledger:alliance_ledger", args=[3001]))
648
+ request.user = self.user_no_perm
649
+
650
+ # Add session middleware to process the request
651
+ middleware = SessionMiddleware(Mock())
652
+ middleware.process_request(request)
653
+ message_middleware = MessageMiddleware(Mock())
654
+ message_middleware.process_request(request)
655
+ # when
656
+ response = alliance_ledger.alliance_ledger(request, 3001)
657
+ # then
658
+ self.assertEqual(response.status_code, HTTPStatus.OK)
659
+ self.assertContains(response, "Alliance Ledger")
660
+ self.assertTrue(mock_messages.error.called)
661
+
662
+ def test_view_alliance_details(self):
663
+ """Test view alliance details."""
664
+ # given
665
+ request = self.factory.get(
666
+ reverse(
667
+ "ledger:alliance_details",
668
+ args=[self.character_ownership.character.alliance_id, 2025, 1001],
669
+ )
670
+ )
671
+ request.user = self.user
672
+ # when
673
+ response = alliance_ledger.alliance_details(
674
+ request,
675
+ self.character_ownership.character.alliance_id,
676
+ entity_id=1001,
677
+ year=2025,
678
+ )
679
+ # then
680
+ self.assertEqual(response.status_code, HTTPStatus.OK)
681
+ self.assertContains(response, "No ratting data found...")
682
+
683
+ def test_view_alliance_details_no_permission(self):
684
+ """Test view alliance details without permission."""
685
+ # given
686
+ request = self.factory.get(
687
+ reverse(
688
+ "ledger:alliance_details",
689
+ args=[3001, 2025, 2001],
690
+ )
691
+ )
692
+ request.user = self.user_no_perm
693
+
694
+ # when
695
+ response = alliance_ledger.alliance_details(
696
+ request, 3001, entity_id=2001, year=2025
697
+ )
698
+ # then
699
+ self.assertEqual(response.status_code, HTTPStatus.OK)
700
+ self.assertContains(response, "Permission Denied")
701
+
702
+ def test_view_alliance_details_not_found(self):
703
+ """Test view alliance details not found."""
704
+ # given
705
+ request = self.factory.get(
706
+ reverse(
707
+ "ledger:alliance_details",
708
+ args=[9999, 2025, 9999],
709
+ )
710
+ )
711
+ request.user = self.user_no_perm
712
+
713
+ # when
714
+ response = alliance_ledger.alliance_details(
715
+ request, 9999, entity_id=9999, year=2025
716
+ )
717
+ # then
718
+ self.assertEqual(response.status_code, HTTPStatus.OK)
719
+ self.assertContains(response, "Alliance not found.")
720
+
721
+ def test_view_alliance_overview(self):
722
+ """Test view alliance overview."""
723
+ # given
724
+ request = self.factory.get(reverse("ledger:alliance_overview"))
725
+ request.user = self.user
726
+ # when
727
+ response = alliance_ledger.alliance_overview(request)
728
+ # then
729
+ self.assertEqual(response.status_code, HTTPStatus.OK)
730
+ self.assertContains(response, "Alliance Overview")
731
+
732
+ def test_view_alliance_administration(self):
733
+ """Test view alliance administration."""
734
+ # given
735
+ request = self.factory.get(
736
+ reverse(
737
+ "ledger:alliance_administration",
738
+ args=[self.character_ownership_admin.character.alliance_id],
739
+ )
740
+ )
741
+ request.user = self.user_admin
742
+ # when
743
+ response = alliance_ledger.alliance_administration(
744
+ request, self.character_ownership_admin.character.alliance_id
745
+ )
746
+ # then
747
+ self.assertEqual(response.status_code, HTTPStatus.OK)
748
+ self.assertContains(response, "Administration")
749
+
750
+ @patch(ALLYLEDGER_PATH + ".messages")
751
+ def test_view_alliance_administration_no_permission(self, mock_messages):
752
+ """Test view alliance administration."""
753
+ # given
754
+ request = self.factory.get(
755
+ reverse("ledger:alliance_administration", args=[3001])
756
+ )
757
+ request.user = self.user_admin
758
+ middleware = SessionMiddleware(Mock())
759
+ middleware.process_request(request)
760
+ # when
761
+ response = alliance_ledger.alliance_administration(request, 3001)
762
+ # then
763
+ self.assertEqual(response.status_code, HTTPStatus.FOUND)
764
+ mock_messages.error.assert_called_once_with(request, "Permission Denied")
765
+
766
+ @patch(ALLYLEDGER_PATH + ".messages")
767
+ def test_view_alliance_administration_alliance_not_found(self, mock_messages):
768
+ """Test view alliance administration."""
769
+ # given
770
+ request = self.factory.get(
771
+ reverse("ledger:alliance_administration", args=[6666])
772
+ )
773
+ request.user = self.user_admin
774
+ middleware = SessionMiddleware(Mock())
775
+ middleware.process_request(request)
776
+ # when
777
+ response = alliance_ledger.alliance_administration(request, 6666)
778
+ # then
779
+ self.assertEqual(response.status_code, HTTPStatus.FOUND)
780
+ mock_messages.info.assert_called_once_with(request, "Alliance not found.")
781
+
782
+
783
+ class TestViewPlanetaryLedgerAccess(TestCase):
784
+ @classmethod
785
+ def setUpClass(cls):
786
+ super().setUpClass()
787
+ load_allianceauth()
788
+ load_eveuniverse()
789
+
790
+ cls.factory = RequestFactory()
791
+ cls.user, cls.character_ownership = create_user_from_evecharacter(
792
+ 1001,
793
+ permissions=[
794
+ "ledger.basic_access",
795
+ "ledger.advanced_access",
796
+ ],
797
+ )
798
+
799
+ def test_view_planetary_ledger_index(self):
800
+ """Test view planetary ledger index."""
801
+ # given
802
+ request = self.factory.get(reverse("ledger:planetary_ledger_index"))
803
+ request.user = self.user
804
+ # when
805
+ response = planetary.planetary_ledger_index(request)
806
+ # then
807
+ self.assertEqual(response.status_code, HTTPStatus.FOUND)
808
+
809
+ def test_view_planetary_ledger(self):
810
+ """Test view planetary ledger."""
811
+ # given
812
+ request = self.factory.get(
813
+ reverse(
814
+ "ledger:planetary_ledger",
815
+ args=[self.character_ownership.character.character_id],
816
+ )
817
+ )
818
+ request.user = self.user
819
+ # when
820
+ response = planetary.planetary_ledger(
821
+ request, self.character_ownership.character.character_id
822
+ )
823
+ # then
824
+ self.assertEqual(response.status_code, HTTPStatus.OK)
825
+ self.assertContains(response, "Planetary Details")
826
+
827
+ def test_view_planetary_ledger_without_character_id(self):
828
+ """Test view character ledger."""
829
+ # given
830
+ request = self.factory.get(
831
+ reverse(
832
+ "ledger:planetary_ledger",
833
+ args=[self.character_ownership.character.character_id],
834
+ )
835
+ )
836
+ request.user = self.user
837
+ # when
838
+ response = planetary.planetary_ledger(request)
839
+ # then
840
+ self.assertEqual(response.status_code, HTTPStatus.OK)
841
+ self.assertContains(response, "Planetary Details")
842
+
843
+ def test_view_planetary_overview(self):
844
+ """Test view planetary overview."""
845
+ # given
846
+ request = self.factory.get(reverse("ledger:planetary_overview"))
847
+ request.user = self.user
848
+ # when
849
+ response = planetary.planetary_overview(request)
850
+ # then
851
+ self.assertEqual(response.status_code, HTTPStatus.OK)
852
+ self.assertContains(response, "Planetary Overview")