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
@@ -3,16 +3,16 @@ from datetime import timedelta
3
3
  from unittest.mock import patch
4
4
 
5
5
  # Django
6
- from django.test import TestCase
7
6
  from django.utils import timezone
8
7
 
9
8
  # AA Ledger
10
9
  from ledger.models.general import EveEntity
10
+ from ledger.tests import LedgerTestCase
11
11
 
12
12
  MODULE_PATH = "ledger.models.general"
13
13
 
14
14
 
15
- class TestGeneralModel(TestCase):
15
+ class TestGeneralModel(LedgerTestCase):
16
16
  @classmethod
17
17
  def setUpClass(cls):
18
18
  super().setUpClass()
@@ -24,54 +24,87 @@ class TestGeneralModel(TestCase):
24
24
  )
25
25
 
26
26
  def test_str(self):
27
+ """Test the string representation of EveEntity."""
28
+ # Expected Result
27
29
  self.assertEqual(str(self.eveentity), "Test")
28
30
 
29
31
  def test_repr(self):
32
+ """Test the repr representation of EveEntity."""
33
+ self.eveentity.category = "corporation"
34
+ # Expected Result
30
35
  self.assertEqual(
31
36
  repr(self.eveentity),
32
37
  "EveEntity(id=123, category='corporation', name='Test')",
33
38
  )
34
39
 
35
40
  def test_is_alliance(self):
41
+ """Test is_alliance property"""
42
+ # Test Data
36
43
  self.eveentity.category = self.eveentity.CATEGORY_ALLIANCE
37
44
  self.assertTrue(self.eveentity.is_alliance)
38
45
 
46
+ # Expected Result
47
+ self.eveentity.category = "Invalid Category"
48
+ self.assertFalse(self.eveentity.is_alliance)
49
+
39
50
  def test_is_corporation(self):
51
+ """Test is_corporation property"""
52
+ # Test Data
40
53
  self.eveentity.category = self.eveentity.CATEGORY_CORPORATION
41
54
  self.assertTrue(self.eveentity.is_corporation)
42
55
 
56
+ # Expected Result
57
+ self.eveentity.category = "Invalid Category"
58
+ self.assertFalse(self.eveentity.is_corporation)
59
+
43
60
  def test_is_character(self):
61
+ """Test is_character property"""
62
+ # Test Data
44
63
  self.eveentity.category = self.eveentity.CATEGORY_CHARACTER
45
64
  self.assertTrue(self.eveentity.is_character)
46
65
 
47
- @patch(
48
- MODULE_PATH + ".EveAllianceInfo.generic_logo_url"
49
- ) # replace with your actual module path
66
+ # Expected Result
67
+ self.eveentity.category = "Invalid Category"
68
+ self.assertFalse(self.eveentity.is_character)
69
+
70
+ @patch(MODULE_PATH + ".EveAllianceInfo.generic_logo_url")
50
71
  def test_icon_url_alliance(self, mock_generic_logo_url):
72
+ """Test icon_url for alliance category"""
73
+ # Test Data
51
74
  self.eveentity.category = self.eveentity.CATEGORY_ALLIANCE
52
75
  mock_generic_logo_url.return_value = "Test URL"
76
+
77
+ # Expected Result
53
78
  self.assertEqual(self.eveentity.icon_url(), "Test URL")
54
79
 
55
- @patch(
56
- MODULE_PATH + ".EveCorporationInfo.generic_logo_url"
57
- ) # replace with your actual module path
80
+ @patch(MODULE_PATH + ".EveCorporationInfo.generic_logo_url")
58
81
  def test_icon_url_corporation(self, mock_generic_logo_url):
82
+ """Test icon_url for corporation category"""
83
+ # Test Data
59
84
  self.eveentity.category = self.eveentity.CATEGORY_CORPORATION
60
85
  mock_generic_logo_url.return_value = "Test URL"
86
+
87
+ # Expected Result
61
88
  self.assertEqual(self.eveentity.icon_url(), "Test URL")
62
89
 
63
- @patch(
64
- MODULE_PATH + ".EveCharacter.generic_portrait_url"
65
- ) # replace with your actual module path
90
+ @patch(MODULE_PATH + ".EveCharacter.generic_portrait_url")
66
91
  def test_icon_url_character(self, mock_generic_portrait_url):
92
+ """Test icon_url for character category"""
93
+ # Test Data
67
94
  self.eveentity.category = self.eveentity.CATEGORY_CHARACTER
68
95
  mock_generic_portrait_url.return_value = "Test URL"
96
+
97
+ # Expected Result
69
98
  self.assertEqual(self.eveentity.icon_url(), "Test URL")
70
99
 
71
100
  def test_icon_url_not_implemented(self):
101
+ """Test icon_url raises NotImplementedError for invalid category"""
102
+ # Expected Result
72
103
  self.eveentity.category = "Invalid Category"
73
104
  with self.assertRaises(NotImplementedError):
74
105
  self.eveentity.icon_url()
75
106
 
76
107
  def test_needs_update(self):
108
+ """Test needs_update method"""
109
+ # Expected Result
77
110
  self.assertTrue(self.eveentity.needs_update())
@@ -6,34 +6,31 @@ from django.test import TestCase
6
6
  from django.utils import timezone
7
7
 
8
8
  # AA Ledger
9
- from ledger.tests.testdata.generate_characteraudit import (
10
- create_characteraudit_from_evecharacter,
11
- )
12
- from ledger.tests.testdata.generate_planets import (
13
- _planetary_data,
9
+ from ledger.tests import LedgerTestCase
10
+ from ledger.tests.testdata.integrations.planetary import _planetary_data
11
+ from ledger.tests.testdata.utils import (
14
12
  create_character_planet,
15
13
  create_character_planet_details,
14
+ create_owner_from_user,
16
15
  )
17
- from ledger.tests.testdata.load_allianceauth import load_allianceauth
18
- from ledger.tests.testdata.load_eveuniverse import load_eveuniverse
19
16
 
20
17
  MODULE_PATH = "ledger.models.planetary"
21
18
 
22
19
 
23
- class TestPlanetModel(TestCase):
20
+ class TestPlanetModel(LedgerTestCase):
24
21
  @classmethod
25
22
  def setUpClass(cls):
26
23
  super().setUpClass()
27
- load_allianceauth()
28
- load_eveuniverse()
29
24
 
30
25
  cls.planet_params = {
31
26
  "upgrade_level": 5,
32
27
  "num_pins": 5,
33
28
  }
34
29
 
35
- cls.audit = create_characteraudit_from_evecharacter(1001)
36
- cls.planetary = create_character_planet(cls.audit, 4001, **cls.planet_params)
30
+ cls.owner = create_owner_from_user(user=cls.user, owner_type="character")
31
+ cls.planetary = create_character_planet(
32
+ owner=cls.owner, planet_id=4001, **cls.planet_params
33
+ )
37
34
 
38
35
  def test_str(self):
39
36
  self.assertEqual(str(self.planetary), "Planet Data: Gneuten - Test Planet I")
@@ -44,20 +41,20 @@ class TestPlanetModel(TestCase):
44
41
  )
45
42
 
46
43
 
47
- class TestPlanetaryDetailsModel(TestCase):
44
+ class TestPlanetaryDetailsModel(LedgerTestCase):
48
45
  @classmethod
49
46
  def setUpClass(cls):
50
47
  super().setUpClass()
51
- load_allianceauth()
52
- load_eveuniverse()
53
48
 
54
49
  cls.planet_params = {
55
50
  "upgrade_level": 5,
56
51
  "num_pins": 5,
57
52
  }
58
53
 
59
- cls.audit = create_characteraudit_from_evecharacter(1001)
60
- cls.planetary = create_character_planet(cls.audit, 4001, **cls.planet_params)
54
+ cls.owner = create_owner_from_user(user=cls.user, owner_type="character")
55
+ cls.planetary = create_character_planet(
56
+ owner=cls.owner, planet_id=4001, **cls.planet_params
57
+ )
61
58
  cls.planetarydetails = create_character_planet_details(
62
59
  cls.planetary, **_planetary_data
63
60
  )
@@ -67,68 +64,5 @@ class TestPlanetaryDetailsModel(TestCase):
67
64
  str(self.planetarydetails), "Planet Details Data: Gneuten - Test Planet I"
68
65
  )
69
66
 
70
- def test_count_extractors(self):
71
- extractors_count = self.planetarydetails.count_extractors()
72
-
73
- self.assertEqual(extractors_count, 2)
74
-
75
- def test_get_planet_install_date(self):
76
- install_time = self.planetarydetails.get_planet_install_date()
77
-
78
- expected_install_date = timezone.datetime(
79
- 2024, 8, 12, 17, 17, 2, tzinfo=timezone.utc
80
- )
81
- self.assertEqual(install_time, expected_install_date)
82
-
83
- def test_get_planet_expiry_date(self):
84
- expected_expiry_date = timezone.datetime(
85
- 2024, 8, 26, 17, 17, 2, tzinfo=timezone.utc
86
- )
87
- self.assertEqual(
88
- self.planetarydetails.get_planet_expiry_date(), expected_expiry_date
89
- )
90
-
91
67
  def test_is_expired(self):
92
68
  self.assertEqual(self.planetarydetails.is_expired, True)
93
-
94
- def test_get_types(self):
95
- self.assertEqual(
96
- self.planetarydetails.get_types(), [9832, 3645, 2390, 2268, 2309]
97
- )
98
-
99
- @patch(MODULE_PATH + ".timezone.now")
100
- def test_is_percent_correct(self, mock_now):
101
- fixed_date = timezone.make_aware(timezone.datetime(2024, 8, 20, 17, 17, 2))
102
- mock_now.return_value = fixed_date
103
-
104
- extractor_info = self.planetarydetails.get_extractors_info()
105
- expected_percent = 57.14
106
- for _, value in extractor_info.items():
107
- self.assertIn(
108
- "progress_percentage", value
109
- ) # Check if the key exists in the nested dictionary
110
- self.assertEqual(value["progress_percentage"], expected_percent)
111
-
112
- def test_get_planet_install_date_none(self):
113
- planetary_details = create_character_planet_details(self.planetary)
114
- planetary_details.pins = []
115
- self.assertIsNone(planetary_details.get_planet_install_date())
116
-
117
- def test_get_planet_expiry_date_none(self):
118
- planetary_details = create_character_planet_details(self.planetary)
119
- planetary_details.pins = []
120
- self.assertIsNone(planetary_details.get_planet_expiry_date())
121
-
122
- @patch("django.utils.timezone.now")
123
- def test_is_expired_false(self, mock_now):
124
- mock_now.return_value = timezone.datetime(2023, 10, 1, tzinfo=timezone.utc)
125
- future_date = mock_now.return_value + timezone.timedelta(days=10)
126
-
127
- planetary_details = create_character_planet_details(self.planetary)
128
- planetary_details.pins = [{"expiry_time": future_date.isoformat()}]
129
- self.assertFalse(planetary_details.is_expired)
130
-
131
- def test_is_expired_empty(self):
132
- planetary_details = create_character_planet_details(self.planetary)
133
- planetary_details.pins = [{"expiry_time": None}]
134
- self.assertFalse(planetary_details.is_expired)
@@ -1,14 +1,9 @@
1
- # Standard Library
2
- from unittest.mock import MagicMock
3
-
4
- # Django
5
- from django.test import TestCase
6
-
7
1
  # AA Ledger
8
2
  from ledger.templatetags.ledger import get_item, month_days, month_name, range_filter
3
+ from ledger.tests import LedgerTestCase
9
4
 
10
5
 
11
- class TestTemplateTags(TestCase):
6
+ class TestTemplateTags(LedgerTestCase):
12
7
 
13
8
  @classmethod
14
9
  def setUpClass(cls) -> None:
@@ -2,21 +2,16 @@
2
2
 
3
3
  # Standard Library
4
4
  from http import HTTPStatus
5
- from unittest.mock import Mock, patch
5
+ from unittest.mock import patch
6
6
 
7
7
  # Django
8
- from django.contrib.sessions.middleware import SessionMiddleware
9
- from django.test import RequestFactory, TestCase, override_settings
8
+ from django.test import override_settings
10
9
  from django.urls import reverse
11
10
 
12
11
  # AA Ledger
13
- from ledger.models.corporationaudit import CorporationAudit
14
- from ledger.tests.testdata.generate_corporationaudit import (
15
- create_user_from_evecharacter,
16
- )
17
- from ledger.tests.testdata.load_allianceauth import load_allianceauth
18
- from ledger.tests.testdata.load_eveuniverse import load_eveuniverse
19
- from ledger.views.corporation.add_corp import add_corp
12
+ from ledger.models.corporationaudit import CorporationOwner
13
+ from ledger.tests import LedgerTestCase
14
+ from ledger.tests.testdata.utils import add_new_permission_to_user
20
15
 
21
16
  MODULE_PATH = "ledger.views.corporation.add_corp"
22
17
 
@@ -24,38 +19,22 @@ MODULE_PATH = "ledger.views.corporation.add_corp"
24
19
  @patch(MODULE_PATH + ".messages")
25
20
  @patch(MODULE_PATH + ".tasks")
26
21
  @override_settings(CELERY_ALWAYS_EAGER=True, CELERY_EAGER_PROPAGATES_EXCEPTIONS=True)
27
- class TestAddCorpView(TestCase):
22
+ class TestAddCorpView(LedgerTestCase):
28
23
  @classmethod
29
24
  def setUpClass(cls):
30
25
  super().setUpClass()
31
- load_allianceauth()
32
- load_eveuniverse()
33
-
34
- cls.factory = RequestFactory()
35
- cls.user, cls.character_ownership = create_user_from_evecharacter(
36
- 1001,
37
- permissions=[
38
- "ledger.basic_access",
39
- "ledger.advanced_access",
40
- ],
41
- )
42
-
43
- def _add_corporation(self, user, token):
44
- request = self.factory.get(reverse("ledger:add_corp"))
45
- request.user = user
46
- request.token = token
47
- middleware = SessionMiddleware(Mock())
48
- middleware.process_request(request)
49
- orig_view = add_corp.__wrapped__.__wrapped__.__wrapped__
50
- return orig_view(request, token)
51
26
 
52
27
  def test_add_corp(self, mock_tasks, mock_messages):
53
- # given
28
+ """Test adding a corporation via the add_corp view."""
29
+ # Test Data
30
+ self.user = add_new_permission_to_user(self.user, "ledger.advanced_access")
54
31
  user = self.user
55
32
  token = user.token_set.get(character_id=1001)
56
- # when
33
+
34
+ # Test Action
57
35
  response = self._add_corporation(user, token)
58
- # then
36
+
37
+ # Expected Results
59
38
  self.assertEqual(response.status_code, HTTPStatus.FOUND)
60
39
  self.assertEqual(
61
40
  response.url, reverse("ledger:corporation_ledger", args=[2001])
@@ -63,5 +42,7 @@ class TestAddCorpView(TestCase):
63
42
  self.assertTrue(mock_tasks.update_corporation.apply_async.called)
64
43
  self.assertTrue(mock_messages.info.called)
65
44
  self.assertTrue(
66
- CorporationAudit.objects.filter(corporation__corporation_id=2001).exists()
45
+ CorporationOwner.objects.filter(
46
+ eve_corporation__corporation_id=2001
47
+ ).exists()
67
48
  )
@@ -9,83 +9,107 @@ from django.test import RequestFactory, TestCase
9
9
  from django.urls import reverse
10
10
 
11
11
  # AA Ledger
12
- from ledger.tests.testdata.generate_corporationaudit import (
13
- add_corporationaudit_corporation_to_user,
14
- create_user_from_evecharacter,
12
+ from ledger.tests import LedgerTestCase
13
+ from ledger.tests.testdata.utils import (
14
+ add_new_permission_to_user,
15
+ create_owner_from_user,
15
16
  )
16
-
17
- # AA Skillfarm
18
- from ledger.tests.testdata.load_allianceauth import load_allianceauth
19
- from ledger.tests.testdata.load_eveuniverse import load_eveuniverse
20
17
  from ledger.views.corporation.corporation_ledger import corporation_delete
21
18
 
22
19
  MODULE_PATH = "ledger.views.corporation.corporation_ledger"
23
20
 
24
21
 
25
- class TestDeleteCorporationView(TestCase):
22
+ class TestDeleteCorporationView(LedgerTestCase):
26
23
  @classmethod
27
24
  def setUpClass(cls):
28
25
  super().setUpClass()
29
- load_allianceauth()
30
- load_eveuniverse()
31
-
32
- cls.factory = RequestFactory()
33
- cls.user, cls.character_ownership = create_user_from_evecharacter(
34
- 1001,
35
- permissions=[
36
- "ledger.basic_access",
37
- "ledger.advanced_access",
38
- "ledger.corp_audit_manager",
39
- "ledger.manage_access",
40
- ],
41
- )
42
- cls.audit = add_corporationaudit_corporation_to_user(cls.user, 1001)
43
- cls.no_audit_user, cls.character_ownership = create_user_from_evecharacter(
44
- 1002,
45
- permissions=[
46
- "ledger.basic_access",
47
- "ledger.advanced_access",
48
- "ledger.manage_access",
49
- ],
26
+ cls.audit = create_owner_from_user(
27
+ user=cls.user,
28
+ owner_type="corporation",
50
29
  )
51
30
 
52
31
  def test_delete_corporation(self):
53
- corporation_id = self.audit.corporation.corporation_id
32
+ """
33
+ Test deleting a corporation successfully.
54
34
 
35
+ This test verifies that a user with the appropriate permissions can successfully
36
+ delete a corporation from the system. It checks that the response indicates success
37
+ and that the correct success message is returned.
38
+
39
+ ## Results: Corporation is deleted successfully.
40
+ """
41
+ # Test Data
55
42
  request = self.factory.post(
56
- reverse("ledger:delete_corp", args=[corporation_id])
43
+ reverse(
44
+ "ledger:delete_corp",
45
+ kwargs={"corporation_id": self.audit.eve_corporation.corporation_id},
46
+ )
57
47
  )
58
- request.user = self.user
48
+ request.user = self.manage_own_user
59
49
 
60
- response = corporation_delete(request, corporation_id=corporation_id)
50
+ # Test Action
51
+ response = corporation_delete(
52
+ request, corporation_id=self.audit.eve_corporation.corporation_id
53
+ )
61
54
 
55
+ # Expected Results
62
56
  response_data = json.loads(response.content)
63
-
64
57
  self.assertEqual(response.status_code, HTTPStatus.OK)
65
58
  self.assertTrue(response_data["success"])
66
59
  self.assertEqual(response_data["message"], "Hell RiderZ successfully deleted")
67
60
 
68
61
  def test_delete_corporation_no_audit(self):
69
- request = self.factory.post(reverse("ledger:delete_corp", args=[2002]))
70
- request.user = self.user
62
+ """
63
+ Test deleting a corporation that does not exist.
64
+
65
+ This test verifies that when a user attempts to delete a corporation that does not
66
+ exist in the system, the appropriate error response is returned.
67
+
68
+ ## Results: Corporation not found message is returned.
69
+ """
70
+ # Test Data
71
+ request = self.factory.post(
72
+ reverse("ledger:delete_corp", kwargs={"corporation_id": 2002})
73
+ )
74
+ request.user = self.manage_user
71
75
 
76
+ # Test Action
72
77
  response = corporation_delete(request, corporation_id=2002)
73
78
 
79
+ # Expected Results
74
80
  response_data = json.loads(response.content)
75
-
76
81
  self.assertEqual(response.status_code, HTTPStatus.NOT_FOUND)
77
82
  self.assertFalse(response_data["success"])
78
83
  self.assertEqual(response_data["message"], "Corporation not found")
79
84
 
80
85
  def test_delete_corporation_no_permission(self):
81
- """Test deleting a corporation without being in the corporation."""
82
- request = self.factory.post(reverse("ledger:delete_corp", args=[2001]))
83
- request.user = self.no_audit_user
86
+ """
87
+ Test deleting a corporation without being in the corporation.
84
88
 
85
- response = corporation_delete(request, corporation_id=2001)
89
+ This test verifies that when a user without the necessary permissions
90
+ attempts to delete a corporation, the system prevents the deletion and
91
+ provides an appropriate error message.
86
92
 
87
- response_data = json.loads(response.content)
93
+ ## Results: Permission Denied message is returned.
94
+ """
95
+ # Test Data
96
+ request = self.factory.post(
97
+ reverse(
98
+ "ledger:delete_corp",
99
+ kwargs={"corporation_id": self.audit.eve_corporation.corporation_id},
100
+ )
101
+ )
102
+ add_new_permission_to_user(
103
+ user=self.user2, permission_name="ledger.manage_access"
104
+ )
105
+ request.user = self.user2
88
106
 
107
+ # Test Action
108
+ response = corporation_delete(
109
+ request, corporation_id=self.audit.eve_corporation.corporation_id
110
+ )
111
+ # Expected Results
112
+ response_data = json.loads(response.content)
89
113
  self.assertEqual(response.status_code, HTTPStatus.FORBIDDEN)
90
114
  self.assertFalse(response_data["success"])
91
115
  self.assertEqual(response_data["message"], "Permission Denied")