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,137 +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
10
- from django.urls import reverse
11
-
12
- # AA Ledger
13
- from ledger.tests.testdata.generate_characteraudit import (
14
- add_characteraudit_character_to_user,
15
- create_user_from_evecharacter_with_access,
16
- )
17
- from ledger.tests.testdata.generate_planets import (
18
- _planetary_data,
19
- create_character_planet,
20
- create_character_planet_details,
21
- )
22
- from ledger.tests.testdata.load_allianceauth import load_allianceauth
23
- from ledger.tests.testdata.load_eveuniverse import load_eveuniverse
24
- from ledger.views.character import planetary
25
-
26
- PLANETARY_PATH = "ledger.views.character.planetary"
27
-
28
-
29
- class TestViewSwitchAlarm(TestCase):
30
- @classmethod
31
- def setUpClass(cls):
32
- super().setUpClass()
33
- load_allianceauth()
34
- load_eveuniverse()
35
-
36
- cls.planet_params = {
37
- "upgrade_level": 5,
38
- "num_pins": 5,
39
- }
40
-
41
- cls.factory = RequestFactory()
42
- cls.user, cls.character_ownership = create_user_from_evecharacter_with_access(
43
- 1001
44
- )
45
- cls.user_nopermission, cls.character_ownership_no_pm = (
46
- create_user_from_evecharacter_with_access(1002)
47
- )
48
- cls.audit = add_characteraudit_character_to_user(cls.user, 1001)
49
- cls.planetary = create_character_planet(cls.audit, 4001, **cls.planet_params)
50
- cls.planetarydetails = create_character_planet_details(
51
- cls.planetary, **_planetary_data
52
- )
53
-
54
- def test_switch_alarm(self):
55
- character_id = self.audit.eve_character.character_id
56
- form_data = {
57
- "character_id": character_id,
58
- "planet_id": 4001,
59
- "confirm": "yes",
60
- }
61
-
62
- request = self.factory.post(
63
- reverse("ledger:switch_alarm"),
64
- data=form_data,
65
- )
66
- request.user = self.user
67
-
68
- response = planetary.switch_alarm(request)
69
-
70
- self.assertEqual(response.status_code, HTTPStatus.OK)
71
-
72
- def test_switch_alarm_all(self):
73
- form_data = {
74
- "character_id": 0,
75
- "planet_id": 0,
76
- "confirm": "yes",
77
- }
78
-
79
- request = self.factory.post(
80
- reverse("ledger:switch_alarm"),
81
- data=form_data,
82
- )
83
- request.user = self.user
84
-
85
- response = planetary.switch_alarm(request)
86
-
87
- self.assertEqual(response.status_code, HTTPStatus.OK)
88
-
89
- @patch(PLANETARY_PATH + ".CharacterPlanetDetails.objects.filter")
90
- def test_switch_alarm_doesnotexist(self, mock_planetdetails_filter):
91
- form_data = {
92
- "character_id": 1001,
93
- "planet_id": 0,
94
- "confirm": "yes",
95
- }
96
-
97
- mock_queryset = Mock()
98
- mock_queryset.exists.return_value = False
99
- mock_planetdetails_filter.return_value = mock_queryset
100
-
101
- request = self.factory.post(
102
- reverse("ledger:switch_alarm"),
103
- data=form_data,
104
- )
105
- request.user = self.user
106
-
107
- response = planetary.switch_alarm(request)
108
-
109
- self.assertEqual(response.status_code, HTTPStatus.NOT_FOUND)
110
- mock_planetdetails_filter.assert_called_once()
111
-
112
- def test_switch_alarm_no_permission(self):
113
- form_data = {
114
- "character_id": 1001,
115
- "planet_id": 4001,
116
- "confirm": "yes",
117
- }
118
- request = self.factory.post(
119
- reverse("ledger:switch_alarm"),
120
- data=form_data,
121
- )
122
- request.user = self.user_nopermission
123
-
124
- response = planetary.switch_alarm(request)
125
-
126
- self.assertEqual(response.status_code, HTTPStatus.FORBIDDEN)
127
-
128
- def test_switch_alarm_invalid(self):
129
- request = self.factory.post(
130
- reverse("ledger:switch_alarm"),
131
- data=None,
132
- )
133
- request.user = self.user
134
-
135
- response = planetary.switch_alarm(request)
136
-
137
- self.assertEqual(response.status_code, HTTPStatus.BAD_REQUEST)
@@ -1,109 +0,0 @@
1
- # Standard Library
2
- import json
3
- from pathlib import Path
4
-
5
- # Alliance Auth (External Libs)
6
- from app_utils.esi_testing import EsiClientStub
7
-
8
- # AA Ledger
9
- from ledger.tests.testdata.esi_stub_migration import EsiClientStubOpenApi, EsiEndpoint
10
-
11
-
12
- class CharacterJournalContext:
13
- """Context for character wallet journal ESI operations."""
14
-
15
- amount: float
16
- balance: float
17
- context_id: int
18
- context_id_type: str
19
- date: str
20
- description: str
21
- first_party_id: int
22
- id: int
23
- reason: str
24
- ref_type: str
25
- second_party_id: int
26
- tax: float
27
- tax_receiver_id: int
28
-
29
-
30
- def load_test_data():
31
- file_path = Path(__file__).parent / "esi.json"
32
- with file_path.open("r", encoding="utf-8") as fp:
33
- return json.load(fp)
34
-
35
-
36
- _esi_data = load_test_data()
37
-
38
- _endpoints = [
39
- EsiEndpoint(
40
- "Character",
41
- "GetCharactersCharacterIdRoles",
42
- "character_id",
43
- needs_token=False,
44
- ),
45
- EsiEndpoint(
46
- "Wallet",
47
- "GetCharactersCharacterIdWalletJournal",
48
- "character_id",
49
- needs_token=False,
50
- ),
51
- EsiEndpoint(
52
- "Wallet",
53
- "GetCharactersCharacterIdWallet",
54
- "character_id",
55
- needs_token=False,
56
- ),
57
- EsiEndpoint(
58
- "Corporation",
59
- "GetCorporationsCorporationIdDivisions",
60
- "corporation_id",
61
- needs_token=False,
62
- ),
63
- EsiEndpoint(
64
- "Wallet",
65
- "GetCorporationsCorporationIdWallets",
66
- "corporation_id",
67
- needs_token=False,
68
- ),
69
- EsiEndpoint(
70
- "Wallet",
71
- "GetCorporationsCorporationIdWalletsDivisionJournal",
72
- "corporation_id",
73
- needs_token=False,
74
- ),
75
- EsiEndpoint(
76
- "Industry",
77
- "GetCharactersCharacterIdMining",
78
- "character_id",
79
- needs_token=False,
80
- ),
81
- EsiEndpoint(
82
- "Planetary_Interaction",
83
- "GetCharactersCharacterIdPlanets",
84
- "character_id",
85
- needs_token=False,
86
- ),
87
- EsiEndpoint(
88
- "Planetary_Interaction",
89
- "GetCharactersCharacterIdPlanetsPlanetId",
90
- ("character_id", "planet_id"),
91
- needs_token=False,
92
- ),
93
- EsiEndpoint(
94
- "Universe",
95
- "PostUniverseNames",
96
- "body",
97
- needs_token=False,
98
- ),
99
- EsiEndpoint(
100
- "Universe",
101
- "PostUniverseIds",
102
- "body",
103
- needs_token=False,
104
- ),
105
- ]
106
-
107
- esi_client_stub = EsiClientStub(_esi_data, endpoints=_endpoints)
108
- esi_client_stub_openapi = EsiClientStubOpenApi(_esi_data, endpoints=_endpoints)
109
- esi_client_error_stub = EsiClientStub(_esi_data, endpoints=_endpoints, http_error=502)
@@ -1,80 +0,0 @@
1
- # Standard Library
2
- from types import SimpleNamespace
3
- from typing import Any
4
-
5
- # Django
6
- from django.utils import timezone
7
-
8
- # Alliance Auth (External Libs)
9
- from app_utils.esi_testing import (
10
- BravadoOperationStub,
11
- EsiClientStub,
12
- EsiEndpoint,
13
- _EsiMethod,
14
- parse_datetime,
15
- )
16
-
17
-
18
- class EsiEndpoint(EsiEndpoint):
19
- def __init__(self, *args, return_response=False, **kwargs):
20
- super().__init__(*args, **kwargs)
21
- self.return_response = return_response
22
-
23
-
24
- class _EsiMethodOpenApi(_EsiMethod):
25
- """An ESI method that can be called from the ESI client using OpenAPI client."""
26
-
27
- @staticmethod
28
- def _convert_values(data) -> Any:
29
- def convert_dict(item):
30
- if isinstance(item, dict):
31
- for key, value in item.items():
32
- if isinstance(value, str):
33
- try:
34
- if parsed_datetime := parse_datetime(value):
35
- item[key] = parsed_datetime.replace(tzinfo=timezone.utc)
36
- except ValueError:
37
- pass
38
-
39
- def dict_to_obj(obj):
40
- if isinstance(obj, dict):
41
- return SimpleNamespace(**{k: dict_to_obj(v) for k, v in obj.items()})
42
- elif isinstance(obj, list):
43
- return [dict_to_obj(i) for i in obj]
44
- else:
45
- return obj
46
-
47
- if isinstance(data, list):
48
- for row in data:
49
- convert_dict(row)
50
- else:
51
- convert_dict(data)
52
-
53
- return dict_to_obj(data)
54
-
55
- def call(self, **kwargs):
56
- result_obj = super().call(**kwargs)
57
- if self._endpoint.return_response:
58
- return BravadoOperationStub(result_obj.result(), also_return_response=True)
59
- return result_obj
60
-
61
-
62
- class EsiClientStubOpenApi(EsiClientStub):
63
- """ESI Client Stub that uses OpenAPI generated client."""
64
-
65
- def _add_endpoint(self, endpoint: EsiEndpoint):
66
- if not hasattr(self, endpoint.category):
67
- setattr(self, endpoint.category, type(endpoint.category, (object,), {}))
68
- endpoint_category = getattr(self, endpoint.category)
69
- if not hasattr(endpoint_category, endpoint.method):
70
- setattr(
71
- endpoint_category,
72
- endpoint.method,
73
- _EsiMethodOpenApi(
74
- endpoint=endpoint,
75
- testdata=self._testdata,
76
- http_error=self._http_error,
77
- ).call,
78
- )
79
- else:
80
- raise ValueError(f"Endpoint for {endpoint} already defined!")
@@ -1,106 +0,0 @@
1
- # Django
2
- from django.contrib.auth.models import User
3
-
4
- # Alliance Auth
5
- from allianceauth.authentication.backends import StateBackend
6
- from allianceauth.authentication.models import CharacterOwnership
7
- from allianceauth.eveonline.models import EveCharacter
8
- from allianceauth.tests.auth_utils import AuthUtils
9
-
10
- # Alliance Auth (External Libs)
11
- from app_utils.testing import add_character_to_user
12
- from eveuniverse.models import EveType
13
-
14
- # AA Ledger
15
- from ledger.models.characteraudit import CharacterAudit, CharacterUpdateStatus
16
-
17
-
18
- def create_character(eve_character: EveCharacter, **kwargs) -> CharacterAudit:
19
- """Create a Skillfarm Character from EveCharacter"""
20
- params = {
21
- "character_name": eve_character.character_name,
22
- "eve_character": eve_character,
23
- }
24
- params.update(kwargs)
25
- character = CharacterAudit(**params)
26
- character.save()
27
- return character
28
-
29
-
30
- def create_update_status(
31
- character_audit: CharacterAudit, **kwargs
32
- ) -> CharacterUpdateStatus:
33
- """Create a Update Status for a Character Audit"""
34
- params = {
35
- "character": character_audit,
36
- }
37
- params.update(kwargs)
38
- update_status = CharacterUpdateStatus(**params)
39
- update_status.save()
40
- return update_status
41
-
42
-
43
- def create_characteraudit_from_user(user: User, **kwargs) -> CharacterAudit:
44
- """Create a Character Audit from a user"""
45
- eve_character = user.profile.main_character
46
- if not eve_character:
47
- raise ValueError("User needs to have a main character.")
48
-
49
- kwargs.update({"eve_character": eve_character})
50
- return create_character(**kwargs)
51
-
52
-
53
- def create_user_from_evecharacter_with_access(
54
- character_id: int, disconnect_signals: bool = True
55
- ) -> tuple[User, CharacterOwnership]:
56
- """Create user with access from an existing eve character and use it as main."""
57
- auth_character = EveCharacter.objects.get(character_id=character_id)
58
- username = StateBackend.iterate_username(auth_character.character_name)
59
- user = AuthUtils.create_user(username, disconnect_signals=disconnect_signals)
60
- user = AuthUtils.add_permission_to_user_by_name(
61
- "ledger.basic_access", user, disconnect_signals=disconnect_signals
62
- )
63
- character_ownership = add_character_to_user(
64
- user,
65
- auth_character,
66
- is_main=True,
67
- scopes=CharacterAudit.get_esi_scopes(),
68
- disconnect_signals=disconnect_signals,
69
- )
70
- return user, character_ownership
71
-
72
-
73
- def create_characteraudit_from_evecharacter(
74
- character_id: int, **kwargs
75
- ) -> CharacterAudit:
76
- """Create a Audit Character from a existing EveCharacter"""
77
-
78
- _, character_ownership = create_user_from_evecharacter_with_access(
79
- character_id, disconnect_signals=True
80
- )
81
- return create_character(character_ownership.character, **kwargs)
82
-
83
-
84
- def add_auth_character_to_user(
85
- user: User, character_id: int, disconnect_signals: bool = True
86
- ) -> CharacterOwnership:
87
- auth_character = EveCharacter.objects.get(character_id=character_id)
88
- return add_character_to_user(
89
- user,
90
- auth_character,
91
- is_main=False,
92
- scopes=CharacterAudit.get_esi_scopes(),
93
- disconnect_signals=disconnect_signals,
94
- )
95
-
96
-
97
- def add_characteraudit_character_to_user(
98
- user: User, character_id: int, disconnect_signals: bool = True, **kwargs
99
- ) -> CharacterAudit:
100
- """Add a Character Audit Character to a user"""
101
- character_ownership = add_auth_character_to_user(
102
- user,
103
- character_id,
104
- disconnect_signals=disconnect_signals,
105
- )
106
- return create_character(character_ownership.character, **kwargs)
@@ -1,74 +0,0 @@
1
- # Django
2
- from django.contrib.auth.models import User
3
-
4
- # Alliance Auth
5
- from allianceauth.eveonline.models import EveCharacter
6
-
7
- # Alliance Auth (External Libs)
8
- from app_utils.testing import (
9
- create_user_from_evecharacter,
10
- )
11
-
12
- # AA Ledger
13
- from ledger.models.corporationaudit import CorporationAudit, CorporationUpdateStatus
14
- from ledger.tests.testdata.generate_characteraudit import (
15
- add_auth_character_to_user,
16
- create_user_from_evecharacter_with_access,
17
- )
18
-
19
-
20
- def create_corporationaudit(eve_character: EveCharacter, **kwargs) -> CorporationAudit:
21
- """Create a LedgerAudit Corporation from EveCharacter"""
22
- params = {
23
- "corporation_name": eve_character.corporation_name,
24
- "corporation": eve_character.corporation,
25
- }
26
- params.update(kwargs)
27
- corporation = CorporationAudit(**params)
28
- corporation.save()
29
- return corporation
30
-
31
-
32
- def create_corporation_update_status(
33
- corporation_audit: CorporationAudit, **kwargs
34
- ) -> CorporationUpdateStatus:
35
- """Create a Update Status for a Character Audit"""
36
- params = {
37
- "corporation": corporation_audit,
38
- }
39
- params.update(kwargs)
40
- update_status = CorporationUpdateStatus(**params)
41
- update_status.save()
42
- return update_status
43
-
44
-
45
- def create_corporationaudit_from_user(user: User, **kwargs) -> CorporationAudit:
46
- """Create a Character Audit from a user"""
47
- eve_character = user.profile.main_character
48
- if not eve_character:
49
- raise ValueError("User needs to have a main character.")
50
-
51
- kwargs.update({"eve_character": eve_character})
52
- return create_corporationaudit(**kwargs)
53
-
54
-
55
- def create_corporationaudit_from_evecharacter(
56
- character_id: int, **kwargs
57
- ) -> CorporationAudit:
58
- """Create a Audit Character from a existing EveCharacter"""
59
-
60
- _, character_ownership = create_user_from_evecharacter_with_access(
61
- character_id, disconnect_signals=True
62
- )
63
- return create_corporationaudit(character_ownership.character, **kwargs)
64
-
65
-
66
- def add_corporationaudit_corporation_to_user(
67
- user: User, character_id: int, disconnect_signals: bool = True, **kwargs
68
- ) -> CorporationAudit:
69
- character_ownership = add_auth_character_to_user(
70
- user,
71
- character_id,
72
- disconnect_signals=disconnect_signals,
73
- )
74
- return create_corporationaudit(character_ownership.character, **kwargs)
@@ -1,31 +0,0 @@
1
- # Django
2
- from django.utils import timezone
3
-
4
- # AA Ledger
5
- from ledger.models.events import Events
6
-
7
-
8
- def create_event(char_ledger: bool, **kwargs) -> Events:
9
- """Create a Event for a Corporation"""
10
- params = {
11
- "char_ledger": char_ledger,
12
- }
13
- params.update(kwargs)
14
- events = Events(**params)
15
- events.save()
16
- return events
17
-
18
-
19
- def create_event_1_day(
20
- char_ledger: bool, date_start: timezone.datetime, **kwargs
21
- ) -> Events:
22
- """Create a Event for a Corporation"""
23
- params = {
24
- "char_ledger": char_ledger,
25
- "date_start": date_start,
26
- "date_end": date_start + timezone.timedelta(days=1),
27
- }
28
- params.update(kwargs)
29
- events = Events(**params)
30
- events.save()
31
- return events
@@ -1,13 +0,0 @@
1
- # AA Ledger
2
- from ledger.models.characteraudit import CharacterAudit, CharacterMiningLedger
3
-
4
-
5
- def create_miningledger(character: CharacterAudit, **kwargs) -> CharacterMiningLedger:
6
- """Create a CorporationWalletDivision"""
7
- params = {
8
- "character": character,
9
- }
10
- params.update(kwargs)
11
- division = CharacterMiningLedger(**params)
12
- division.save()
13
- return division
@@ -1,48 +0,0 @@
1
- """Generate AllianceAuth test objects from allianceauth.json."""
2
-
3
- # Standard Library
4
- import json
5
- from pathlib import Path
6
-
7
- # Alliance Auth (External Libs)
8
- from eveuniverse.models import EvePlanet
9
-
10
- # AA Ledger
11
- from ledger.models.characteraudit import CharacterAudit
12
- from ledger.models.planetary import CharacterPlanet, CharacterPlanetDetails
13
-
14
-
15
- def _load_planetary_data():
16
- with open(Path(__file__).parent / "planetary.json", encoding="utf-8") as fp:
17
- return json.load(fp)
18
-
19
-
20
- _planetary_data = _load_planetary_data()
21
-
22
-
23
- def create_character_planet(
24
- characteraudit: CharacterAudit, planet_id: int, **kwargs
25
- ) -> CharacterPlanet:
26
- """Create a CharacterPlanet from CharacterAudit and planet_id."""
27
- params = {
28
- "character": characteraudit,
29
- "planet": EvePlanet.objects.get(id=planet_id),
30
- }
31
- params.update(kwargs)
32
- planet = CharacterPlanet(**params)
33
- planet.save()
34
- return planet
35
-
36
-
37
- def create_character_planet_details(
38
- characterplanet: CharacterPlanet, **kwargs
39
- ) -> CharacterPlanetDetails:
40
- """Create a CharacterPlanetDetails from CharacterPlanet."""
41
- params = {
42
- "character": characterplanet.character,
43
- "planet": characterplanet,
44
- }
45
- params.update(kwargs)
46
- planetdetails = CharacterPlanetDetails(**params)
47
- planetdetails.save()
48
- return planetdetails
@@ -1,42 +0,0 @@
1
- # Alliance Auth
2
- from allianceauth.eveonline.models import EveCharacter
3
-
4
- # Alliance Auth (External Libs)
5
- from app_utils.testing import (
6
- create_user_from_evecharacter,
7
- )
8
-
9
- # AA Ledger
10
- from ledger.models.characteraudit import CharacterWalletJournalEntry
11
- from ledger.models.corporationaudit import (
12
- CorporationAudit,
13
- CorporationWalletDivision,
14
- CorporationWalletJournalEntry,
15
- )
16
-
17
-
18
- def create_division(
19
- corporation: CorporationAudit, **kwargs
20
- ) -> CorporationWalletDivision:
21
- """Create a CorporationWalletDivision"""
22
- params = {
23
- "corporation": corporation,
24
- }
25
- params.update(kwargs)
26
- division = CorporationWalletDivision(**params)
27
- division.save()
28
- return division
29
-
30
-
31
- def create_wallet_journal_entry(
32
- journal_type: str, **kwargs
33
- ) -> CorporationWalletJournalEntry | CharacterWalletJournalEntry:
34
- """Create a CorporationWalletJournalEntry"""
35
- params = {}
36
- params.update(kwargs)
37
- if journal_type == "corporation":
38
- journal_entry = CorporationWalletJournalEntry(**params)
39
- else:
40
- journal_entry = CharacterWalletJournalEntry(**params)
41
- journal_entry.save()
42
- return journal_entry