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
@@ -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")