aa-ledger 1.0.3__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.3.dist-info → aa_ledger-2.0.0.dist-info}/METADATA +6 -6
  2. aa_ledger-2.0.0.dist-info/RECORD +267 -0
  3. {aa_ledger-1.0.3.dist-info → aa_ledger-2.0.0.dist-info}/WHEEL +1 -1
  4. ledger/__init__.py +2 -2
  5. ledger/admin.py +23 -18
  6. ledger/api/__init__.py +23 -7
  7. ledger/api/{ledger/admin.py → admin.py} +25 -31
  8. ledger/api/alliance.py +755 -0
  9. ledger/api/character.py +786 -0
  10. ledger/api/corporation.py +1141 -0
  11. ledger/api/{helpers.py → helpers/core.py} +33 -33
  12. ledger/api/helpers/icons.py +372 -0
  13. ledger/api/helpers/planetary_helper.py +354 -0
  14. ledger/api/planetary.py +354 -0
  15. ledger/api/schema.py +240 -15
  16. ledger/app_settings.py +18 -26
  17. ledger/auth_hooks.py +2 -2
  18. ledger/constants.py +50 -177
  19. ledger/decorators.py +2 -46
  20. ledger/forms.py +133 -39
  21. ledger/helpers/billboard.py +194 -144
  22. ledger/helpers/cache.py +105 -0
  23. ledger/helpers/discord.py +2 -4
  24. ledger/helpers/eveonline.py +160 -0
  25. ledger/helpers/ledger_data.py +23 -0
  26. ledger/helpers/ref_type.py +53 -78
  27. ledger/locale/cs_CZ/LC_MESSAGES/django.mo +0 -0
  28. ledger/locale/cs_CZ/LC_MESSAGES/django.po +349 -193
  29. ledger/locale/de/LC_MESSAGES/django.mo +0 -0
  30. ledger/locale/de/LC_MESSAGES/django.po +528 -379
  31. ledger/locale/django.pot +717 -553
  32. ledger/locale/es/LC_MESSAGES/django.mo +0 -0
  33. ledger/locale/es/LC_MESSAGES/django.po +349 -194
  34. ledger/locale/fr_FR/LC_MESSAGES/django.mo +0 -0
  35. ledger/locale/fr_FR/LC_MESSAGES/django.po +349 -193
  36. ledger/locale/it_IT/LC_MESSAGES/django.mo +0 -0
  37. ledger/locale/it_IT/LC_MESSAGES/django.po +349 -193
  38. ledger/locale/ja/LC_MESSAGES/django.mo +0 -0
  39. ledger/locale/ja/LC_MESSAGES/django.po +348 -193
  40. ledger/locale/ko_KR/LC_MESSAGES/django.mo +0 -0
  41. ledger/locale/ko_KR/LC_MESSAGES/django.po +349 -193
  42. ledger/locale/nl_NL/LC_MESSAGES/django.mo +0 -0
  43. ledger/locale/nl_NL/LC_MESSAGES/django.po +349 -193
  44. ledger/locale/pl_PL/LC_MESSAGES/django.mo +0 -0
  45. ledger/locale/pl_PL/LC_MESSAGES/django.po +350 -193
  46. ledger/locale/ru/LC_MESSAGES/django.mo +0 -0
  47. ledger/locale/ru/LC_MESSAGES/django.po +348 -193
  48. ledger/locale/sk/LC_MESSAGES/django.mo +0 -0
  49. ledger/locale/sk/LC_MESSAGES/django.po +348 -193
  50. ledger/locale/uk/LC_MESSAGES/django.mo +0 -0
  51. ledger/locale/uk/LC_MESSAGES/django.po +348 -193
  52. ledger/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
  53. ledger/locale/zh_Hans/LC_MESSAGES/django.po +348 -193
  54. ledger/managers/character_audit_manager.py +28 -20
  55. ledger/managers/character_journal_manager.py +187 -358
  56. ledger/managers/character_mining_manager.py +64 -30
  57. ledger/managers/character_planetary_manager.py +185 -138
  58. ledger/managers/corporation_audit_manager.py +36 -27
  59. ledger/managers/corporation_journal_manager.py +94 -57
  60. ledger/managers/general_manager.py +12 -8
  61. ledger/migrations/0018_remove_characterplanet_ledger_char_planet__58a5b6_idx_and_more.py +44 -0
  62. ledger/migrations/0019_rename_characteraudit_characterowner_and_more.py +48 -0
  63. ledger/models/__init__.py +5 -11
  64. ledger/models/characteraudit.py +101 -109
  65. ledger/models/corporationaudit.py +94 -49
  66. ledger/models/general.py +105 -211
  67. ledger/models/helpers/update_manager.py +302 -0
  68. ledger/models/planetary.py +60 -205
  69. ledger/providers.py +101 -0
  70. ledger/static/ledger/css/{ledger.css → aa-ledger.css} +54 -28
  71. ledger/static/ledger/js/aa-ledger.js +124 -0
  72. ledger/static/ledger/js/charts.js +25 -1
  73. ledger/static/ledger/js/view-alliance-ledger.js +383 -0
  74. ledger/static/ledger/js/view-character-ledger.js +388 -0
  75. ledger/static/ledger/js/view-corporation-ledger.js +402 -0
  76. ledger/static/ledger/js/view-planetary.js +492 -0
  77. ledger/static/ledger/libs/amCharts/5.14.4/js/flow.js +2 -0
  78. ledger/static/ledger/libs/amCharts/5.14.4/js/index.js +2 -0
  79. ledger/static/ledger/libs/amCharts/5.14.4/js/percent.js +2 -0
  80. ledger/static/ledger/libs/amCharts/5.14.4/js/themes/Animated.js +2 -0
  81. ledger/static/ledger/libs/amCharts/5.14.4/js/themes/Dark.js +2 -0
  82. ledger/static/ledger/libs/amCharts/5.14.4/js/xy.js +2 -0
  83. ledger/static/ledger/libs/datatables/2.3.5/css/dataTables.bootstrap5.css +610 -0
  84. ledger/static/ledger/libs/datatables/2.3.5/js/dataTables.bootstrap5.js +122 -0
  85. ledger/static/ledger/libs/datatables/2.3.5/js/dataTables.js +14127 -0
  86. ledger/static/ledger/libs/datatables/Extensions/ColumnControl/1.1.1/css/columnControl.bootstrap5.css +516 -0
  87. ledger/static/ledger/libs/datatables/Extensions/ColumnControl/1.1.1/css/columnControl.dataTables.css +529 -0
  88. ledger/static/ledger/libs/datatables/Extensions/ColumnControl/1.1.1/js/columnControl.bootstrap5.js +73 -0
  89. ledger/static/ledger/libs/datatables/Extensions/ColumnControl/1.1.1/js/dataTables.columnControl.js +3090 -0
  90. ledger/static/ledger/libs/datatables/Extensions/FixedHeader/4.0.4/css/fixedHeader.bootstrap5.css +20 -0
  91. ledger/static/ledger/libs/datatables/Extensions/FixedHeader/4.0.4/js/dataTables.fixedHeader.js +1203 -0
  92. ledger/static/ledger/libs/datatables/Extensions/FixedHeader/4.0.4/js/fixedHeader.bootstrap5.js +59 -0
  93. ledger/tasks.py +157 -146
  94. ledger/templates/ledger/base.html +59 -21
  95. ledger/templates/ledger/bundles/aa-ledger-css.html +3 -0
  96. ledger/templates/ledger/bundles/aa-ledger-js.html +3 -0
  97. ledger/templates/ledger/bundles/view-alliance-ledger-js.html +14 -0
  98. ledger/templates/ledger/bundles/view-character-ledger-js.html +15 -0
  99. ledger/templates/ledger/bundles/view-character-planetary-css.html +3 -0
  100. ledger/templates/ledger/bundles/view-character-planetary-js.html +4 -0
  101. ledger/templates/ledger/bundles/view-corporation-ledger-js.html +15 -0
  102. ledger/templates/ledger/partials/modal/confirm.html +0 -1
  103. ledger/templates/ledger/partials/modal/request-accept-delete-alliance.html +38 -0
  104. ledger/templates/ledger/partials/modal/request-accept-delete-character.html +38 -0
  105. ledger/templates/ledger/partials/modal/request-accept-delete-corporation.html +38 -0
  106. ledger/templates/ledger/partials/modal/request-accept-switch-notification.html +38 -0
  107. ledger/templates/ledger/partials/modal/request-view-alliance-details.html +26 -0
  108. ledger/templates/ledger/partials/modal/request-view-character-details.html +26 -0
  109. ledger/templates/ledger/partials/modal/request-view-corporation-details.html +26 -0
  110. ledger/templates/ledger/partials/modal/request-view-extractor.html +32 -0
  111. ledger/templates/ledger/partials/modal/request-view-factory.html +31 -0
  112. ledger/templates/ledger/partials/{menu → navigation}/administration.html +8 -0
  113. ledger/templates/ledger/partials/{menu → navigation}/navigation.html +2 -2
  114. ledger/templates/ledger/partials/{administration → view-alliance-administration}/alliance_corporations.html +3 -3
  115. ledger/templates/ledger/partials/view-alliance-administration/dashboard.html +81 -0
  116. ledger/templates/ledger/partials/view-alliance-ledger/alliance-billboard.html +25 -0
  117. ledger/templates/ledger/partials/view-alliance-ledger/alliance-ledger-details.html +21 -0
  118. ledger/templates/ledger/partials/view-alliance-ledger/alliance-table.html +24 -0
  119. ledger/templates/ledger/partials/view-alliance-ledger/information/daily.html +18 -0
  120. ledger/templates/ledger/partials/view-alliance-ledger/information/hourly.html +18 -0
  121. ledger/templates/ledger/partials/view-alliance-ledger/information/summary.html +19 -0
  122. ledger/templates/ledger/partials/{administration → view-character-administration}/character.html +1 -9
  123. ledger/templates/ledger/partials/{administration → view-character-administration}/dashboard.html +0 -34
  124. ledger/templates/ledger/partials/view-character-ledger/character-billboard.html +25 -0
  125. ledger/templates/ledger/partials/view-character-ledger/character-ledger-details.html +21 -0
  126. ledger/templates/ledger/partials/view-character-ledger/character-table.html +25 -0
  127. ledger/templates/ledger/partials/view-character-ledger/information/daily.html +18 -0
  128. ledger/templates/ledger/partials/view-character-ledger/information/hourly.html +18 -0
  129. ledger/templates/ledger/partials/view-character-ledger/information/summary.html +19 -0
  130. ledger/templates/ledger/partials/view-character-planetary/extractor-table.html +24 -0
  131. ledger/templates/ledger/partials/view-character-planetary/factory-table.html +24 -0
  132. ledger/templates/ledger/partials/view-character-planetary/planetary-table.html +22 -0
  133. ledger/templates/ledger/partials/view-character-planetary/storage-table.html +23 -0
  134. ledger/templates/ledger/partials/{administration → view-corporation-administration}/corporation.html +5 -13
  135. ledger/templates/ledger/partials/{administration → view-corporation-administration}/corporation_characters.html +1 -1
  136. ledger/templates/ledger/partials/view-corporation-administration/dashboard.html +81 -0
  137. ledger/templates/ledger/partials/view-corporation-ledger/corporation-billboard.html +25 -0
  138. ledger/templates/ledger/partials/view-corporation-ledger/corporation-ledger-details.html +21 -0
  139. ledger/templates/ledger/partials/view-corporation-ledger/corporation-table.html +26 -0
  140. ledger/templates/ledger/partials/view-corporation-ledger/information/daily.html +18 -0
  141. ledger/templates/ledger/partials/view-corporation-ledger/information/hourly.html +18 -0
  142. ledger/templates/ledger/partials/view-corporation-ledger/information/summary.html +19 -0
  143. ledger/templates/ledger/view-administration.html +62 -0
  144. ledger/templates/ledger/view-alliance-administration.html +49 -0
  145. ledger/templates/ledger/view-alliance-ledger.html +72 -0
  146. ledger/templates/ledger/view-alliance-overview.html +131 -0
  147. ledger/templates/ledger/view-character-administration.html +42 -0
  148. ledger/templates/ledger/view-character-ledger.html +73 -0
  149. ledger/templates/ledger/view-character-overview.html +135 -0
  150. ledger/templates/ledger/view-character-planetary-overview.html +135 -0
  151. ledger/templates/ledger/view-character-planetary.html +73 -0
  152. ledger/templates/ledger/view-corporation-administration.html +42 -0
  153. ledger/templates/ledger/view-corporation-ledger.html +73 -0
  154. ledger/templates/ledger/view-corporation-overview.html +131 -0
  155. ledger/templatetags/ledger.py +3 -5
  156. ledger/tests/__init__.py +187 -0
  157. ledger/tests/test_admin.py +164 -68
  158. ledger/tests/test_auth_hook.py +31 -13
  159. ledger/tests/test_decarators.py +14 -79
  160. ledger/tests/test_discord_installed.py +0 -1
  161. ledger/tests/test_helpers/test_ledger_data.py +19 -0
  162. ledger/tests/test_managers/test_character_audit_manager.py +111 -69
  163. ledger/tests/test_managers/test_character_journal_manager.py +48 -208
  164. ledger/tests/test_managers/test_character_mining_manager.py +37 -16
  165. ledger/tests/test_managers/test_corporation_division_manager.py +66 -28
  166. ledger/tests/test_managers/test_corporation_journal_manager.py +39 -42
  167. ledger/tests/test_managers/test_general_manager.py +78 -18
  168. ledger/tests/test_managers/test_planetary_manager.py +73 -32
  169. ledger/tests/test_models/test_characteraudit.py +58 -74
  170. ledger/tests/test_models/test_characterminingledger.py +20 -26
  171. ledger/tests/test_models/test_characterwalletjournal.py +10 -33
  172. ledger/tests/test_models/test_corporationaudit.py +41 -35
  173. ledger/tests/test_models/test_corporationwalletjournal.py +35 -32
  174. ledger/tests/test_models/test_general.py +44 -11
  175. ledger/tests/test_models/test_planetary.py +14 -80
  176. ledger/tests/test_templatetags.py +2 -7
  177. ledger/tests/test_views/corporation/test_add_corp.py +16 -35
  178. ledger/tests/test_views/corporation/test_delete_corporation.py +66 -42
  179. ledger/tests/test_views/test_access.py +512 -545
  180. ledger/tests/test_views/test_add_ally.py +57 -46
  181. ledger/tests/test_views/test_add_char.py +21 -33
  182. ledger/tests/test_views/test_delete_character.py +24 -21
  183. ledger/tests/testdata/README_ESI_STUB.md +430 -0
  184. ledger/tests/testdata/esi_stub_openapi.py +511 -0
  185. ledger/tests/testdata/integrations/__init__.py +0 -0
  186. ledger/tests/testdata/{load_eveuniverse.py → integrations/eveuniverse.py} +0 -1
  187. ledger/tests/testdata/integrations/planetary.py +13 -0
  188. ledger/tests/testdata/json/factory.json +281 -0
  189. ledger/tests/testdata/json/inactive.json +281 -0
  190. ledger/tests/testdata/json/pins.json +175 -272
  191. ledger/tests/testdata/json/route.json +95 -528
  192. ledger/tests/testdata/test_esi_stub.py +468 -0
  193. ledger/tests/testdata/utils.py +601 -0
  194. ledger/thirdparty/charlink_hook.py +60 -30
  195. ledger/urls.py +0 -135
  196. ledger/views/alliance/add_ally.py +2 -4
  197. ledger/views/alliance/alliance_ledger.py +64 -147
  198. ledger/views/character/add_char.py +8 -10
  199. ledger/views/character/character_ledger.py +60 -126
  200. ledger/views/character/planetary.py +5 -98
  201. ledger/views/corporation/add_corp.py +10 -12
  202. ledger/views/corporation/corporation_ledger.py +65 -327
  203. ledger/views/index.py +92 -30
  204. aa_ledger-1.0.3.dist-info/RECORD +0 -236
  205. ledger/api/api_helper/planetary_helper.py +0 -107
  206. ledger/api/ledger/__init__.py +0 -7
  207. ledger/api/ledger/planetary.py +0 -231
  208. ledger/helpers/alliance.py +0 -317
  209. ledger/helpers/character.py +0 -251
  210. ledger/helpers/core.py +0 -665
  211. ledger/helpers/corporation.py +0 -427
  212. ledger/helpers/data_exporter.py +0 -452
  213. ledger/static/ledger/js/planetary-confirm.js +0 -66
  214. ledger/static/ledger/js/planetary.js +0 -143
  215. ledger/templates/ledger/admin.html +0 -43
  216. ledger/templates/ledger/allyledger/admin/alliance_administration.html +0 -46
  217. ledger/templates/ledger/allyledger/admin/alliance_overview.html +0 -108
  218. ledger/templates/ledger/allyledger/alliance_ledger.html +0 -86
  219. ledger/templates/ledger/bundles/character-ledger-bundles.html +0 -66
  220. ledger/templates/ledger/bundles/corporation-ledger-bundles.html +0 -75
  221. ledger/templates/ledger/bundles/ledger-bundles.html +0 -23
  222. ledger/templates/ledger/bundles/ledger-css.html +0 -3
  223. ledger/templates/ledger/bundles/planetary-bundles.html +0 -50
  224. ledger/templates/ledger/bundles/table-css.html +0 -3
  225. ledger/templates/ledger/charledger/admin/character_administration.html +0 -39
  226. ledger/templates/ledger/charledger/admin/character_overview.html +0 -106
  227. ledger/templates/ledger/charledger/character_ledger.html +0 -94
  228. ledger/templates/ledger/charledger/planetary/admin/planetary_overview.html +0 -123
  229. ledger/templates/ledger/charledger/planetary/planetary_ledger.html +0 -54
  230. ledger/templates/ledger/corpledger/admin/corporation_administration.html +0 -39
  231. ledger/templates/ledger/corpledger/admin/corporation_overview.html +0 -108
  232. ledger/templates/ledger/corpledger/corporation_ledger.html +0 -129
  233. ledger/templates/ledger/data-export.html +0 -78
  234. ledger/templates/ledger/error.html +0 -31
  235. ledger/templates/ledger/partials/form/error-message.html +0 -1
  236. ledger/templates/ledger/partials/information/daily.html +0 -56
  237. ledger/templates/ledger/partials/information/day.html +0 -48
  238. ledger/templates/ledger/partials/information/error.html +0 -8
  239. ledger/templates/ledger/partials/information/hourly.html +0 -53
  240. ledger/templates/ledger/partials/information/summary.html +0 -88
  241. ledger/templates/ledger/partials/information/view_character_content.html +0 -35
  242. ledger/templates/ledger/partials/modal/switchalarm_confirm.html +0 -39
  243. ledger/templates/ledger/partials/modal/view_extractor.html +0 -48
  244. ledger/templates/ledger/partials/modal/view_factory.html +0 -123
  245. ledger/templates/ledger/partials/table/char-ledger.html +0 -85
  246. ledger/templates/ledger/partials/table/corp-ledger.html +0 -66
  247. ledger/templates/ledger/partials/table/planetary.html +0 -18
  248. ledger/templates/ledger/partials/thirdparty/billboard.html +0 -22
  249. ledger/templates/ledger/partials/view/card.html +0 -160
  250. ledger/templates/ledger/permission.html +0 -2
  251. ledger/tests/test_helpers/test_billboard.py +0 -11
  252. ledger/tests/test_helpers/test_data_exporter.py +0 -207
  253. ledger/tests/test_tasks.py +0 -282
  254. ledger/tests/test_view_helpers/test_core.py +0 -47
  255. ledger/tests/test_views/corporation/test_corporation.py +0 -267
  256. ledger/tests/test_views/test_planetary.py +0 -137
  257. ledger/tests/testdata/esi_stub.py +0 -109
  258. ledger/tests/testdata/esi_stub_migration.py +0 -80
  259. ledger/tests/testdata/generate_characteraudit.py +0 -106
  260. ledger/tests/testdata/generate_corporationaudit.py +0 -74
  261. ledger/tests/testdata/generate_events.py +0 -31
  262. ledger/tests/testdata/generate_miningledger.py +0 -13
  263. ledger/tests/testdata/generate_planets.py +0 -48
  264. ledger/tests/testdata/generate_walletjournal.py +0 -42
  265. ledger/tests/testdata/json/czarno-pins.json +0 -240
  266. ledger/tests/testdata/json/czarno-routes.json +0 -165
  267. ledger/tests/testdata/json/pins2.json +0 -538
  268. {aa_ledger-1.0.3.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()