aa-ledger 1.0.4__py3-none-any.whl → 2.0.0__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 (280) hide show
  1. {aa_ledger-1.0.4.dist-info → aa_ledger-2.0.0.dist-info}/METADATA +5 -6
  2. aa_ledger-2.0.0.dist-info/RECORD +267 -0
  3. ledger/__init__.py +2 -2
  4. ledger/admin.py +23 -18
  5. ledger/api/__init__.py +23 -7
  6. ledger/api/{ledger/admin.py → admin.py} +25 -31
  7. ledger/api/alliance.py +755 -0
  8. ledger/api/character.py +786 -0
  9. ledger/api/corporation.py +1141 -0
  10. ledger/api/{helpers.py → helpers/core.py} +33 -33
  11. ledger/api/helpers/icons.py +372 -0
  12. ledger/api/helpers/planetary_helper.py +354 -0
  13. ledger/api/planetary.py +354 -0
  14. ledger/api/schema.py +240 -15
  15. ledger/app_settings.py +11 -27
  16. ledger/auth_hooks.py +2 -2
  17. ledger/constants.py +50 -177
  18. ledger/decorators.py +2 -46
  19. ledger/forms.py +133 -39
  20. ledger/helpers/billboard.py +194 -144
  21. ledger/helpers/cache.py +105 -0
  22. ledger/helpers/discord.py +2 -4
  23. ledger/helpers/eveonline.py +160 -0
  24. ledger/helpers/ledger_data.py +23 -0
  25. ledger/helpers/ref_type.py +53 -78
  26. ledger/locale/cs_CZ/LC_MESSAGES/django.mo +0 -0
  27. ledger/locale/cs_CZ/LC_MESSAGES/django.po +349 -193
  28. ledger/locale/de/LC_MESSAGES/django.mo +0 -0
  29. ledger/locale/de/LC_MESSAGES/django.po +528 -379
  30. ledger/locale/django.pot +721 -546
  31. ledger/locale/es/LC_MESSAGES/django.mo +0 -0
  32. ledger/locale/es/LC_MESSAGES/django.po +349 -194
  33. ledger/locale/fr_FR/LC_MESSAGES/django.mo +0 -0
  34. ledger/locale/fr_FR/LC_MESSAGES/django.po +349 -193
  35. ledger/locale/it_IT/LC_MESSAGES/django.mo +0 -0
  36. ledger/locale/it_IT/LC_MESSAGES/django.po +349 -193
  37. ledger/locale/ja/LC_MESSAGES/django.mo +0 -0
  38. ledger/locale/ja/LC_MESSAGES/django.po +348 -193
  39. ledger/locale/ko_KR/LC_MESSAGES/django.mo +0 -0
  40. ledger/locale/ko_KR/LC_MESSAGES/django.po +349 -193
  41. ledger/locale/nl_NL/LC_MESSAGES/django.mo +0 -0
  42. ledger/locale/nl_NL/LC_MESSAGES/django.po +349 -193
  43. ledger/locale/pl_PL/LC_MESSAGES/django.mo +0 -0
  44. ledger/locale/pl_PL/LC_MESSAGES/django.po +350 -193
  45. ledger/locale/ru/LC_MESSAGES/django.mo +0 -0
  46. ledger/locale/ru/LC_MESSAGES/django.po +348 -193
  47. ledger/locale/sk/LC_MESSAGES/django.mo +0 -0
  48. ledger/locale/sk/LC_MESSAGES/django.po +348 -193
  49. ledger/locale/uk/LC_MESSAGES/django.mo +0 -0
  50. ledger/locale/uk/LC_MESSAGES/django.po +348 -193
  51. ledger/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
  52. ledger/locale/zh_Hans/LC_MESSAGES/django.po +348 -193
  53. ledger/managers/character_audit_manager.py +28 -20
  54. ledger/managers/character_journal_manager.py +185 -357
  55. ledger/managers/character_mining_manager.py +52 -26
  56. ledger/managers/character_planetary_manager.py +178 -136
  57. ledger/managers/corporation_audit_manager.py +36 -27
  58. ledger/managers/corporation_journal_manager.py +92 -56
  59. ledger/managers/general_manager.py +8 -7
  60. ledger/migrations/0018_remove_characterplanet_ledger_char_planet__58a5b6_idx_and_more.py +44 -0
  61. ledger/migrations/0019_rename_characteraudit_characterowner_and_more.py +48 -0
  62. ledger/models/__init__.py +5 -11
  63. ledger/models/characteraudit.py +101 -109
  64. ledger/models/corporationaudit.py +94 -49
  65. ledger/models/general.py +105 -211
  66. ledger/models/helpers/update_manager.py +302 -0
  67. ledger/models/planetary.py +60 -205
  68. ledger/providers.py +101 -0
  69. ledger/static/ledger/css/{ledger.css → aa-ledger.css} +54 -28
  70. ledger/static/ledger/js/aa-ledger.js +124 -0
  71. ledger/static/ledger/js/charts.js +25 -1
  72. ledger/static/ledger/js/view-alliance-ledger.js +383 -0
  73. ledger/static/ledger/js/view-character-ledger.js +388 -0
  74. ledger/static/ledger/js/view-corporation-ledger.js +402 -0
  75. ledger/static/ledger/js/view-planetary.js +492 -0
  76. ledger/static/ledger/libs/amCharts/5.14.4/js/flow.js +2 -0
  77. ledger/static/ledger/libs/amCharts/5.14.4/js/index.js +2 -0
  78. ledger/static/ledger/libs/amCharts/5.14.4/js/percent.js +2 -0
  79. ledger/static/ledger/libs/amCharts/5.14.4/js/themes/Animated.js +2 -0
  80. ledger/static/ledger/libs/amCharts/5.14.4/js/themes/Dark.js +2 -0
  81. ledger/static/ledger/libs/amCharts/5.14.4/js/xy.js +2 -0
  82. ledger/static/ledger/libs/datatables/2.3.5/css/dataTables.bootstrap5.css +610 -0
  83. ledger/static/ledger/libs/datatables/2.3.5/js/dataTables.bootstrap5.js +122 -0
  84. ledger/static/ledger/libs/datatables/2.3.5/js/dataTables.js +14127 -0
  85. ledger/static/ledger/libs/datatables/Extensions/ColumnControl/1.1.1/css/columnControl.bootstrap5.css +516 -0
  86. ledger/static/ledger/libs/datatables/Extensions/ColumnControl/1.1.1/css/columnControl.dataTables.css +529 -0
  87. ledger/static/ledger/libs/datatables/Extensions/ColumnControl/1.1.1/js/columnControl.bootstrap5.js +73 -0
  88. ledger/static/ledger/libs/datatables/Extensions/ColumnControl/1.1.1/js/dataTables.columnControl.js +3090 -0
  89. ledger/static/ledger/libs/datatables/Extensions/FixedHeader/4.0.4/css/fixedHeader.bootstrap5.css +20 -0
  90. ledger/static/ledger/libs/datatables/Extensions/FixedHeader/4.0.4/js/dataTables.fixedHeader.js +1203 -0
  91. ledger/static/ledger/libs/datatables/Extensions/FixedHeader/4.0.4/js/fixedHeader.bootstrap5.js +59 -0
  92. ledger/tasks.py +157 -141
  93. ledger/templates/ledger/base.html +59 -21
  94. ledger/templates/ledger/bundles/aa-ledger-css.html +3 -0
  95. ledger/templates/ledger/bundles/aa-ledger-js.html +3 -0
  96. ledger/templates/ledger/bundles/view-alliance-ledger-js.html +14 -0
  97. ledger/templates/ledger/bundles/view-character-ledger-js.html +15 -0
  98. ledger/templates/ledger/bundles/view-character-planetary-css.html +3 -0
  99. ledger/templates/ledger/bundles/view-character-planetary-js.html +4 -0
  100. ledger/templates/ledger/bundles/view-corporation-ledger-js.html +15 -0
  101. ledger/templates/ledger/partials/modal/confirm.html +0 -1
  102. ledger/templates/ledger/partials/modal/request-accept-delete-alliance.html +38 -0
  103. ledger/templates/ledger/partials/modal/request-accept-delete-character.html +38 -0
  104. ledger/templates/ledger/partials/modal/request-accept-delete-corporation.html +38 -0
  105. ledger/templates/ledger/partials/modal/request-accept-switch-notification.html +38 -0
  106. ledger/templates/ledger/partials/modal/request-view-alliance-details.html +26 -0
  107. ledger/templates/ledger/partials/modal/request-view-character-details.html +26 -0
  108. ledger/templates/ledger/partials/modal/request-view-corporation-details.html +26 -0
  109. ledger/templates/ledger/partials/modal/request-view-extractor.html +32 -0
  110. ledger/templates/ledger/partials/modal/request-view-factory.html +31 -0
  111. ledger/templates/ledger/partials/{menu → navigation}/administration.html +8 -0
  112. ledger/templates/ledger/partials/{menu → navigation}/navigation.html +2 -2
  113. ledger/templates/ledger/partials/{administration → view-alliance-administration}/alliance_corporations.html +3 -3
  114. ledger/templates/ledger/partials/view-alliance-administration/dashboard.html +81 -0
  115. ledger/templates/ledger/partials/view-alliance-ledger/alliance-billboard.html +25 -0
  116. ledger/templates/ledger/partials/view-alliance-ledger/alliance-ledger-details.html +21 -0
  117. ledger/templates/ledger/partials/view-alliance-ledger/alliance-table.html +24 -0
  118. ledger/templates/ledger/partials/view-alliance-ledger/information/daily.html +18 -0
  119. ledger/templates/ledger/partials/view-alliance-ledger/information/hourly.html +18 -0
  120. ledger/templates/ledger/partials/view-alliance-ledger/information/summary.html +19 -0
  121. ledger/templates/ledger/partials/{administration → view-character-administration}/character.html +1 -9
  122. ledger/templates/ledger/partials/{administration → view-character-administration}/dashboard.html +0 -34
  123. ledger/templates/ledger/partials/view-character-ledger/character-billboard.html +25 -0
  124. ledger/templates/ledger/partials/view-character-ledger/character-ledger-details.html +21 -0
  125. ledger/templates/ledger/partials/view-character-ledger/character-table.html +25 -0
  126. ledger/templates/ledger/partials/view-character-ledger/information/daily.html +18 -0
  127. ledger/templates/ledger/partials/view-character-ledger/information/hourly.html +18 -0
  128. ledger/templates/ledger/partials/view-character-ledger/information/summary.html +19 -0
  129. ledger/templates/ledger/partials/view-character-planetary/extractor-table.html +24 -0
  130. ledger/templates/ledger/partials/view-character-planetary/factory-table.html +24 -0
  131. ledger/templates/ledger/partials/view-character-planetary/planetary-table.html +22 -0
  132. ledger/templates/ledger/partials/view-character-planetary/storage-table.html +23 -0
  133. ledger/templates/ledger/partials/{administration → view-corporation-administration}/corporation.html +5 -13
  134. ledger/templates/ledger/partials/{administration → view-corporation-administration}/corporation_characters.html +1 -1
  135. ledger/templates/ledger/partials/view-corporation-administration/dashboard.html +81 -0
  136. ledger/templates/ledger/partials/view-corporation-ledger/corporation-billboard.html +25 -0
  137. ledger/templates/ledger/partials/view-corporation-ledger/corporation-ledger-details.html +21 -0
  138. ledger/templates/ledger/partials/view-corporation-ledger/corporation-table.html +26 -0
  139. ledger/templates/ledger/partials/view-corporation-ledger/information/daily.html +18 -0
  140. ledger/templates/ledger/partials/view-corporation-ledger/information/hourly.html +18 -0
  141. ledger/templates/ledger/partials/view-corporation-ledger/information/summary.html +19 -0
  142. ledger/templates/ledger/view-administration.html +62 -0
  143. ledger/templates/ledger/view-alliance-administration.html +49 -0
  144. ledger/templates/ledger/view-alliance-ledger.html +72 -0
  145. ledger/templates/ledger/view-alliance-overview.html +131 -0
  146. ledger/templates/ledger/view-character-administration.html +42 -0
  147. ledger/templates/ledger/view-character-ledger.html +73 -0
  148. ledger/templates/ledger/view-character-overview.html +135 -0
  149. ledger/templates/ledger/view-character-planetary-overview.html +135 -0
  150. ledger/templates/ledger/view-character-planetary.html +73 -0
  151. ledger/templates/ledger/view-corporation-administration.html +42 -0
  152. ledger/templates/ledger/view-corporation-ledger.html +73 -0
  153. ledger/templates/ledger/view-corporation-overview.html +131 -0
  154. ledger/templatetags/ledger.py +3 -5
  155. ledger/tests/__init__.py +187 -0
  156. ledger/tests/test_admin.py +164 -68
  157. ledger/tests/test_auth_hook.py +31 -13
  158. ledger/tests/test_decarators.py +14 -79
  159. ledger/tests/test_discord_installed.py +0 -1
  160. ledger/tests/test_helpers/test_ledger_data.py +19 -0
  161. ledger/tests/test_managers/test_character_audit_manager.py +111 -69
  162. ledger/tests/test_managers/test_character_journal_manager.py +48 -208
  163. ledger/tests/test_managers/test_character_mining_manager.py +37 -16
  164. ledger/tests/test_managers/test_corporation_division_manager.py +66 -28
  165. ledger/tests/test_managers/test_corporation_journal_manager.py +39 -42
  166. ledger/tests/test_managers/test_general_manager.py +78 -18
  167. ledger/tests/test_managers/test_planetary_manager.py +73 -32
  168. ledger/tests/test_models/test_characteraudit.py +58 -74
  169. ledger/tests/test_models/test_characterminingledger.py +20 -26
  170. ledger/tests/test_models/test_characterwalletjournal.py +10 -33
  171. ledger/tests/test_models/test_corporationaudit.py +41 -35
  172. ledger/tests/test_models/test_corporationwalletjournal.py +35 -32
  173. ledger/tests/test_models/test_general.py +44 -11
  174. ledger/tests/test_models/test_planetary.py +14 -80
  175. ledger/tests/test_templatetags.py +2 -7
  176. ledger/tests/test_views/corporation/test_add_corp.py +16 -35
  177. ledger/tests/test_views/corporation/test_delete_corporation.py +66 -42
  178. ledger/tests/test_views/test_access.py +512 -545
  179. ledger/tests/test_views/test_add_ally.py +57 -46
  180. ledger/tests/test_views/test_add_char.py +21 -33
  181. ledger/tests/test_views/test_delete_character.py +24 -21
  182. ledger/tests/testdata/README_ESI_STUB.md +430 -0
  183. ledger/tests/testdata/esi_stub_openapi.py +511 -0
  184. ledger/tests/testdata/integrations/__init__.py +0 -0
  185. ledger/tests/testdata/{load_eveuniverse.py → integrations/eveuniverse.py} +0 -1
  186. ledger/tests/testdata/integrations/planetary.py +13 -0
  187. ledger/tests/testdata/json/factory.json +281 -0
  188. ledger/tests/testdata/json/inactive.json +281 -0
  189. ledger/tests/testdata/json/pins.json +175 -272
  190. ledger/tests/testdata/json/route.json +95 -528
  191. ledger/tests/testdata/test_esi_stub.py +468 -0
  192. ledger/tests/testdata/utils.py +601 -0
  193. ledger/thirdparty/charlink_hook.py +60 -30
  194. ledger/urls.py +0 -135
  195. ledger/views/alliance/add_ally.py +2 -4
  196. ledger/views/alliance/alliance_ledger.py +64 -147
  197. ledger/views/character/add_char.py +8 -10
  198. ledger/views/character/character_ledger.py +60 -126
  199. ledger/views/character/planetary.py +5 -98
  200. ledger/views/corporation/add_corp.py +10 -12
  201. ledger/views/corporation/corporation_ledger.py +65 -327
  202. ledger/views/index.py +92 -30
  203. aa_ledger-1.0.4.dist-info/RECORD +0 -236
  204. ledger/api/api_helper/planetary_helper.py +0 -107
  205. ledger/api/ledger/__init__.py +0 -7
  206. ledger/api/ledger/planetary.py +0 -231
  207. ledger/helpers/alliance.py +0 -317
  208. ledger/helpers/character.py +0 -251
  209. ledger/helpers/core.py +0 -665
  210. ledger/helpers/corporation.py +0 -427
  211. ledger/helpers/data_exporter.py +0 -452
  212. ledger/static/ledger/js/planetary-confirm.js +0 -66
  213. ledger/static/ledger/js/planetary.js +0 -143
  214. ledger/templates/ledger/admin.html +0 -43
  215. ledger/templates/ledger/allyledger/admin/alliance_administration.html +0 -46
  216. ledger/templates/ledger/allyledger/admin/alliance_overview.html +0 -108
  217. ledger/templates/ledger/allyledger/alliance_ledger.html +0 -86
  218. ledger/templates/ledger/bundles/character-ledger-bundles.html +0 -66
  219. ledger/templates/ledger/bundles/corporation-ledger-bundles.html +0 -75
  220. ledger/templates/ledger/bundles/ledger-bundles.html +0 -23
  221. ledger/templates/ledger/bundles/ledger-css.html +0 -3
  222. ledger/templates/ledger/bundles/planetary-bundles.html +0 -50
  223. ledger/templates/ledger/bundles/table-css.html +0 -3
  224. ledger/templates/ledger/charledger/admin/character_administration.html +0 -39
  225. ledger/templates/ledger/charledger/admin/character_overview.html +0 -106
  226. ledger/templates/ledger/charledger/character_ledger.html +0 -94
  227. ledger/templates/ledger/charledger/planetary/admin/planetary_overview.html +0 -123
  228. ledger/templates/ledger/charledger/planetary/planetary_ledger.html +0 -54
  229. ledger/templates/ledger/corpledger/admin/corporation_administration.html +0 -39
  230. ledger/templates/ledger/corpledger/admin/corporation_overview.html +0 -108
  231. ledger/templates/ledger/corpledger/corporation_ledger.html +0 -129
  232. ledger/templates/ledger/data-export.html +0 -78
  233. ledger/templates/ledger/error.html +0 -31
  234. ledger/templates/ledger/partials/form/error-message.html +0 -1
  235. ledger/templates/ledger/partials/information/daily.html +0 -56
  236. ledger/templates/ledger/partials/information/day.html +0 -48
  237. ledger/templates/ledger/partials/information/error.html +0 -8
  238. ledger/templates/ledger/partials/information/hourly.html +0 -53
  239. ledger/templates/ledger/partials/information/summary.html +0 -88
  240. ledger/templates/ledger/partials/information/view_character_content.html +0 -35
  241. ledger/templates/ledger/partials/modal/switchalarm_confirm.html +0 -39
  242. ledger/templates/ledger/partials/modal/view_extractor.html +0 -48
  243. ledger/templates/ledger/partials/modal/view_factory.html +0 -123
  244. ledger/templates/ledger/partials/table/char-ledger.html +0 -85
  245. ledger/templates/ledger/partials/table/corp-ledger.html +0 -66
  246. ledger/templates/ledger/partials/table/planetary.html +0 -18
  247. ledger/templates/ledger/partials/thirdparty/billboard.html +0 -22
  248. ledger/templates/ledger/partials/view/card.html +0 -160
  249. ledger/templates/ledger/permission.html +0 -2
  250. ledger/tests/test_helpers/test_billboard.py +0 -11
  251. ledger/tests/test_helpers/test_data_exporter.py +0 -207
  252. ledger/tests/test_tasks.py +0 -282
  253. ledger/tests/test_view_helpers/test_core.py +0 -47
  254. ledger/tests/test_views/corporation/test_corporation.py +0 -267
  255. ledger/tests/test_views/test_planetary.py +0 -137
  256. ledger/tests/testdata/esi_stub.py +0 -109
  257. ledger/tests/testdata/esi_stub_migration.py +0 -80
  258. ledger/tests/testdata/generate_characteraudit.py +0 -106
  259. ledger/tests/testdata/generate_corporationaudit.py +0 -74
  260. ledger/tests/testdata/generate_events.py +0 -31
  261. ledger/tests/testdata/generate_miningledger.py +0 -13
  262. ledger/tests/testdata/generate_planets.py +0 -48
  263. ledger/tests/testdata/generate_walletjournal.py +0 -42
  264. ledger/tests/testdata/json/czarno-pins.json +0 -240
  265. ledger/tests/testdata/json/czarno-routes.json +0 -165
  266. ledger/tests/testdata/json/pins2.json +0 -538
  267. {aa_ledger-1.0.4.dist-info → aa_ledger-2.0.0.dist-info}/WHEEL +0 -0
  268. {aa_ledger-1.0.4.dist-info → aa_ledger-2.0.0.dist-info}/licenses/LICENSE +0 -0
  269. /ledger/{tests/test_view_helpers → api/helpers}/__init__.py +0 -0
  270. /ledger/templates/ledger/bundles/{ally-administration-bundles.html → view-alliance-administration-js.html} +0 -0
  271. /ledger/templates/ledger/bundles/{char-administration-bundles.html → view-character-administration-js.html} +0 -0
  272. /ledger/templates/ledger/bundles/{corp-administration-bundles.html → view-corporation-administration-js.html} +0 -0
  273. /ledger/templates/ledger/partials/{administration → view-alliance-administration}/alliance.html +0 -0
  274. /ledger/tests/testdata/{esi.json → esi_test_data.json} +0 -0
  275. /ledger/tests/testdata/{allianceauth.json → integrations/allianceauth.json} +0 -0
  276. /ledger/tests/testdata/{load_allianceauth.py → integrations/allianceauth.py} +0 -0
  277. /ledger/tests/testdata/{eveentity.json → integrations/eveentity.json} +0 -0
  278. /ledger/tests/testdata/{load_eveentity.py → integrations/eveentity.py} +0 -0
  279. /ledger/tests/testdata/{eveuniverse.json → integrations/eveuniverse.json} +0 -0
  280. /ledger/tests/testdata/{planetary.json → integrations/planetary.json} +0 -0
@@ -1,282 +0,0 @@
1
- # Standard Library
2
- import logging
3
- from unittest.mock import patch
4
-
5
- # Django
6
- from django.test import TestCase
7
- from django.test.utils import override_settings
8
- from django.utils import timezone
9
-
10
- # AA Ledger
11
- from ledger import tasks
12
- from ledger.app_settings import LEDGER_CACHE_KEY
13
- from ledger.models.planetary import CharacterPlanetDetails
14
- from ledger.tests.testdata.generate_characteraudit import (
15
- create_characteraudit_from_evecharacter,
16
- create_update_status,
17
- )
18
- from ledger.tests.testdata.generate_corporationaudit import (
19
- create_corporation_update_status,
20
- create_corporationaudit_from_evecharacter,
21
- )
22
- from ledger.tests.testdata.generate_planets import (
23
- _planetary_data,
24
- create_character_planet,
25
- create_character_planet_details,
26
- )
27
- from ledger.tests.testdata.load_allianceauth import load_allianceauth
28
- from ledger.tests.testdata.load_eveuniverse import load_eveuniverse
29
-
30
- TASK_PATH = "ledger.tasks"
31
-
32
-
33
- @patch(TASK_PATH + ".update_character", spec=True)
34
- class TestUpdateAllCharacters(TestCase):
35
- @classmethod
36
- def setUpClass(cls):
37
- super().setUpClass()
38
- load_allianceauth()
39
-
40
- cls.audit = create_characteraudit_from_evecharacter(1001)
41
-
42
- def test_should_update_all_characters(self, mock_update_character):
43
- # when
44
- tasks.update_all_characters()
45
- # then
46
- self.assertTrue(mock_update_character.apply_async.called)
47
-
48
- def test_should_update_subset_characters(self, mock_update_character):
49
- # when
50
- tasks.update_subset_characters()
51
- # then
52
- self.assertTrue(mock_update_character.apply_async.called)
53
-
54
-
55
- @patch(TASK_PATH + ".chain", spec=True)
56
- @patch(TASK_PATH + ".logger", spec=True)
57
- class TestUpdateCharacter(TestCase):
58
- @classmethod
59
- def setUpClass(cls):
60
- super().setUpClass()
61
- load_allianceauth()
62
-
63
- cls.audit = create_characteraudit_from_evecharacter(1001)
64
-
65
- def test_update_character_should_no_updated(self, mock_logger, __):
66
- # given
67
- for section in self.audit.UpdateSection.get_sections():
68
- create_update_status(
69
- self.audit,
70
- section=section,
71
- is_success=True,
72
- error_message="",
73
- has_token_error=False,
74
- last_run_at=timezone.now(),
75
- last_run_finished_at=timezone.now(),
76
- last_update_at=timezone.now(),
77
- last_update_finished_at=timezone.now(),
78
- )
79
-
80
- # when
81
- tasks.update_character(self.audit.pk)
82
- # then
83
- mock_logger.info.assert_called_once_with(
84
- "No updates needed for %s",
85
- self.audit.eve_character.character_name,
86
- )
87
-
88
- def test_update_character_should_update(self, mock_logger, mock_chain):
89
- # given
90
- create_update_status(
91
- self.audit,
92
- section=self.audit.UpdateSection.WALLET_JOURNAL,
93
- is_success=True,
94
- error_message="",
95
- has_token_error=False,
96
- last_run_at=None,
97
- last_run_finished_at=None,
98
- last_update_at=None,
99
- last_update_finished_at=None,
100
- )
101
-
102
- # when
103
- tasks.update_character(self.audit.pk)
104
- # then
105
- mock_chain.assert_called_once()
106
-
107
-
108
- @patch(TASK_PATH + ".update_corporation", spec=True)
109
- class TestUpdateAllCorporations(TestCase):
110
- @classmethod
111
- def setUpClass(cls):
112
- super().setUpClass()
113
- load_allianceauth()
114
-
115
- cls.audit = create_corporationaudit_from_evecharacter(1001)
116
-
117
- def test_should_update_all_corporations(self, mock_update_corporation):
118
- # when
119
- tasks.update_all_corporations()
120
- # then
121
- self.assertTrue(mock_update_corporation.apply_async.called)
122
-
123
- def test_should_update_subset_corporation(self, mock_update_corporation):
124
- # when
125
- tasks.update_subset_corporations()
126
- # then
127
- self.assertTrue(mock_update_corporation.apply_async.called)
128
-
129
-
130
- @patch(TASK_PATH + ".chain", spec=True)
131
- @patch(TASK_PATH + ".logger", spec=True)
132
- class TestUpdateCorporation(TestCase):
133
- @classmethod
134
- def setUpClass(cls):
135
- super().setUpClass()
136
- load_allianceauth()
137
-
138
- cls.audit = create_corporationaudit_from_evecharacter(1001)
139
-
140
- def test_update_corporation_should_no_updated(self, mock_logger, __):
141
- # given
142
- for section in self.audit.UpdateSection.get_sections():
143
- create_corporation_update_status(
144
- self.audit,
145
- section=section,
146
- is_success=True,
147
- error_message="",
148
- has_token_error=False,
149
- last_run_at=timezone.now(),
150
- last_run_finished_at=timezone.now(),
151
- last_update_at=timezone.now(),
152
- last_update_finished_at=timezone.now(),
153
- )
154
- # when
155
- tasks.update_corporation(self.audit.pk)
156
- # then
157
- mock_logger.info.assert_called_once_with(
158
- "No updates needed for %s",
159
- self.audit.corporation.corporation_name,
160
- )
161
-
162
- def test_update_corporation_should_update(self, mock_logger, mock_chain):
163
- # given
164
- create_corporation_update_status(
165
- self.audit,
166
- section=self.audit.UpdateSection.WALLET_JOURNAL,
167
- is_success=True,
168
- error_message="",
169
- has_token_error=False,
170
- last_run_at=None,
171
- last_run_finished_at=None,
172
- last_update_at=None,
173
- last_update_finished_at=None,
174
- )
175
-
176
- # when
177
- tasks.update_corporation(self.audit.pk)
178
- # then
179
- mock_chain.assert_called_once()
180
-
181
-
182
- @override_settings(
183
- CELERY_ALWAYS_EAGER=True,
184
- CELERY_EAGER_PROPAGATES_EXCEPTIONS=True,
185
- APP_UTILS_OBJECT_CACHE_DISABLED=True,
186
- )
187
- @patch(TASK_PATH + ".logger", spec=True)
188
- class TestClearEtag(TestCase):
189
- @classmethod
190
- def setUpClass(cls):
191
- super().setUpClass()
192
- load_allianceauth()
193
-
194
- def test_clear_all_etag_return_no_etags(self, mock_logger):
195
- # when
196
- tasks.clear_all_etags()
197
-
198
- # then
199
- mock_logger.info.assert_any_call("Deleting %s etag keys", 0)
200
- mock_logger.info.assert_any_call("No etag keys to delete")
201
-
202
- def test_clear_all_etag_return_etags(self, mock_logger):
203
- # given
204
- # pylint: disable=import-outside-toplevel
205
- # Third Party
206
- from django_redis import get_redis_connection
207
-
208
- _client = get_redis_connection("default")
209
- keys = _client.keys(f":?:{LEDGER_CACHE_KEY}-*")
210
-
211
- # when
212
- tasks.clear_all_etags()
213
-
214
- # then
215
- mock_logger.info.assert_any_call("Deleting %s etag keys", len(keys))
216
- mock_logger.info.assert_any_call("Deleted %s etag keys", len(keys))
217
-
218
-
219
- @override_settings(
220
- CELERY_ALWAYS_EAGER=True,
221
- CELERY_EAGER_PROPAGATES_EXCEPTIONS=True,
222
- APP_UTILS_OBJECT_CACHE_DISABLED=True,
223
- )
224
- class TestCheckPlanetaryNotification(TestCase):
225
- @classmethod
226
- def setUpClass(cls):
227
- super().setUpClass()
228
- load_allianceauth()
229
- load_eveuniverse()
230
-
231
- cls.planet_params = {
232
- "upgrade_level": 5,
233
- "num_pins": 5,
234
- }
235
-
236
- cls.planetdetails_params = {
237
- "pin_id": 1,
238
- "pin_type": "Extractor",
239
- "status": "Active",
240
- "last_update": None,
241
- "last_update_finished_at": None,
242
- }
243
-
244
- cls.audit = create_characteraudit_from_evecharacter(1001)
245
-
246
- cls.audit2 = create_characteraudit_from_evecharacter(1002)
247
-
248
- cls.planet_1 = create_character_planet(
249
- cls.audit, planet_id=4001, **cls.planet_params
250
- )
251
-
252
- cls.planet_2 = create_character_planet(
253
- cls.audit2, planet_id=4001, **cls.planet_params
254
- )
255
-
256
- cls.planet_3 = create_character_planet(
257
- cls.audit2, planet_id=4002, **cls.planet_params
258
- )
259
-
260
- cls.planetdetails_1 = create_character_planet_details(
261
- cls.planet_1, notification=True, **_planetary_data
262
- )
263
-
264
- cls.planetdetails_2 = create_character_planet_details(
265
- cls.planet_2,
266
- notification=True,
267
- )
268
-
269
- cls.planetdetails_3 = create_character_planet_details(
270
- cls.planet_3, notification=True, **_planetary_data
271
- )
272
-
273
- def test_check_planetary_notification(self):
274
- # when
275
- tasks.check_planetary_alarms()
276
- # then
277
- self.assertEqual(
278
- CharacterPlanetDetails.objects.filter(
279
- notification_sent=True,
280
- ).count(),
281
- 2,
282
- )
@@ -1,47 +0,0 @@
1
- # Django
2
- from django.test import RequestFactory, TestCase
3
-
4
- # AA Ledger
5
- from ledger.helpers.core import (
6
- add_info_to_context,
7
- )
8
- from ledger.tests.testdata.generate_corporationaudit import (
9
- add_corporationaudit_corporation_to_user,
10
- create_user_from_evecharacter,
11
- )
12
- from ledger.tests.testdata.load_allianceauth import load_allianceauth
13
- from ledger.tests.testdata.load_eveentity import load_eveentity
14
- from ledger.tests.testdata.load_eveuniverse import load_eveuniverse
15
-
16
- MODULE_PATH = "ledger.view_helpers.core"
17
-
18
-
19
- class TestViewHelpers(TestCase):
20
- @classmethod
21
- def setUpClass(cls):
22
- super().setUpClass()
23
- load_allianceauth()
24
- load_eveuniverse()
25
- load_eveentity()
26
-
27
- cls.factory = RequestFactory()
28
- cls.user, cls.character_ownership = create_user_from_evecharacter(
29
- 1001, permissions=["ledger.basic_access"]
30
- )
31
- cls.audit = add_corporationaudit_corporation_to_user(
32
- cls.user, cls.character_ownership.character.character_id
33
- )
34
-
35
- def test_add_info_to_context(self):
36
- # given
37
- request = self.factory.get("/")
38
- request.user = self.user
39
-
40
- context = {
41
- "theme": None,
42
- "issues": [],
43
- }
44
- # when
45
- result = add_info_to_context(request, context)
46
- # then
47
- self.assertEqual(result, context)
@@ -1,267 +0,0 @@
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.sessions.middleware import SessionMiddleware
9
- from django.test import RequestFactory, TestCase, override_settings
10
- from django.urls import reverse
11
- from django.utils import timezone
12
-
13
- # AA Ledger
14
- from ledger.models.general import EveEntity
15
- from ledger.tests.testdata.generate_corporationaudit import (
16
- create_corporationaudit_from_user,
17
- create_user_from_evecharacter,
18
- )
19
- from ledger.tests.testdata.generate_walletjournal import (
20
- create_division,
21
- create_wallet_journal_entry,
22
- )
23
- from ledger.tests.testdata.load_allianceauth import load_allianceauth
24
- from ledger.tests.testdata.load_eveentity import load_eveentity
25
- from ledger.tests.testdata.load_eveuniverse import load_eveuniverse
26
- from ledger.views.corporation.corporation_ledger import (
27
- corporation_data_export_generate,
28
- corporation_data_export_run_update,
29
- )
30
-
31
- MODULE_PATH = "ledger.views.corporation.corporation_ledger"
32
-
33
-
34
- @patch(MODULE_PATH + ".messages")
35
- @patch(MODULE_PATH + ".tasks")
36
- @override_settings(CELERY_ALWAYS_EAGER=True, CELERY_EAGER_PROPAGATES_EXCEPTIONS=True)
37
- class TestCorporationLedgerView(TestCase):
38
- @classmethod
39
- def setUpClass(cls):
40
- super().setUpClass()
41
- load_allianceauth()
42
- load_eveuniverse()
43
- load_eveentity()
44
-
45
- cls.factory = RequestFactory()
46
- cls.user, cls.character_ownership = create_user_from_evecharacter(
47
- 1001,
48
- permissions=[
49
- "ledger.basic_access",
50
- "ledger.advanced_access",
51
- "ledger.manage_access",
52
- ],
53
- )
54
-
55
- cls.user_no_permissions, cls.character_ownership = (
56
- create_user_from_evecharacter(
57
- 1002,
58
- permissions=[
59
- "ledger.basic_access",
60
- "ledger.advanced_access",
61
- "ledger.manage_access",
62
- ],
63
- )
64
- )
65
- cls.audit = create_corporationaudit_from_user(cls.user)
66
-
67
- cls.eve_character_first_party = EveEntity.objects.get(eve_id=2001)
68
- cls.eve_character_second_party = EveEntity.objects.get(eve_id=1001)
69
-
70
- cls.division = create_division(
71
- corporation=cls.audit, name="MEGA KONTO", balance=1000000, division_id=1
72
- )
73
-
74
- cls.journal_entry = create_wallet_journal_entry(
75
- journal_type="corporation",
76
- division=cls.division,
77
- context_id=1,
78
- entry_id=10,
79
- amount=1000,
80
- balance=2000,
81
- date=timezone.datetime.replace(
82
- timezone.now(),
83
- year=2016,
84
- month=10,
85
- day=29,
86
- hour=0,
87
- minute=0,
88
- second=0,
89
- microsecond=0,
90
- ),
91
- description="Test Journal",
92
- first_party=cls.eve_character_first_party,
93
- second_party=cls.eve_character_second_party,
94
- ref_type="player_donation",
95
- )
96
-
97
- def test_corporation_data_export_generate(self, mock_tasks, mock_messages):
98
- """Test should generate corporation data export"""
99
- corporation_id = self.audit.corporation.corporation_id
100
- mock_tasks.export_data_ledger.apply_async = Mock()
101
-
102
- form_data = {
103
- "year": "2016",
104
- }
105
-
106
- request = self.factory.post(
107
- reverse("ledger:corporation_data_export_generate", args=[corporation_id]),
108
- data=form_data,
109
- )
110
-
111
- request.user = self.user
112
-
113
- response = corporation_data_export_generate(
114
- request, corporation_id=corporation_id
115
- )
116
-
117
- self.assertEqual(response.status_code, HTTPStatus.FOUND)
118
- mock_messages.info.assert_called_once_with(
119
- request,
120
- f"Data export for {corporation_id} has been started. This can take a couple of minutes. You will get a notification once it is completed.",
121
- )
122
- mock_tasks.export_data_ledger.apply_async.assert_called_once()
123
-
124
- def test_corporation_data_export_generate_no_permission(
125
- self, mock_tasks, mock_messages
126
- ):
127
- """Test should not generate corporation data export due to no permission"""
128
- corporation_id = self.audit.corporation.corporation_id
129
- mock_tasks.export_data_ledger.apply_async = Mock()
130
-
131
- form_data = {
132
- "year": "2016",
133
- }
134
-
135
- request = self.factory.post(
136
- reverse("ledger:corporation_data_export_generate", args=[corporation_id]),
137
- data=form_data,
138
- )
139
-
140
- request.user = self.user_no_permissions
141
-
142
- response = corporation_data_export_generate(
143
- request, corporation_id=corporation_id
144
- )
145
-
146
- self.assertEqual(response.status_code, HTTPStatus.FOUND)
147
- mock_messages.error.assert_called_once_with(request, "Permission Denied")
148
- mock_tasks.export_data_ledger.apply_async.assert_not_called()
149
-
150
- def test_corporation_data_export_generate_corporation_not_found(
151
- self, mock_tasks, mock_messages
152
- ):
153
- """Test should not generate corporation data export due to corporation not found"""
154
- corporation_id = 9999 # Non-existent corporation ID
155
- mock_tasks.export_data_ledger.apply_async = Mock()
156
-
157
- form_data = {
158
- "year": "2016",
159
- }
160
-
161
- request = self.factory.post(
162
- reverse("ledger:corporation_data_export_generate", args=[corporation_id]),
163
- data=form_data,
164
- )
165
-
166
- request.user = self.user
167
-
168
- response = corporation_data_export_generate(
169
- request, corporation_id=corporation_id
170
- )
171
-
172
- self.assertEqual(response.status_code, HTTPStatus.FOUND)
173
- mock_messages.info.assert_called_once_with(request, "Corporation not found")
174
- mock_tasks.export_data_ledger.apply_async.assert_not_called()
175
-
176
- def test_corporation_data_export_generate_invalid_form(
177
- self, mock_tasks, mock_messages
178
- ):
179
- """Test should not generate corporation data export due to invalid form"""
180
- corporation_id = self.audit.corporation.corporation_id
181
- mock_tasks.export_data_ledger.apply_async = Mock()
182
-
183
- form_data = {
184
- "year": "invalid_year", # Invalid year
185
- }
186
-
187
- request = self.factory.post(
188
- reverse("ledger:corporation_data_export_generate", args=[corporation_id]),
189
- data=form_data,
190
- )
191
-
192
- request.user = self.user
193
-
194
- response = corporation_data_export_generate(
195
- request, corporation_id=corporation_id
196
- )
197
-
198
- self.assertEqual(response.status_code, HTTPStatus.FOUND)
199
- mock_messages.error.assert_called_once_with(request, "Invalid form submission.")
200
- mock_tasks.export_data_ledger.apply_async.assert_not_called()
201
-
202
- @patch(MODULE_PATH + ".data_exporter.LedgerCSVExporter.decoder")
203
- def test_corporation_data_export_run_update(
204
- self, mock_decoder, mock_tasks, mock_messages
205
- ):
206
- """Test should run corporation data export update task"""
207
- corporation_id = self.audit.corporation.corporation_id
208
- hashcode = "testhashcode"
209
- mock_tasks.export_data_ledger.apply_async = Mock()
210
- mock_decoder.return_value = (2001, 1, 2016, 1)
211
-
212
- request = self.factory.get(
213
- reverse("ledger:corporation_data_export_run_update", args=[hashcode]),
214
- )
215
-
216
- request.user = self.user
217
-
218
- response = corporation_data_export_run_update(request, hash_code=hashcode)
219
-
220
- self.assertEqual(response.status_code, HTTPStatus.FOUND)
221
- mock_messages.info.assert_called_once_with(
222
- request,
223
- f"Data export for {corporation_id} has been started. This can take a couple of minutes. You will get a notification once it is completed.",
224
- )
225
- mock_tasks.export_data_ledger.apply_async.assert_called_once()
226
-
227
- @patch(MODULE_PATH + ".data_exporter.LedgerCSVExporter.decoder")
228
- def test_corporation_data_export_run_update_no_permission(
229
- self, mock_decoder, mock_tasks, mock_messages
230
- ):
231
- """Test should not run corporation data export update task due to no permission"""
232
- hashcode = "testhashcode"
233
- mock_tasks.export_data_ledger.apply_async = Mock()
234
- mock_decoder.return_value = (2001, 1, 2016, 1)
235
-
236
- request = self.factory.get(
237
- reverse("ledger:corporation_data_export_run_update", args=[hashcode]),
238
- )
239
-
240
- request.user = self.user_no_permissions
241
-
242
- response = corporation_data_export_run_update(request, hash_code=hashcode)
243
-
244
- self.assertEqual(response.status_code, HTTPStatus.FOUND)
245
- mock_messages.error.assert_called_once_with(request, "Permission Denied")
246
- mock_tasks.export_data_ledger.apply_async.assert_not_called()
247
-
248
- @patch(MODULE_PATH + ".data_exporter.LedgerCSVExporter.decoder")
249
- def test_corporation_data_export_run_update_corporation_not_found(
250
- self, mock_decoder, mock_tasks, mock_messages
251
- ):
252
- """Test should not run corporation data export update task due to corporation not found"""
253
- hashcode = "testhashcode"
254
- mock_tasks.export_data_ledger.apply_async = Mock()
255
- mock_decoder.return_value = (9999, 1, 2016, 1)
256
-
257
- request = self.factory.get(
258
- reverse("ledger:corporation_data_export_run_update", args=[hashcode]),
259
- )
260
-
261
- request.user = self.user
262
-
263
- response = corporation_data_export_run_update(request, hash_code=hashcode)
264
-
265
- self.assertEqual(response.status_code, HTTPStatus.FOUND)
266
- mock_messages.info.assert_called_once_with(request, "Corporation not found")
267
- mock_tasks.export_data_ledger.apply_async.assert_not_called()