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,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