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.
- {aa_ledger-1.0.4.dist-info → aa_ledger-2.0.0.dist-info}/METADATA +5 -6
- aa_ledger-2.0.0.dist-info/RECORD +267 -0
- ledger/__init__.py +2 -2
- ledger/admin.py +23 -18
- ledger/api/__init__.py +23 -7
- ledger/api/{ledger/admin.py → admin.py} +25 -31
- ledger/api/alliance.py +755 -0
- ledger/api/character.py +786 -0
- ledger/api/corporation.py +1141 -0
- ledger/api/{helpers.py → helpers/core.py} +33 -33
- ledger/api/helpers/icons.py +372 -0
- ledger/api/helpers/planetary_helper.py +354 -0
- ledger/api/planetary.py +354 -0
- ledger/api/schema.py +240 -15
- ledger/app_settings.py +11 -27
- ledger/auth_hooks.py +2 -2
- ledger/constants.py +50 -177
- ledger/decorators.py +2 -46
- ledger/forms.py +133 -39
- ledger/helpers/billboard.py +194 -144
- ledger/helpers/cache.py +105 -0
- ledger/helpers/discord.py +2 -4
- ledger/helpers/eveonline.py +160 -0
- ledger/helpers/ledger_data.py +23 -0
- ledger/helpers/ref_type.py +53 -78
- ledger/locale/cs_CZ/LC_MESSAGES/django.mo +0 -0
- ledger/locale/cs_CZ/LC_MESSAGES/django.po +349 -193
- ledger/locale/de/LC_MESSAGES/django.mo +0 -0
- ledger/locale/de/LC_MESSAGES/django.po +528 -379
- ledger/locale/django.pot +721 -546
- ledger/locale/es/LC_MESSAGES/django.mo +0 -0
- ledger/locale/es/LC_MESSAGES/django.po +349 -194
- ledger/locale/fr_FR/LC_MESSAGES/django.mo +0 -0
- ledger/locale/fr_FR/LC_MESSAGES/django.po +349 -193
- ledger/locale/it_IT/LC_MESSAGES/django.mo +0 -0
- ledger/locale/it_IT/LC_MESSAGES/django.po +349 -193
- ledger/locale/ja/LC_MESSAGES/django.mo +0 -0
- ledger/locale/ja/LC_MESSAGES/django.po +348 -193
- ledger/locale/ko_KR/LC_MESSAGES/django.mo +0 -0
- ledger/locale/ko_KR/LC_MESSAGES/django.po +349 -193
- ledger/locale/nl_NL/LC_MESSAGES/django.mo +0 -0
- ledger/locale/nl_NL/LC_MESSAGES/django.po +349 -193
- ledger/locale/pl_PL/LC_MESSAGES/django.mo +0 -0
- ledger/locale/pl_PL/LC_MESSAGES/django.po +350 -193
- ledger/locale/ru/LC_MESSAGES/django.mo +0 -0
- ledger/locale/ru/LC_MESSAGES/django.po +348 -193
- ledger/locale/sk/LC_MESSAGES/django.mo +0 -0
- ledger/locale/sk/LC_MESSAGES/django.po +348 -193
- ledger/locale/uk/LC_MESSAGES/django.mo +0 -0
- ledger/locale/uk/LC_MESSAGES/django.po +348 -193
- ledger/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
- ledger/locale/zh_Hans/LC_MESSAGES/django.po +348 -193
- ledger/managers/character_audit_manager.py +28 -20
- ledger/managers/character_journal_manager.py +185 -357
- ledger/managers/character_mining_manager.py +52 -26
- ledger/managers/character_planetary_manager.py +178 -136
- ledger/managers/corporation_audit_manager.py +36 -27
- ledger/managers/corporation_journal_manager.py +92 -56
- ledger/managers/general_manager.py +8 -7
- ledger/migrations/0018_remove_characterplanet_ledger_char_planet__58a5b6_idx_and_more.py +44 -0
- ledger/migrations/0019_rename_characteraudit_characterowner_and_more.py +48 -0
- ledger/models/__init__.py +5 -11
- ledger/models/characteraudit.py +101 -109
- ledger/models/corporationaudit.py +94 -49
- ledger/models/general.py +105 -211
- ledger/models/helpers/update_manager.py +302 -0
- ledger/models/planetary.py +60 -205
- ledger/providers.py +101 -0
- ledger/static/ledger/css/{ledger.css → aa-ledger.css} +54 -28
- ledger/static/ledger/js/aa-ledger.js +124 -0
- ledger/static/ledger/js/charts.js +25 -1
- ledger/static/ledger/js/view-alliance-ledger.js +383 -0
- ledger/static/ledger/js/view-character-ledger.js +388 -0
- ledger/static/ledger/js/view-corporation-ledger.js +402 -0
- ledger/static/ledger/js/view-planetary.js +492 -0
- ledger/static/ledger/libs/amCharts/5.14.4/js/flow.js +2 -0
- ledger/static/ledger/libs/amCharts/5.14.4/js/index.js +2 -0
- ledger/static/ledger/libs/amCharts/5.14.4/js/percent.js +2 -0
- ledger/static/ledger/libs/amCharts/5.14.4/js/themes/Animated.js +2 -0
- ledger/static/ledger/libs/amCharts/5.14.4/js/themes/Dark.js +2 -0
- ledger/static/ledger/libs/amCharts/5.14.4/js/xy.js +2 -0
- ledger/static/ledger/libs/datatables/2.3.5/css/dataTables.bootstrap5.css +610 -0
- ledger/static/ledger/libs/datatables/2.3.5/js/dataTables.bootstrap5.js +122 -0
- ledger/static/ledger/libs/datatables/2.3.5/js/dataTables.js +14127 -0
- ledger/static/ledger/libs/datatables/Extensions/ColumnControl/1.1.1/css/columnControl.bootstrap5.css +516 -0
- ledger/static/ledger/libs/datatables/Extensions/ColumnControl/1.1.1/css/columnControl.dataTables.css +529 -0
- ledger/static/ledger/libs/datatables/Extensions/ColumnControl/1.1.1/js/columnControl.bootstrap5.js +73 -0
- ledger/static/ledger/libs/datatables/Extensions/ColumnControl/1.1.1/js/dataTables.columnControl.js +3090 -0
- ledger/static/ledger/libs/datatables/Extensions/FixedHeader/4.0.4/css/fixedHeader.bootstrap5.css +20 -0
- ledger/static/ledger/libs/datatables/Extensions/FixedHeader/4.0.4/js/dataTables.fixedHeader.js +1203 -0
- ledger/static/ledger/libs/datatables/Extensions/FixedHeader/4.0.4/js/fixedHeader.bootstrap5.js +59 -0
- ledger/tasks.py +157 -141
- ledger/templates/ledger/base.html +59 -21
- ledger/templates/ledger/bundles/aa-ledger-css.html +3 -0
- ledger/templates/ledger/bundles/aa-ledger-js.html +3 -0
- ledger/templates/ledger/bundles/view-alliance-ledger-js.html +14 -0
- ledger/templates/ledger/bundles/view-character-ledger-js.html +15 -0
- ledger/templates/ledger/bundles/view-character-planetary-css.html +3 -0
- ledger/templates/ledger/bundles/view-character-planetary-js.html +4 -0
- ledger/templates/ledger/bundles/view-corporation-ledger-js.html +15 -0
- ledger/templates/ledger/partials/modal/confirm.html +0 -1
- ledger/templates/ledger/partials/modal/request-accept-delete-alliance.html +38 -0
- ledger/templates/ledger/partials/modal/request-accept-delete-character.html +38 -0
- ledger/templates/ledger/partials/modal/request-accept-delete-corporation.html +38 -0
- ledger/templates/ledger/partials/modal/request-accept-switch-notification.html +38 -0
- ledger/templates/ledger/partials/modal/request-view-alliance-details.html +26 -0
- ledger/templates/ledger/partials/modal/request-view-character-details.html +26 -0
- ledger/templates/ledger/partials/modal/request-view-corporation-details.html +26 -0
- ledger/templates/ledger/partials/modal/request-view-extractor.html +32 -0
- ledger/templates/ledger/partials/modal/request-view-factory.html +31 -0
- ledger/templates/ledger/partials/{menu → navigation}/administration.html +8 -0
- ledger/templates/ledger/partials/{menu → navigation}/navigation.html +2 -2
- ledger/templates/ledger/partials/{administration → view-alliance-administration}/alliance_corporations.html +3 -3
- ledger/templates/ledger/partials/view-alliance-administration/dashboard.html +81 -0
- ledger/templates/ledger/partials/view-alliance-ledger/alliance-billboard.html +25 -0
- ledger/templates/ledger/partials/view-alliance-ledger/alliance-ledger-details.html +21 -0
- ledger/templates/ledger/partials/view-alliance-ledger/alliance-table.html +24 -0
- ledger/templates/ledger/partials/view-alliance-ledger/information/daily.html +18 -0
- ledger/templates/ledger/partials/view-alliance-ledger/information/hourly.html +18 -0
- ledger/templates/ledger/partials/view-alliance-ledger/information/summary.html +19 -0
- ledger/templates/ledger/partials/{administration → view-character-administration}/character.html +1 -9
- ledger/templates/ledger/partials/{administration → view-character-administration}/dashboard.html +0 -34
- ledger/templates/ledger/partials/view-character-ledger/character-billboard.html +25 -0
- ledger/templates/ledger/partials/view-character-ledger/character-ledger-details.html +21 -0
- ledger/templates/ledger/partials/view-character-ledger/character-table.html +25 -0
- ledger/templates/ledger/partials/view-character-ledger/information/daily.html +18 -0
- ledger/templates/ledger/partials/view-character-ledger/information/hourly.html +18 -0
- ledger/templates/ledger/partials/view-character-ledger/information/summary.html +19 -0
- ledger/templates/ledger/partials/view-character-planetary/extractor-table.html +24 -0
- ledger/templates/ledger/partials/view-character-planetary/factory-table.html +24 -0
- ledger/templates/ledger/partials/view-character-planetary/planetary-table.html +22 -0
- ledger/templates/ledger/partials/view-character-planetary/storage-table.html +23 -0
- ledger/templates/ledger/partials/{administration → view-corporation-administration}/corporation.html +5 -13
- ledger/templates/ledger/partials/{administration → view-corporation-administration}/corporation_characters.html +1 -1
- ledger/templates/ledger/partials/view-corporation-administration/dashboard.html +81 -0
- ledger/templates/ledger/partials/view-corporation-ledger/corporation-billboard.html +25 -0
- ledger/templates/ledger/partials/view-corporation-ledger/corporation-ledger-details.html +21 -0
- ledger/templates/ledger/partials/view-corporation-ledger/corporation-table.html +26 -0
- ledger/templates/ledger/partials/view-corporation-ledger/information/daily.html +18 -0
- ledger/templates/ledger/partials/view-corporation-ledger/information/hourly.html +18 -0
- ledger/templates/ledger/partials/view-corporation-ledger/information/summary.html +19 -0
- ledger/templates/ledger/view-administration.html +62 -0
- ledger/templates/ledger/view-alliance-administration.html +49 -0
- ledger/templates/ledger/view-alliance-ledger.html +72 -0
- ledger/templates/ledger/view-alliance-overview.html +131 -0
- ledger/templates/ledger/view-character-administration.html +42 -0
- ledger/templates/ledger/view-character-ledger.html +73 -0
- ledger/templates/ledger/view-character-overview.html +135 -0
- ledger/templates/ledger/view-character-planetary-overview.html +135 -0
- ledger/templates/ledger/view-character-planetary.html +73 -0
- ledger/templates/ledger/view-corporation-administration.html +42 -0
- ledger/templates/ledger/view-corporation-ledger.html +73 -0
- ledger/templates/ledger/view-corporation-overview.html +131 -0
- ledger/templatetags/ledger.py +3 -5
- ledger/tests/__init__.py +187 -0
- ledger/tests/test_admin.py +164 -68
- ledger/tests/test_auth_hook.py +31 -13
- ledger/tests/test_decarators.py +14 -79
- ledger/tests/test_discord_installed.py +0 -1
- ledger/tests/test_helpers/test_ledger_data.py +19 -0
- ledger/tests/test_managers/test_character_audit_manager.py +111 -69
- ledger/tests/test_managers/test_character_journal_manager.py +48 -208
- ledger/tests/test_managers/test_character_mining_manager.py +37 -16
- ledger/tests/test_managers/test_corporation_division_manager.py +66 -28
- ledger/tests/test_managers/test_corporation_journal_manager.py +39 -42
- ledger/tests/test_managers/test_general_manager.py +78 -18
- ledger/tests/test_managers/test_planetary_manager.py +73 -32
- ledger/tests/test_models/test_characteraudit.py +58 -74
- ledger/tests/test_models/test_characterminingledger.py +20 -26
- ledger/tests/test_models/test_characterwalletjournal.py +10 -33
- ledger/tests/test_models/test_corporationaudit.py +41 -35
- ledger/tests/test_models/test_corporationwalletjournal.py +35 -32
- ledger/tests/test_models/test_general.py +44 -11
- ledger/tests/test_models/test_planetary.py +14 -80
- ledger/tests/test_templatetags.py +2 -7
- ledger/tests/test_views/corporation/test_add_corp.py +16 -35
- ledger/tests/test_views/corporation/test_delete_corporation.py +66 -42
- ledger/tests/test_views/test_access.py +512 -545
- ledger/tests/test_views/test_add_ally.py +57 -46
- ledger/tests/test_views/test_add_char.py +21 -33
- ledger/tests/test_views/test_delete_character.py +24 -21
- ledger/tests/testdata/README_ESI_STUB.md +430 -0
- ledger/tests/testdata/esi_stub_openapi.py +511 -0
- ledger/tests/testdata/integrations/__init__.py +0 -0
- ledger/tests/testdata/{load_eveuniverse.py → integrations/eveuniverse.py} +0 -1
- ledger/tests/testdata/integrations/planetary.py +13 -0
- ledger/tests/testdata/json/factory.json +281 -0
- ledger/tests/testdata/json/inactive.json +281 -0
- ledger/tests/testdata/json/pins.json +175 -272
- ledger/tests/testdata/json/route.json +95 -528
- ledger/tests/testdata/test_esi_stub.py +468 -0
- ledger/tests/testdata/utils.py +601 -0
- ledger/thirdparty/charlink_hook.py +60 -30
- ledger/urls.py +0 -135
- ledger/views/alliance/add_ally.py +2 -4
- ledger/views/alliance/alliance_ledger.py +64 -147
- ledger/views/character/add_char.py +8 -10
- ledger/views/character/character_ledger.py +60 -126
- ledger/views/character/planetary.py +5 -98
- ledger/views/corporation/add_corp.py +10 -12
- ledger/views/corporation/corporation_ledger.py +65 -327
- ledger/views/index.py +92 -30
- aa_ledger-1.0.4.dist-info/RECORD +0 -236
- ledger/api/api_helper/planetary_helper.py +0 -107
- ledger/api/ledger/__init__.py +0 -7
- ledger/api/ledger/planetary.py +0 -231
- ledger/helpers/alliance.py +0 -317
- ledger/helpers/character.py +0 -251
- ledger/helpers/core.py +0 -665
- ledger/helpers/corporation.py +0 -427
- ledger/helpers/data_exporter.py +0 -452
- ledger/static/ledger/js/planetary-confirm.js +0 -66
- ledger/static/ledger/js/planetary.js +0 -143
- ledger/templates/ledger/admin.html +0 -43
- ledger/templates/ledger/allyledger/admin/alliance_administration.html +0 -46
- ledger/templates/ledger/allyledger/admin/alliance_overview.html +0 -108
- ledger/templates/ledger/allyledger/alliance_ledger.html +0 -86
- ledger/templates/ledger/bundles/character-ledger-bundles.html +0 -66
- ledger/templates/ledger/bundles/corporation-ledger-bundles.html +0 -75
- ledger/templates/ledger/bundles/ledger-bundles.html +0 -23
- ledger/templates/ledger/bundles/ledger-css.html +0 -3
- ledger/templates/ledger/bundles/planetary-bundles.html +0 -50
- ledger/templates/ledger/bundles/table-css.html +0 -3
- ledger/templates/ledger/charledger/admin/character_administration.html +0 -39
- ledger/templates/ledger/charledger/admin/character_overview.html +0 -106
- ledger/templates/ledger/charledger/character_ledger.html +0 -94
- ledger/templates/ledger/charledger/planetary/admin/planetary_overview.html +0 -123
- ledger/templates/ledger/charledger/planetary/planetary_ledger.html +0 -54
- ledger/templates/ledger/corpledger/admin/corporation_administration.html +0 -39
- ledger/templates/ledger/corpledger/admin/corporation_overview.html +0 -108
- ledger/templates/ledger/corpledger/corporation_ledger.html +0 -129
- ledger/templates/ledger/data-export.html +0 -78
- ledger/templates/ledger/error.html +0 -31
- ledger/templates/ledger/partials/form/error-message.html +0 -1
- ledger/templates/ledger/partials/information/daily.html +0 -56
- ledger/templates/ledger/partials/information/day.html +0 -48
- ledger/templates/ledger/partials/information/error.html +0 -8
- ledger/templates/ledger/partials/information/hourly.html +0 -53
- ledger/templates/ledger/partials/information/summary.html +0 -88
- ledger/templates/ledger/partials/information/view_character_content.html +0 -35
- ledger/templates/ledger/partials/modal/switchalarm_confirm.html +0 -39
- ledger/templates/ledger/partials/modal/view_extractor.html +0 -48
- ledger/templates/ledger/partials/modal/view_factory.html +0 -123
- ledger/templates/ledger/partials/table/char-ledger.html +0 -85
- ledger/templates/ledger/partials/table/corp-ledger.html +0 -66
- ledger/templates/ledger/partials/table/planetary.html +0 -18
- ledger/templates/ledger/partials/thirdparty/billboard.html +0 -22
- ledger/templates/ledger/partials/view/card.html +0 -160
- ledger/templates/ledger/permission.html +0 -2
- ledger/tests/test_helpers/test_billboard.py +0 -11
- ledger/tests/test_helpers/test_data_exporter.py +0 -207
- ledger/tests/test_tasks.py +0 -282
- ledger/tests/test_view_helpers/test_core.py +0 -47
- ledger/tests/test_views/corporation/test_corporation.py +0 -267
- ledger/tests/test_views/test_planetary.py +0 -137
- ledger/tests/testdata/esi_stub.py +0 -109
- ledger/tests/testdata/esi_stub_migration.py +0 -80
- ledger/tests/testdata/generate_characteraudit.py +0 -106
- ledger/tests/testdata/generate_corporationaudit.py +0 -74
- ledger/tests/testdata/generate_events.py +0 -31
- ledger/tests/testdata/generate_miningledger.py +0 -13
- ledger/tests/testdata/generate_planets.py +0 -48
- ledger/tests/testdata/generate_walletjournal.py +0 -42
- ledger/tests/testdata/json/czarno-pins.json +0 -240
- ledger/tests/testdata/json/czarno-routes.json +0 -165
- ledger/tests/testdata/json/pins2.json +0 -538
- {aa_ledger-1.0.4.dist-info → aa_ledger-2.0.0.dist-info}/WHEEL +0 -0
- {aa_ledger-1.0.4.dist-info → aa_ledger-2.0.0.dist-info}/licenses/LICENSE +0 -0
- /ledger/{tests/test_view_helpers → api/helpers}/__init__.py +0 -0
- /ledger/templates/ledger/bundles/{ally-administration-bundles.html → view-alliance-administration-js.html} +0 -0
- /ledger/templates/ledger/bundles/{char-administration-bundles.html → view-character-administration-js.html} +0 -0
- /ledger/templates/ledger/bundles/{corp-administration-bundles.html → view-corporation-administration-js.html} +0 -0
- /ledger/templates/ledger/partials/{administration → view-alliance-administration}/alliance.html +0 -0
- /ledger/tests/testdata/{esi.json → esi_test_data.json} +0 -0
- /ledger/tests/testdata/{allianceauth.json → integrations/allianceauth.json} +0 -0
- /ledger/tests/testdata/{load_allianceauth.py → integrations/allianceauth.py} +0 -0
- /ledger/tests/testdata/{eveentity.json → integrations/eveentity.json} +0 -0
- /ledger/tests/testdata/{load_eveentity.py → integrations/eveentity.py} +0 -0
- /ledger/tests/testdata/{eveuniverse.json → integrations/eveuniverse.json} +0 -0
- /ledger/tests/testdata/{planetary.json → integrations/planetary.json} +0 -0
|
@@ -2,823 +2,790 @@
|
|
|
2
2
|
|
|
3
3
|
# Standard Library
|
|
4
4
|
from http import HTTPStatus
|
|
5
|
-
from unittest.mock import
|
|
5
|
+
from unittest.mock import patch
|
|
6
6
|
|
|
7
7
|
# Django
|
|
8
|
-
from django.contrib.messages.middleware import MessageMiddleware
|
|
9
|
-
from django.contrib.sessions.middleware import SessionMiddleware
|
|
10
|
-
from django.test import RequestFactory, TestCase
|
|
11
8
|
from django.urls import reverse
|
|
12
9
|
|
|
13
|
-
# Alliance Auth (External Libs)
|
|
14
|
-
from app_utils.testing import (
|
|
15
|
-
create_user_from_evecharacter,
|
|
16
|
-
)
|
|
17
|
-
|
|
18
10
|
# AA Ledger
|
|
19
|
-
from ledger.tests
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
from ledger.tests.testdata.generate_corporationaudit import (
|
|
24
|
-
add_corporationaudit_corporation_to_user,
|
|
11
|
+
from ledger.tests import LedgerTestCase
|
|
12
|
+
from ledger.tests.testdata.utils import (
|
|
13
|
+
add_new_permission_to_user,
|
|
14
|
+
create_owner_from_user,
|
|
25
15
|
)
|
|
26
|
-
from ledger.tests.testdata.load_allianceauth import load_allianceauth
|
|
27
|
-
from ledger.tests.testdata.load_eveuniverse import load_eveuniverse
|
|
28
16
|
from ledger.views import index
|
|
29
17
|
from ledger.views.alliance import alliance_ledger
|
|
30
18
|
from ledger.views.character import character_ledger, planetary
|
|
31
19
|
from ledger.views.corporation import corporation_ledger
|
|
32
20
|
|
|
33
21
|
INDEX_PATH = "ledger.views.index"
|
|
22
|
+
TASKS_PATH = "ledger.tasks"
|
|
34
23
|
CHARLEDGER_PATH = "ledger.views.character.character_ledger"
|
|
35
24
|
CORPLEDGER_PATH = "ledger.views.corporation.corporation_ledger"
|
|
36
25
|
ALLYLEDGER_PATH = "ledger.views.alliance.alliance_ledger"
|
|
37
26
|
|
|
38
27
|
|
|
39
28
|
@patch(INDEX_PATH + ".messages")
|
|
40
|
-
class TestViewIndexAccess(
|
|
29
|
+
class TestViewIndexAccess(LedgerTestCase):
|
|
41
30
|
@classmethod
|
|
42
31
|
def setUpClass(cls):
|
|
43
32
|
super().setUpClass()
|
|
44
|
-
load_allianceauth()
|
|
45
|
-
load_eveuniverse()
|
|
46
33
|
|
|
47
|
-
cls.
|
|
48
|
-
cls.user,
|
|
49
|
-
1002
|
|
50
|
-
)
|
|
51
|
-
cls.superuser, cls.character_ownership = (
|
|
52
|
-
create_user_from_evecharacter_with_access(1001)
|
|
53
|
-
)
|
|
34
|
+
create_owner_from_user(cls.user)
|
|
35
|
+
create_owner_from_user(cls.user, owner_type="corporation")
|
|
54
36
|
|
|
55
37
|
def test_admin(self, mock_messages):
|
|
56
|
-
"""
|
|
57
|
-
|
|
58
|
-
self.superuser.is_superuser = True
|
|
59
|
-
self.superuser.save()
|
|
38
|
+
"""
|
|
39
|
+
Test admin access.
|
|
60
40
|
|
|
41
|
+
This test logs in a superuser and verifies that they can access the admin view.
|
|
42
|
+
"""
|
|
43
|
+
# Test Data
|
|
61
44
|
request = self.factory.get(reverse("ledger:admin"))
|
|
62
45
|
request.user = self.superuser
|
|
63
|
-
|
|
46
|
+
|
|
47
|
+
# Test Action
|
|
64
48
|
response = index.admin(request)
|
|
65
|
-
|
|
49
|
+
|
|
50
|
+
# Expected Result
|
|
66
51
|
self.assertEqual(response.status_code, HTTPStatus.OK)
|
|
67
52
|
self.assertContains(response, "Administration")
|
|
68
53
|
|
|
69
54
|
def test_admin_no_access(self, mock_messages):
|
|
70
|
-
"""
|
|
71
|
-
|
|
55
|
+
"""
|
|
56
|
+
Test admin access.
|
|
57
|
+
|
|
58
|
+
This test verifies that a user without admin access is redirected and an error message is shown.
|
|
59
|
+
"""
|
|
60
|
+
# Test Data
|
|
72
61
|
request = self.factory.get(reverse("ledger:admin"))
|
|
73
62
|
request.user = self.user
|
|
74
63
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
#
|
|
64
|
+
self._middleware_process_request(request)
|
|
65
|
+
|
|
66
|
+
# Test Action
|
|
78
67
|
response = index.admin(request)
|
|
79
|
-
|
|
68
|
+
|
|
69
|
+
# Expected Result
|
|
80
70
|
self.assertEqual(response.status_code, HTTPStatus.FOUND)
|
|
81
71
|
self.assertTrue(mock_messages.error.called)
|
|
82
72
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
73
|
+
@patch(TASKS_PATH + ".clear_all_cache")
|
|
74
|
+
def test_admin_clear_all_cache(self, mock_clear_cache, mock_messages):
|
|
75
|
+
"""
|
|
76
|
+
Test clear all cache.
|
|
77
|
+
|
|
78
|
+
This test posts to the admin view to trigger the clear cache action.
|
|
79
|
+
"""
|
|
80
|
+
# Test Data
|
|
88
81
|
request = self.factory.post(
|
|
89
|
-
reverse("ledger:admin"), data={"
|
|
82
|
+
reverse("ledger:admin"), data={"run_clear_cache": True}
|
|
90
83
|
)
|
|
91
84
|
request.user = self.superuser
|
|
85
|
+
self._middleware_process_request(request)
|
|
92
86
|
|
|
93
|
-
|
|
94
|
-
middleware.process_request(request)
|
|
95
|
-
# when
|
|
87
|
+
# Test Action
|
|
96
88
|
response = index.admin(request)
|
|
97
|
-
|
|
89
|
+
|
|
90
|
+
# Expected Result
|
|
98
91
|
self.assertEqual(response.status_code, HTTPStatus.OK)
|
|
99
|
-
mock_messages.info.assert_called_once_with(request, "Queued Clear All
|
|
92
|
+
mock_messages.info.assert_called_once_with(request, "Queued Clear All Cache")
|
|
93
|
+
mock_clear_cache.apply_async.assert_called_once_with(priority=1)
|
|
100
94
|
|
|
101
95
|
def test_force_refresh(self, mock_messages):
|
|
102
|
-
"""
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
96
|
+
"""
|
|
97
|
+
Test force refresh.
|
|
98
|
+
|
|
99
|
+
This test posts to the admin view to trigger the force refresh action.
|
|
100
|
+
"""
|
|
101
|
+
# Test Data
|
|
106
102
|
request = self.factory.post(
|
|
107
103
|
reverse("ledger:admin"), data={"force_refresh": True}
|
|
108
104
|
)
|
|
109
105
|
request.user = self.superuser
|
|
106
|
+
self._middleware_process_request(request)
|
|
110
107
|
|
|
111
|
-
|
|
112
|
-
middleware.process_request(request)
|
|
113
|
-
# when
|
|
108
|
+
# Test Action
|
|
114
109
|
response = index.admin(request)
|
|
115
|
-
|
|
110
|
+
|
|
111
|
+
# Expected Result
|
|
116
112
|
self.assertEqual(response.status_code, HTTPStatus.OK)
|
|
117
113
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
114
|
+
@patch(TASKS_PATH + ".update_all_characters")
|
|
115
|
+
def test_run_character_updates(self, mock_update_characters, mock_messages):
|
|
116
|
+
"""
|
|
117
|
+
Test run character updates.
|
|
118
|
+
|
|
119
|
+
This test posts to the admin view to trigger the run character updates action.
|
|
120
|
+
|
|
121
|
+
# Expected Results
|
|
122
|
+
- Update all characters task is queued
|
|
123
|
+
"""
|
|
124
|
+
# Test Data
|
|
123
125
|
request = self.factory.post(
|
|
124
|
-
reverse("ledger:admin"), data={"
|
|
126
|
+
reverse("ledger:admin"), data={"run_character_updates": True}
|
|
125
127
|
)
|
|
126
128
|
request.user = self.superuser
|
|
129
|
+
self._middleware_process_request(request)
|
|
127
130
|
|
|
128
|
-
|
|
129
|
-
middleware.process_request(request)
|
|
130
|
-
# when
|
|
131
|
+
# Test Action
|
|
131
132
|
response = index.admin(request)
|
|
132
|
-
|
|
133
|
+
|
|
134
|
+
# Expected Result
|
|
133
135
|
self.assertEqual(response.status_code, HTTPStatus.OK)
|
|
134
136
|
mock_messages.info.assert_called_once_with(
|
|
135
137
|
request, "Queued Update All Characters"
|
|
136
138
|
)
|
|
139
|
+
mock_update_characters.apply_async.assert_called_once()
|
|
137
140
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
141
|
+
@patch(TASKS_PATH + ".update_character")
|
|
142
|
+
def test_run_character_updates_character_1001(
|
|
143
|
+
self, mock_update_characters, mock_messages
|
|
144
|
+
):
|
|
145
|
+
"""
|
|
146
|
+
Test run character updates.
|
|
147
|
+
|
|
148
|
+
This test posts to the admin view to trigger the run character updates action for character ID 1001.
|
|
149
|
+
|
|
150
|
+
# Expected Results
|
|
151
|
+
- Update task is queued for the specified character
|
|
152
|
+
"""
|
|
153
|
+
# Test Data
|
|
143
154
|
request = self.factory.post(
|
|
144
|
-
reverse("ledger:admin"),
|
|
155
|
+
reverse("ledger:admin"),
|
|
156
|
+
data={"run_character_updates": True, "character_id": 1001},
|
|
145
157
|
)
|
|
146
158
|
request.user = self.superuser
|
|
159
|
+
self._middleware_process_request(request)
|
|
147
160
|
|
|
148
|
-
|
|
149
|
-
middleware.process_request(request)
|
|
150
|
-
# when
|
|
161
|
+
# Test Action
|
|
151
162
|
response = index.admin(request)
|
|
152
|
-
|
|
163
|
+
|
|
164
|
+
# Expected Result
|
|
153
165
|
self.assertEqual(response.status_code, HTTPStatus.OK)
|
|
154
166
|
mock_messages.info.assert_called_once_with(
|
|
155
|
-
request,
|
|
167
|
+
request,
|
|
168
|
+
f"Queued Update for Character: {self.user_character.character.character_name}",
|
|
156
169
|
)
|
|
170
|
+
mock_update_characters.apply_async.assert_called_once()
|
|
157
171
|
|
|
172
|
+
@patch(TASKS_PATH + ".update_character")
|
|
173
|
+
def test_run_character_updates_character_not_exist(
|
|
174
|
+
self, mock_update_characters, mock_messages
|
|
175
|
+
):
|
|
176
|
+
"""
|
|
177
|
+
Test run character updates.
|
|
158
178
|
|
|
159
|
-
|
|
160
|
-
@classmethod
|
|
161
|
-
def setUpClass(cls):
|
|
162
|
-
super().setUpClass()
|
|
163
|
-
load_allianceauth()
|
|
164
|
-
load_eveuniverse()
|
|
179
|
+
This test posts to the admin view to trigger the run character updates action for a non-existent character ID.
|
|
165
180
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
181
|
+
# Expected Results
|
|
182
|
+
- Error message is shown for the non-existent character
|
|
183
|
+
"""
|
|
184
|
+
# Test Data
|
|
185
|
+
request = self.factory.post(
|
|
186
|
+
reverse("ledger:admin"),
|
|
187
|
+
data={"run_character_updates": True, "character_id": 9999},
|
|
169
188
|
)
|
|
170
|
-
|
|
171
|
-
|
|
189
|
+
request.user = self.superuser
|
|
190
|
+
self._middleware_process_request(request)
|
|
191
|
+
|
|
192
|
+
# Test Action
|
|
193
|
+
response = index.admin(request)
|
|
194
|
+
|
|
195
|
+
# Expected Result
|
|
196
|
+
self.assertEqual(response.status_code, HTTPStatus.OK)
|
|
197
|
+
mock_messages.error.assert_called_with(
|
|
198
|
+
request, "Character with ID 9999 not found"
|
|
172
199
|
)
|
|
173
|
-
|
|
174
|
-
|
|
200
|
+
mock_update_characters.apply_async.assert_not_called()
|
|
201
|
+
|
|
202
|
+
@patch(TASKS_PATH + ".update_all_corporations")
|
|
203
|
+
def test_run_corporation_updates(self, mock_update_corporations, mock_messages):
|
|
204
|
+
"""
|
|
205
|
+
Test run corporation updates.
|
|
206
|
+
|
|
207
|
+
This test posts to the admin view to trigger the run corporation updates action.
|
|
208
|
+
|
|
209
|
+
# Expected Results
|
|
210
|
+
- Update all corporations task is queued
|
|
211
|
+
"""
|
|
212
|
+
# Test Data
|
|
213
|
+
request = self.factory.post(
|
|
214
|
+
reverse("ledger:admin"), data={"run_corporation_updates": True}
|
|
175
215
|
)
|
|
216
|
+
request.user = self.superuser
|
|
217
|
+
self._middleware_process_request(request)
|
|
176
218
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
)
|
|
219
|
+
# Test Action
|
|
220
|
+
response = index.admin(request)
|
|
221
|
+
|
|
222
|
+
# Expected Result
|
|
223
|
+
self.assertEqual(response.status_code, HTTPStatus.OK)
|
|
224
|
+
mock_messages.info.assert_called_once_with(
|
|
225
|
+
request, "Queued Update All Corporations"
|
|
185
226
|
)
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
227
|
+
mock_update_corporations.apply_async.assert_called_once()
|
|
228
|
+
|
|
229
|
+
@patch(TASKS_PATH + ".update_corporation")
|
|
230
|
+
def test_run_corporation_updates_corporation_2001(
|
|
231
|
+
self, mock_update_corporations, mock_messages
|
|
232
|
+
):
|
|
233
|
+
"""
|
|
234
|
+
Test run corporation updates.
|
|
235
|
+
|
|
236
|
+
This test posts to the admin view to trigger the run corporation updates action for corporation ID 2001.
|
|
237
|
+
|
|
238
|
+
# Expected Results
|
|
239
|
+
- Update task is queued for the specified corporation
|
|
240
|
+
"""
|
|
241
|
+
# Test Data
|
|
242
|
+
request = self.factory.post(
|
|
243
|
+
reverse("ledger:admin"),
|
|
244
|
+
data={"run_corporation_updates": True, "corporation_id": 2001},
|
|
190
245
|
)
|
|
191
|
-
|
|
246
|
+
request.user = self.superuser
|
|
247
|
+
self._middleware_process_request(request)
|
|
248
|
+
|
|
249
|
+
# Test Action
|
|
250
|
+
response = index.admin(request)
|
|
251
|
+
|
|
252
|
+
# Expected Result
|
|
192
253
|
self.assertEqual(response.status_code, HTTPStatus.OK)
|
|
193
|
-
|
|
254
|
+
mock_messages.info.assert_called_once_with(
|
|
255
|
+
request,
|
|
256
|
+
f"Queued Update for Corporation: {self.user_character.character.corporation.corporation_name}",
|
|
257
|
+
)
|
|
258
|
+
mock_update_corporations.apply_async.assert_called_once()
|
|
194
259
|
|
|
195
|
-
@patch(
|
|
196
|
-
def
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
260
|
+
@patch(TASKS_PATH + ".update_corporation")
|
|
261
|
+
def test_run_corporation_updates_corporation_not_exist(
|
|
262
|
+
self, mock_update_corporations, mock_messages
|
|
263
|
+
):
|
|
264
|
+
"""
|
|
265
|
+
Test run corporation updates.
|
|
201
266
|
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
#
|
|
208
|
-
|
|
209
|
-
|
|
267
|
+
This test posts to the admin view to trigger the run corporation updates action for a non-existent corporation ID.
|
|
268
|
+
|
|
269
|
+
# Expected Results
|
|
270
|
+
- Error message is shown for the non-existent corporation
|
|
271
|
+
"""
|
|
272
|
+
# Test Data
|
|
273
|
+
request = self.factory.post(
|
|
274
|
+
reverse("ledger:admin"),
|
|
275
|
+
data={"run_corporation_updates": True, "corporation_id": 9999},
|
|
276
|
+
)
|
|
277
|
+
request.user = self.superuser
|
|
278
|
+
self._middleware_process_request(request)
|
|
279
|
+
|
|
280
|
+
# Test Action
|
|
281
|
+
response = index.admin(request)
|
|
282
|
+
|
|
283
|
+
# Expected Result
|
|
210
284
|
self.assertEqual(response.status_code, HTTPStatus.OK)
|
|
211
|
-
|
|
212
|
-
|
|
285
|
+
mock_messages.error.assert_called_with(
|
|
286
|
+
request, "Corporation with ID 9999 not found"
|
|
287
|
+
)
|
|
288
|
+
mock_update_corporations.apply_async.assert_not_called()
|
|
213
289
|
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
290
|
+
|
|
291
|
+
class TestViewCharacterLedgerAccess(LedgerTestCase):
|
|
292
|
+
"""Test character ledger access."""
|
|
293
|
+
|
|
294
|
+
@classmethod
|
|
295
|
+
def setUpClass(cls):
|
|
296
|
+
super().setUpClass()
|
|
297
|
+
cls.owner = create_owner_from_user(
|
|
298
|
+
user=cls.user,
|
|
299
|
+
owner_type="character",
|
|
300
|
+
)
|
|
301
|
+
|
|
302
|
+
def test_view_character_ledger(self):
|
|
303
|
+
"""
|
|
304
|
+
Test view character ledger.
|
|
305
|
+
|
|
306
|
+
This test verifies that a user with permission can access their character ledger.
|
|
307
|
+
"""
|
|
308
|
+
# Test Data
|
|
217
309
|
request = self.factory.get(
|
|
218
310
|
reverse(
|
|
219
|
-
"ledger:
|
|
220
|
-
|
|
311
|
+
"ledger:character_ledger",
|
|
312
|
+
kwargs={
|
|
313
|
+
"character_id": self.user_character.character.character_id,
|
|
314
|
+
"year": 2025,
|
|
315
|
+
},
|
|
221
316
|
)
|
|
222
317
|
)
|
|
223
318
|
request.user = self.user
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
319
|
+
|
|
320
|
+
# Test Action
|
|
321
|
+
response = character_ledger.character_ledger(
|
|
322
|
+
request,
|
|
323
|
+
character_id=self.user_character.character.character_id,
|
|
324
|
+
year=2025,
|
|
227
325
|
)
|
|
228
|
-
#
|
|
326
|
+
# Expected Result
|
|
229
327
|
self.assertEqual(response.status_code, HTTPStatus.OK)
|
|
230
|
-
self.assertContains(
|
|
231
|
-
response,
|
|
232
|
-
"No ratting data found...",
|
|
233
|
-
)
|
|
328
|
+
self.assertContains(response, "Character Ledger")
|
|
234
329
|
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
330
|
+
@patch(CHARLEDGER_PATH + ".messages")
|
|
331
|
+
def test_view_character_ledger_without_permission(self, mock_messages):
|
|
332
|
+
"""
|
|
333
|
+
Test view character ledger without permission.
|
|
334
|
+
|
|
335
|
+
This test verifies that a user without permission is shown an error message when accessing a character ledger.
|
|
336
|
+
"""
|
|
337
|
+
# Test Action
|
|
338
|
+
self.client.force_login(self.user)
|
|
339
|
+
response = self.client.get(
|
|
239
340
|
reverse(
|
|
240
|
-
"ledger:
|
|
241
|
-
|
|
242
|
-
)
|
|
341
|
+
"ledger:character_ledger",
|
|
342
|
+
kwargs={"character_id": 1003, "year": 2025},
|
|
343
|
+
),
|
|
344
|
+
follow=True,
|
|
243
345
|
)
|
|
244
|
-
request.user = self.user2
|
|
245
346
|
|
|
246
|
-
#
|
|
247
|
-
response = character_ledger.character_details(
|
|
248
|
-
request, self.character_ownership.character.character_id, year=2025
|
|
249
|
-
)
|
|
250
|
-
# then
|
|
347
|
+
# Expected Result
|
|
251
348
|
self.assertEqual(response.status_code, HTTPStatus.OK)
|
|
252
|
-
self.assertContains(response, "
|
|
349
|
+
self.assertContains(response, "Character Ledger")
|
|
350
|
+
self.assertTrue(mock_messages.error.called)
|
|
253
351
|
|
|
254
352
|
def test_view_character_overview(self):
|
|
255
|
-
"""
|
|
256
|
-
|
|
353
|
+
"""
|
|
354
|
+
Test view character overview.
|
|
355
|
+
|
|
356
|
+
This test verifies that a user with permission can access the character overview.
|
|
357
|
+
"""
|
|
358
|
+
# Test Data
|
|
257
359
|
request = self.factory.get(reverse("ledger:character_overview"))
|
|
258
360
|
request.user = self.user
|
|
259
|
-
|
|
361
|
+
|
|
362
|
+
# Test Action
|
|
260
363
|
response = character_ledger.character_overview(request)
|
|
261
|
-
|
|
364
|
+
|
|
365
|
+
# Expected Result
|
|
262
366
|
self.assertEqual(response.status_code, HTTPStatus.OK)
|
|
263
367
|
self.assertContains(response, "Character Overview")
|
|
264
368
|
|
|
265
369
|
def test_view_character_administration(self):
|
|
266
|
-
"""
|
|
267
|
-
|
|
370
|
+
"""
|
|
371
|
+
Test view character administration.
|
|
372
|
+
|
|
373
|
+
This test verifies that a user with permission can access their character administration view.
|
|
374
|
+
"""
|
|
375
|
+
# Test Data
|
|
268
376
|
request = self.factory.get(
|
|
269
377
|
reverse(
|
|
270
378
|
"ledger:character_administration",
|
|
271
|
-
|
|
379
|
+
kwargs={"character_id": self.user_character.character.character_id},
|
|
272
380
|
)
|
|
273
381
|
)
|
|
274
382
|
request.user = self.user
|
|
275
|
-
|
|
383
|
+
|
|
384
|
+
# Test Action
|
|
276
385
|
response = character_ledger.character_administration(
|
|
277
|
-
request, self.
|
|
386
|
+
request, character_id=self.user_character.character.character_id
|
|
278
387
|
)
|
|
279
|
-
|
|
388
|
+
|
|
389
|
+
# Expected Result
|
|
280
390
|
self.assertEqual(response.status_code, HTTPStatus.OK)
|
|
281
391
|
self.assertContains(response, "Administration")
|
|
282
392
|
|
|
283
393
|
def test_view_character_administration_withouth_character_id(self):
|
|
284
|
-
"""
|
|
285
|
-
|
|
394
|
+
"""
|
|
395
|
+
Test view character administration.
|
|
396
|
+
|
|
397
|
+
This test verifies that a user with permission can access their character administration view without providing a character ID.
|
|
398
|
+
"""
|
|
399
|
+
# Test Data
|
|
286
400
|
request = self.factory.get(
|
|
287
401
|
reverse(
|
|
288
402
|
"ledger:character_administration",
|
|
289
|
-
|
|
403
|
+
kwargs={"character_id": self.user_character.character.character_id},
|
|
290
404
|
)
|
|
291
405
|
)
|
|
292
406
|
request.user = self.user
|
|
293
|
-
|
|
407
|
+
|
|
408
|
+
# Test Action
|
|
294
409
|
response = character_ledger.character_administration(request)
|
|
295
|
-
|
|
410
|
+
|
|
411
|
+
# Expected Result
|
|
296
412
|
self.assertEqual(response.status_code, HTTPStatus.OK)
|
|
297
413
|
self.assertContains(response, "Administration")
|
|
298
414
|
|
|
299
415
|
@patch(CHARLEDGER_PATH + ".messages")
|
|
300
416
|
def test_view_character_administration_no_permission(self, mock_messages):
|
|
301
|
-
"""
|
|
302
|
-
|
|
417
|
+
"""
|
|
418
|
+
Test view character administration.
|
|
419
|
+
|
|
420
|
+
This test verifies that a user without permission is redirected and shown an error message when accessing character administration.
|
|
421
|
+
"""
|
|
422
|
+
# Test Data
|
|
303
423
|
request = self.factory.get(
|
|
304
424
|
reverse("ledger:character_administration", args=[1002])
|
|
305
425
|
)
|
|
306
426
|
request.user = self.user
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
#
|
|
310
|
-
response = character_ledger.character_administration(request, 1002)
|
|
311
|
-
|
|
427
|
+
self._middleware_process_request(request)
|
|
428
|
+
|
|
429
|
+
# Test Action
|
|
430
|
+
response = character_ledger.character_administration(request, character_id=1002)
|
|
431
|
+
|
|
432
|
+
# Expected Result
|
|
312
433
|
self.assertEqual(response.status_code, HTTPStatus.FOUND)
|
|
313
434
|
mock_messages.error.assert_called_once_with(request, "Permission Denied")
|
|
314
435
|
|
|
315
436
|
|
|
316
|
-
class TestViewCorporationLedgerAccess(
|
|
437
|
+
class TestViewCorporationLedgerAccess(LedgerTestCase):
|
|
317
438
|
@classmethod
|
|
318
439
|
def setUpClass(cls):
|
|
319
440
|
super().setUpClass()
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
cls.factory = RequestFactory()
|
|
324
|
-
cls.user, cls.character_ownership = create_user_from_evecharacter(
|
|
325
|
-
1001,
|
|
326
|
-
permissions=[
|
|
327
|
-
"ledger.basic_access",
|
|
328
|
-
"ledger.advanced_access",
|
|
329
|
-
"ledger.manage_access",
|
|
330
|
-
"ledger.corp_audit_manager",
|
|
331
|
-
],
|
|
332
|
-
)
|
|
333
|
-
cls.user_no_perm, cls.character_ownership_no_perm = (
|
|
334
|
-
create_user_from_evecharacter(
|
|
335
|
-
1002,
|
|
336
|
-
permissions=[
|
|
337
|
-
"ledger.basic_access",
|
|
338
|
-
"ledger.advanced_access",
|
|
339
|
-
"ledger.manage_access",
|
|
340
|
-
],
|
|
341
|
-
)
|
|
441
|
+
cls.audit = create_owner_from_user(
|
|
442
|
+
user=cls.user,
|
|
443
|
+
owner_type="corporation",
|
|
342
444
|
)
|
|
343
|
-
cls.
|
|
344
|
-
|
|
345
|
-
def test_view_corporation_ledger_index(self):
|
|
346
|
-
"""Test view corporation ledger index."""
|
|
347
|
-
# given
|
|
348
|
-
request = self.factory.get(reverse("ledger:corporation_ledger_index"))
|
|
349
|
-
request.user = self.user
|
|
350
|
-
# when
|
|
351
|
-
response = corporation_ledger.corporation_ledger_index(request)
|
|
352
|
-
# then
|
|
353
|
-
self.assertEqual(response.status_code, HTTPStatus.FOUND)
|
|
445
|
+
cls.user = add_new_permission_to_user(cls.user, "ledger.advanced_access")
|
|
354
446
|
|
|
355
447
|
def test_view_corporation_ledger(self):
|
|
356
|
-
"""
|
|
357
|
-
|
|
448
|
+
"""
|
|
449
|
+
Test view corporation ledger.
|
|
450
|
+
|
|
451
|
+
This test verifies that a user with permission can access their corporation ledger.
|
|
452
|
+
"""
|
|
453
|
+
# Test Data
|
|
358
454
|
request = self.factory.get(
|
|
359
455
|
reverse(
|
|
360
456
|
"ledger:corporation_ledger",
|
|
361
|
-
|
|
457
|
+
kwargs={
|
|
458
|
+
"corporation_id": self.user_character.character.corporation_id,
|
|
459
|
+
"year": 2025,
|
|
460
|
+
},
|
|
362
461
|
)
|
|
363
462
|
)
|
|
364
463
|
request.user = self.user
|
|
365
|
-
|
|
464
|
+
|
|
465
|
+
# Test Action
|
|
366
466
|
response = corporation_ledger.corporation_ledger(
|
|
367
|
-
request,
|
|
467
|
+
request,
|
|
468
|
+
corporation_id=self.user_character.character.corporation_id,
|
|
469
|
+
year=2025,
|
|
368
470
|
)
|
|
369
|
-
|
|
471
|
+
|
|
472
|
+
# Expected Result
|
|
370
473
|
self.assertEqual(response.status_code, HTTPStatus.OK)
|
|
371
474
|
self.assertContains(response, "Corporation Ledger")
|
|
372
475
|
|
|
373
476
|
@patch(CORPLEDGER_PATH + ".messages")
|
|
374
477
|
def test_view_corporation_ledger_not_found(self, mock_messages):
|
|
375
|
-
"""
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
478
|
+
"""
|
|
479
|
+
Test view corporation ledger not found.
|
|
480
|
+
|
|
481
|
+
This test verifies that a user is shown an info message when accessing a non-existent corporation ledger.
|
|
482
|
+
"""
|
|
483
|
+
# Test Action
|
|
484
|
+
self.client.force_login(self.user)
|
|
485
|
+
response = self.client.get(
|
|
486
|
+
reverse(
|
|
487
|
+
"ledger:corporation_ledger",
|
|
488
|
+
kwargs={"corporation_id": 9999, "year": 2025},
|
|
489
|
+
),
|
|
490
|
+
follow=True,
|
|
491
|
+
)
|
|
379
492
|
|
|
380
|
-
#
|
|
381
|
-
middleware = SessionMiddleware(Mock())
|
|
382
|
-
middleware.process_request(request)
|
|
383
|
-
message_middleware = MessageMiddleware(Mock())
|
|
384
|
-
message_middleware.process_request(request)
|
|
385
|
-
# when
|
|
386
|
-
response = corporation_ledger.corporation_ledger(request, 9999)
|
|
387
|
-
# then
|
|
493
|
+
# Expected Result
|
|
388
494
|
self.assertEqual(response.status_code, HTTPStatus.OK)
|
|
389
495
|
self.assertContains(response, "Corporation Ledger")
|
|
390
496
|
self.assertTrue(mock_messages.info.called)
|
|
391
497
|
|
|
392
498
|
@patch(CORPLEDGER_PATH + ".messages")
|
|
393
499
|
def test_view_corporation_ledger_without_permission(self, mock_messages):
|
|
394
|
-
"""
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
#
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
# when
|
|
405
|
-
response = corporation_ledger.corporation_ledger(request, 2001)
|
|
406
|
-
# then
|
|
407
|
-
self.assertEqual(response.status_code, HTTPStatus.OK)
|
|
408
|
-
self.assertContains(response, "Corporation Ledger")
|
|
409
|
-
self.assertTrue(mock_messages.error.called)
|
|
410
|
-
|
|
411
|
-
def test_view_corporation_details(self):
|
|
412
|
-
"""Test view corporation details."""
|
|
413
|
-
# given
|
|
414
|
-
request = self.factory.get(
|
|
500
|
+
"""
|
|
501
|
+
Test view corporation ledger without permission.
|
|
502
|
+
|
|
503
|
+
This test verifies that a user without permission is shown an error message when accessing a corporation ledger.
|
|
504
|
+
"""
|
|
505
|
+
# Test Data
|
|
506
|
+
self.user2 = add_new_permission_to_user(self.user2, "ledger.advanced_access")
|
|
507
|
+
# Test Action
|
|
508
|
+
self.client.force_login(self.user2)
|
|
509
|
+
response = self.client.get(
|
|
415
510
|
reverse(
|
|
416
|
-
"ledger:
|
|
417
|
-
|
|
418
|
-
)
|
|
419
|
-
|
|
420
|
-
request.user = self.user
|
|
421
|
-
# when
|
|
422
|
-
response = corporation_ledger.corporation_details(
|
|
423
|
-
request,
|
|
424
|
-
self.character_ownership.character.corporation_id,
|
|
425
|
-
entity_id=1001,
|
|
426
|
-
year=2025,
|
|
427
|
-
)
|
|
428
|
-
# then
|
|
429
|
-
self.assertEqual(response.status_code, HTTPStatus.OK)
|
|
430
|
-
self.assertContains(response, "No ratting data found...")
|
|
431
|
-
|
|
432
|
-
def test_view_corporation_details_no_permission(self):
|
|
433
|
-
"""Test view corporation details."""
|
|
434
|
-
# given
|
|
435
|
-
request = self.factory.get(
|
|
436
|
-
reverse(
|
|
437
|
-
"ledger:corporation_details",
|
|
438
|
-
args=[2001, 2025, 1001],
|
|
439
|
-
)
|
|
440
|
-
)
|
|
441
|
-
request.user = self.user_no_perm
|
|
442
|
-
|
|
443
|
-
# when
|
|
444
|
-
response = corporation_ledger.corporation_details(
|
|
445
|
-
request, 2001, entity_id=1001, year=2025
|
|
446
|
-
)
|
|
447
|
-
# then
|
|
448
|
-
self.assertEqual(response.status_code, HTTPStatus.OK)
|
|
449
|
-
self.assertContains(response, "Permission Denied")
|
|
450
|
-
|
|
451
|
-
def test_view_corporation_details_not_found(self):
|
|
452
|
-
"""Test view corporation details."""
|
|
453
|
-
# given
|
|
454
|
-
request = self.factory.get(
|
|
455
|
-
reverse(
|
|
456
|
-
"ledger:corporation_details",
|
|
457
|
-
args=[9999, 2025, 9999],
|
|
458
|
-
)
|
|
511
|
+
"ledger:corporation_ledger",
|
|
512
|
+
kwargs={"corporation_id": 2001, "year": 2025},
|
|
513
|
+
),
|
|
514
|
+
follow=True,
|
|
459
515
|
)
|
|
460
|
-
request.user = self.user_no_perm
|
|
461
516
|
|
|
462
|
-
#
|
|
463
|
-
response = corporation_ledger.corporation_details(
|
|
464
|
-
request, 9999, entity_id=9999, year=2025
|
|
465
|
-
)
|
|
466
|
-
# then
|
|
517
|
+
# Expected Result
|
|
467
518
|
self.assertEqual(response.status_code, HTTPStatus.OK)
|
|
468
|
-
self.assertContains(response, "Corporation
|
|
519
|
+
self.assertContains(response, "Corporation Ledger")
|
|
520
|
+
self.assertTrue(mock_messages.error.called)
|
|
469
521
|
|
|
470
522
|
def test_view_corporation_overview(self):
|
|
471
|
-
"""
|
|
472
|
-
|
|
523
|
+
"""
|
|
524
|
+
Test view corporation overview.
|
|
525
|
+
|
|
526
|
+
This test verifies that a user with permission can access the corporation overview.
|
|
527
|
+
"""
|
|
528
|
+
# Test Data
|
|
473
529
|
request = self.factory.get(reverse("ledger:corporation_overview"))
|
|
474
530
|
request.user = self.user
|
|
475
|
-
|
|
531
|
+
|
|
532
|
+
# Test Action
|
|
476
533
|
response = corporation_ledger.corporation_overview(request)
|
|
477
|
-
|
|
534
|
+
|
|
535
|
+
# Expected Result
|
|
478
536
|
self.assertEqual(response.status_code, HTTPStatus.OK)
|
|
479
537
|
self.assertContains(response, "Corporation Overview")
|
|
480
538
|
|
|
481
539
|
def test_view_corporation_administration(self):
|
|
482
|
-
"""
|
|
483
|
-
|
|
540
|
+
"""
|
|
541
|
+
Test view corporation administration.
|
|
542
|
+
|
|
543
|
+
This test verifies that a user with permission can access their corporation administration view.
|
|
544
|
+
"""
|
|
545
|
+
# Test Data
|
|
484
546
|
request = self.factory.get(
|
|
485
547
|
reverse(
|
|
486
548
|
"ledger:corporation_administration",
|
|
487
|
-
|
|
549
|
+
kwargs={"corporation_id": self.user_character.character.corporation_id},
|
|
488
550
|
)
|
|
489
551
|
)
|
|
490
|
-
request.user = self.
|
|
491
|
-
|
|
552
|
+
request.user = self.manage_own_user
|
|
553
|
+
|
|
554
|
+
# Test Action
|
|
492
555
|
response = corporation_ledger.corporation_administration(
|
|
493
|
-
request, self.
|
|
556
|
+
request, self.user_character.character.corporation_id
|
|
494
557
|
)
|
|
495
|
-
|
|
558
|
+
|
|
559
|
+
# Expected Result
|
|
496
560
|
self.assertEqual(response.status_code, HTTPStatus.OK)
|
|
497
561
|
self.assertContains(response, "Administration")
|
|
498
562
|
|
|
499
563
|
@patch(CORPLEDGER_PATH + ".messages")
|
|
500
564
|
def test_view_corporation_administration_no_permission(self, mock_messages):
|
|
501
|
-
"""
|
|
502
|
-
|
|
565
|
+
"""
|
|
566
|
+
Test view corporation administration.
|
|
567
|
+
|
|
568
|
+
This test verifies that a user without permission is redirected and shown an error message when accessing corporation administration.
|
|
569
|
+
"""
|
|
570
|
+
# Test Data
|
|
571
|
+
create_owner_from_user(self.user2, owner_type="corporation")
|
|
503
572
|
request = self.factory.get(
|
|
504
|
-
reverse(
|
|
573
|
+
reverse(
|
|
574
|
+
"ledger:corporation_administration", kwargs={"corporation_id": 2002}
|
|
575
|
+
)
|
|
505
576
|
)
|
|
506
|
-
request.user = self.
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
#
|
|
510
|
-
response = corporation_ledger.corporation_administration(
|
|
511
|
-
|
|
577
|
+
request.user = self.manage_own_user
|
|
578
|
+
self._middleware_process_request(request)
|
|
579
|
+
|
|
580
|
+
# Test Action
|
|
581
|
+
response = corporation_ledger.corporation_administration(
|
|
582
|
+
request, corporation_id=2002
|
|
583
|
+
)
|
|
584
|
+
|
|
585
|
+
# Expected Result
|
|
512
586
|
self.assertEqual(response.status_code, HTTPStatus.FOUND)
|
|
513
587
|
mock_messages.error.assert_called_once_with(request, "Permission Denied")
|
|
514
588
|
|
|
515
589
|
@patch(CORPLEDGER_PATH + ".messages")
|
|
516
590
|
def test_view_corporation_administration_corporation_not_found(self, mock_messages):
|
|
517
|
-
"""
|
|
518
|
-
|
|
519
|
-
request = self.factory.get(
|
|
520
|
-
reverse("ledger:corporation_administration", args=[6666])
|
|
521
|
-
)
|
|
522
|
-
request.user = self.user
|
|
523
|
-
middleware = SessionMiddleware(Mock())
|
|
524
|
-
middleware.process_request(request)
|
|
525
|
-
# when
|
|
526
|
-
response = corporation_ledger.corporation_administration(request, 6666)
|
|
527
|
-
# then
|
|
528
|
-
self.assertEqual(response.status_code, HTTPStatus.FOUND)
|
|
529
|
-
mock_messages.info.assert_called_once_with(request, "Corporation not found")
|
|
591
|
+
"""
|
|
592
|
+
Test view corporation administration.
|
|
530
593
|
|
|
531
|
-
|
|
532
|
-
"""
|
|
533
|
-
#
|
|
594
|
+
This test verifies that a user is redirected and shown an info message when accessing a non-existent corporation administration.
|
|
595
|
+
"""
|
|
596
|
+
# Test Data
|
|
534
597
|
request = self.factory.get(
|
|
535
|
-
reverse(
|
|
598
|
+
reverse(
|
|
599
|
+
"ledger:corporation_administration", kwargs={"corporation_id": 6666}
|
|
600
|
+
)
|
|
536
601
|
)
|
|
537
|
-
request.user = self.
|
|
538
|
-
|
|
539
|
-
response = corporation_ledger.corporation_data_export(request, 2001)
|
|
540
|
-
# then
|
|
541
|
-
self.assertEqual(response.status_code, HTTPStatus.OK)
|
|
602
|
+
request.user = self.manage_own_user
|
|
603
|
+
self._middleware_process_request(request)
|
|
542
604
|
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
# given
|
|
547
|
-
request = self.factory.get(
|
|
548
|
-
reverse("ledger:corporation_data_export", args=[2001])
|
|
605
|
+
# Test Action
|
|
606
|
+
response = corporation_ledger.corporation_administration(
|
|
607
|
+
request, corporation_id=6666
|
|
549
608
|
)
|
|
550
|
-
request.user = self.user_no_perm
|
|
551
|
-
middleware = SessionMiddleware(Mock())
|
|
552
|
-
middleware.process_request(request)
|
|
553
|
-
# when
|
|
554
|
-
response = corporation_ledger.corporation_data_export(request, 2001)
|
|
555
|
-
# then
|
|
556
|
-
self.assertEqual(response.status_code, HTTPStatus.OK)
|
|
557
|
-
mock_messages.error.assert_called_once_with(request, "Permission Denied")
|
|
558
609
|
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
"""Test view corporation data exporter with not found corporation."""
|
|
562
|
-
# given
|
|
563
|
-
request = self.factory.get(
|
|
564
|
-
reverse("ledger:corporation_data_export", args=[9999])
|
|
565
|
-
)
|
|
566
|
-
request.user = self.user
|
|
567
|
-
middleware = SessionMiddleware(Mock())
|
|
568
|
-
middleware.process_request(request)
|
|
569
|
-
# when
|
|
570
|
-
response = corporation_ledger.corporation_data_export(request, 9999)
|
|
571
|
-
# then
|
|
572
|
-
self.assertEqual(response.status_code, HTTPStatus.OK)
|
|
610
|
+
# Expected Result
|
|
611
|
+
self.assertEqual(response.status_code, HTTPStatus.FOUND)
|
|
573
612
|
mock_messages.info.assert_called_once_with(request, "Corporation not found")
|
|
574
613
|
|
|
575
614
|
|
|
576
|
-
class TestViewAllianceLedgerAccess(
|
|
615
|
+
class TestViewAllianceLedgerAccess(LedgerTestCase):
|
|
577
616
|
@classmethod
|
|
578
617
|
def setUpClass(cls):
|
|
579
618
|
super().setUpClass()
|
|
580
|
-
load_allianceauth()
|
|
581
|
-
load_eveuniverse()
|
|
582
|
-
|
|
583
|
-
cls.factory = RequestFactory()
|
|
584
|
-
cls.user, cls.character_ownership = create_user_from_evecharacter(
|
|
585
|
-
1001,
|
|
586
|
-
permissions=[
|
|
587
|
-
"ledger.basic_access",
|
|
588
|
-
"ledger.advanced_access",
|
|
589
|
-
],
|
|
590
|
-
)
|
|
591
|
-
cls.user_no_perm, cls.character_ownership_no_perm = (
|
|
592
|
-
create_user_from_evecharacter(
|
|
593
|
-
1003,
|
|
594
|
-
permissions=[
|
|
595
|
-
"ledger.basic_access",
|
|
596
|
-
"ledger.advanced_access",
|
|
597
|
-
],
|
|
598
|
-
)
|
|
599
|
-
)
|
|
600
|
-
cls.user_admin, cls.character_ownership_admin = create_user_from_evecharacter(
|
|
601
|
-
1002,
|
|
602
|
-
permissions=[
|
|
603
|
-
"ledger.basic_access",
|
|
604
|
-
"ledger.advanced_access",
|
|
605
|
-
"ledger.manage_access",
|
|
606
|
-
],
|
|
607
|
-
)
|
|
608
|
-
cls.audit = add_corporationaudit_corporation_to_user(cls.user, 1001)
|
|
609
|
-
cls.audit_admin = add_corporationaudit_corporation_to_user(cls.user_admin, 1002)
|
|
610
|
-
cls.user_has_no_alliance, cls.character_ownership_no_alliance = (
|
|
611
|
-
create_user_from_evecharacter(
|
|
612
|
-
1000,
|
|
613
|
-
permissions=[
|
|
614
|
-
"ledger.basic_access",
|
|
615
|
-
"ledger.advanced_access",
|
|
616
|
-
],
|
|
617
|
-
)
|
|
618
|
-
)
|
|
619
619
|
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
response = alliance_ledger.alliance_ledger_index(request)
|
|
627
|
-
# then
|
|
628
|
-
self.assertEqual(response.status_code, HTTPStatus.FOUND)
|
|
620
|
+
cls.audit = create_owner_from_user(user=cls.user, owner_type="corporation")
|
|
621
|
+
cls.audit_admin = create_owner_from_user(
|
|
622
|
+
user=cls.user2, owner_type="corporation"
|
|
623
|
+
)
|
|
624
|
+
cls.user = add_new_permission_to_user(cls.user, "ledger.advanced_access")
|
|
625
|
+
cls.user2 = add_new_permission_to_user(cls.user2, "ledger.advanced_access")
|
|
629
626
|
|
|
630
627
|
def test_view_alliance_ledger(self):
|
|
631
|
-
"""
|
|
632
|
-
|
|
628
|
+
"""
|
|
629
|
+
Test view alliance ledger.
|
|
630
|
+
|
|
631
|
+
This test verifies that a user with permission can access their alliance ledger.
|
|
632
|
+
"""
|
|
633
|
+
# Test Data
|
|
633
634
|
request = self.factory.get(
|
|
634
635
|
reverse(
|
|
635
636
|
"ledger:alliance_ledger",
|
|
636
|
-
|
|
637
|
+
kwargs={
|
|
638
|
+
"alliance_id": self.user_character.character.alliance_id,
|
|
639
|
+
"year": 2025,
|
|
640
|
+
},
|
|
637
641
|
)
|
|
638
642
|
)
|
|
639
643
|
request.user = self.user
|
|
640
|
-
|
|
644
|
+
|
|
645
|
+
# Test Action
|
|
641
646
|
response = alliance_ledger.alliance_ledger(
|
|
642
|
-
request, self.
|
|
647
|
+
request, alliance_id=self.user_character.character.alliance_id, year=2025
|
|
643
648
|
)
|
|
644
|
-
|
|
649
|
+
|
|
650
|
+
# Expected Result
|
|
645
651
|
self.assertEqual(response.status_code, HTTPStatus.OK)
|
|
646
652
|
self.assertContains(response, "Alliance Ledger")
|
|
647
653
|
|
|
648
654
|
@patch(ALLYLEDGER_PATH + ".messages")
|
|
649
655
|
def test_view_alliance_ledger_not_found(self, mock_messages):
|
|
650
|
-
"""
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
656
|
+
"""
|
|
657
|
+
Test view alliance ledger not found.
|
|
658
|
+
|
|
659
|
+
This test verifies that a user is shown an info message when accessing a non-existent alliance ledger.
|
|
660
|
+
"""
|
|
661
|
+
# Test Action
|
|
662
|
+
self.client.force_login(self.user)
|
|
663
|
+
response = self.client.get(
|
|
664
|
+
reverse(
|
|
665
|
+
"ledger:alliance_ledger", kwargs={"alliance_id": 9999, "year": 2025}
|
|
666
|
+
),
|
|
667
|
+
follow=True,
|
|
668
|
+
)
|
|
654
669
|
|
|
655
|
-
#
|
|
656
|
-
middleware = SessionMiddleware(Mock())
|
|
657
|
-
middleware.process_request(request)
|
|
658
|
-
message_middleware = MessageMiddleware(Mock())
|
|
659
|
-
message_middleware.process_request(request)
|
|
660
|
-
# when
|
|
661
|
-
response = alliance_ledger.alliance_ledger(request, 9999)
|
|
662
|
-
# then
|
|
670
|
+
# Expected Result: final page after redirect is OK and contains the overview
|
|
663
671
|
self.assertEqual(response.status_code, HTTPStatus.OK)
|
|
664
|
-
self.assertContains(response, "Alliance
|
|
672
|
+
self.assertContains(response, "Alliance Overview")
|
|
665
673
|
self.assertTrue(mock_messages.info.called)
|
|
666
674
|
|
|
667
675
|
@patch(ALLYLEDGER_PATH + ".messages")
|
|
668
676
|
def test_view_alliance_ledger_without_permission(self, mock_messages):
|
|
669
|
-
"""
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
#
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
message_middleware = MessageMiddleware(Mock())
|
|
678
|
-
message_middleware.process_request(request)
|
|
679
|
-
# when
|
|
680
|
-
response = alliance_ledger.alliance_ledger(request, 3001)
|
|
681
|
-
# then
|
|
682
|
-
self.assertEqual(response.status_code, HTTPStatus.OK)
|
|
683
|
-
self.assertContains(response, "Alliance Ledger")
|
|
684
|
-
self.assertTrue(mock_messages.error.called)
|
|
685
|
-
|
|
686
|
-
def test_view_alliance_details(self):
|
|
687
|
-
"""Test view alliance details."""
|
|
688
|
-
# given
|
|
689
|
-
request = self.factory.get(
|
|
677
|
+
"""
|
|
678
|
+
Test view alliance ledger without permission.
|
|
679
|
+
|
|
680
|
+
This test verifies that a user without permission is shown an error message when accessing an alliance ledger.
|
|
681
|
+
"""
|
|
682
|
+
# Test Action
|
|
683
|
+
self.client.force_login(self.user2)
|
|
684
|
+
response = self.client.get(
|
|
690
685
|
reverse(
|
|
691
|
-
"ledger:
|
|
692
|
-
|
|
693
|
-
|
|
686
|
+
"ledger:alliance_ledger", kwargs={"alliance_id": 3001, "year": 2025}
|
|
687
|
+
),
|
|
688
|
+
follow=True,
|
|
694
689
|
)
|
|
695
|
-
request.user = self.user
|
|
696
|
-
# when
|
|
697
|
-
response = alliance_ledger.alliance_details(
|
|
698
|
-
request,
|
|
699
|
-
self.character_ownership.character.alliance_id,
|
|
700
|
-
entity_id=1001,
|
|
701
|
-
year=2025,
|
|
702
|
-
)
|
|
703
|
-
# then
|
|
704
|
-
self.assertEqual(response.status_code, HTTPStatus.OK)
|
|
705
|
-
self.assertContains(response, "No ratting data found...")
|
|
706
690
|
|
|
707
|
-
|
|
708
|
-
"""Test view alliance details without permission."""
|
|
709
|
-
# given
|
|
710
|
-
request = self.factory.get(
|
|
711
|
-
reverse(
|
|
712
|
-
"ledger:alliance_details",
|
|
713
|
-
args=[3001, 2025, 2001],
|
|
714
|
-
)
|
|
715
|
-
)
|
|
716
|
-
request.user = self.user_no_perm
|
|
717
|
-
|
|
718
|
-
# when
|
|
719
|
-
response = alliance_ledger.alliance_details(
|
|
720
|
-
request, 3001, entity_id=2001, year=2025
|
|
721
|
-
)
|
|
722
|
-
# then
|
|
723
|
-
self.assertEqual(response.status_code, HTTPStatus.OK)
|
|
724
|
-
self.assertContains(response, "Permission Denied")
|
|
725
|
-
|
|
726
|
-
def test_view_alliance_details_not_found(self):
|
|
727
|
-
"""Test view alliance details not found."""
|
|
728
|
-
# given
|
|
729
|
-
request = self.factory.get(
|
|
730
|
-
reverse(
|
|
731
|
-
"ledger:alliance_details",
|
|
732
|
-
args=[9999, 2025, 9999],
|
|
733
|
-
)
|
|
734
|
-
)
|
|
735
|
-
request.user = self.user_no_perm
|
|
736
|
-
|
|
737
|
-
# when
|
|
738
|
-
response = alliance_ledger.alliance_details(
|
|
739
|
-
request, 9999, entity_id=9999, year=2025
|
|
740
|
-
)
|
|
741
|
-
# then
|
|
691
|
+
# Expected Result: final page after redirect is OK and shows overview, and an error message was created
|
|
742
692
|
self.assertEqual(response.status_code, HTTPStatus.OK)
|
|
743
|
-
self.assertContains(response, "Alliance
|
|
693
|
+
self.assertContains(response, "Alliance Overview")
|
|
694
|
+
self.assertTrue(mock_messages.error.called)
|
|
744
695
|
|
|
745
696
|
def test_view_alliance_overview(self):
|
|
746
|
-
"""
|
|
747
|
-
|
|
697
|
+
"""
|
|
698
|
+
Test view alliance overview.
|
|
699
|
+
|
|
700
|
+
This test verifies that a user with permission can access the alliance overview.
|
|
701
|
+
"""
|
|
702
|
+
# Test Data
|
|
748
703
|
request = self.factory.get(reverse("ledger:alliance_overview"))
|
|
749
704
|
request.user = self.user
|
|
750
|
-
|
|
705
|
+
|
|
706
|
+
# Test Action
|
|
751
707
|
response = alliance_ledger.alliance_overview(request)
|
|
752
|
-
|
|
708
|
+
|
|
709
|
+
# Expected Result
|
|
753
710
|
self.assertEqual(response.status_code, HTTPStatus.OK)
|
|
754
711
|
self.assertContains(response, "Alliance Overview")
|
|
755
712
|
|
|
756
713
|
def test_view_alliance_administration(self):
|
|
757
|
-
"""
|
|
758
|
-
|
|
714
|
+
"""
|
|
715
|
+
Test view alliance administration.
|
|
716
|
+
|
|
717
|
+
This test verifies that a user with permission can access their alliance administration view.
|
|
718
|
+
"""
|
|
719
|
+
# Test Data
|
|
759
720
|
request = self.factory.get(
|
|
760
721
|
reverse(
|
|
761
722
|
"ledger:alliance_administration",
|
|
762
|
-
|
|
723
|
+
kwargs={"alliance_id": self.user_character.character.alliance_id},
|
|
763
724
|
)
|
|
764
725
|
)
|
|
765
|
-
request.user = self.
|
|
766
|
-
|
|
726
|
+
request.user = self.manage_user
|
|
727
|
+
|
|
728
|
+
# Test Action
|
|
767
729
|
response = alliance_ledger.alliance_administration(
|
|
768
|
-
request, self.
|
|
730
|
+
request, alliance_id=self.user_character.character.alliance_id
|
|
769
731
|
)
|
|
770
|
-
|
|
732
|
+
|
|
733
|
+
# Expected Result
|
|
771
734
|
self.assertEqual(response.status_code, HTTPStatus.OK)
|
|
772
735
|
self.assertContains(response, "Administration")
|
|
773
736
|
|
|
774
737
|
@patch(ALLYLEDGER_PATH + ".messages")
|
|
775
738
|
def test_view_alliance_administration_no_permission(self, mock_messages):
|
|
776
|
-
"""
|
|
777
|
-
|
|
739
|
+
"""
|
|
740
|
+
Test view alliance administration without permission.
|
|
741
|
+
|
|
742
|
+
This test verifies that a user without permission is redirected and shown an error message when accessing alliance administration.
|
|
743
|
+
"""
|
|
744
|
+
# Test Data
|
|
778
745
|
request = self.factory.get(
|
|
779
|
-
reverse("ledger:alliance_administration",
|
|
746
|
+
reverse("ledger:alliance_administration", kwargs={"alliance_id": 3002})
|
|
780
747
|
)
|
|
781
|
-
request.user = self.
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
#
|
|
785
|
-
response = alliance_ledger.alliance_administration(request,
|
|
786
|
-
|
|
748
|
+
request.user = self.manage_own_user
|
|
749
|
+
self._middleware_process_request(request)
|
|
750
|
+
|
|
751
|
+
# Test Action
|
|
752
|
+
response = alliance_ledger.alliance_administration(request, alliance_id=3002)
|
|
753
|
+
|
|
754
|
+
# Expected Result
|
|
787
755
|
self.assertEqual(response.status_code, HTTPStatus.FOUND)
|
|
788
756
|
mock_messages.error.assert_called_once_with(request, "Permission Denied")
|
|
789
757
|
|
|
790
758
|
@patch(ALLYLEDGER_PATH + ".messages")
|
|
791
759
|
def test_view_alliance_administration_alliance_not_found(self, mock_messages):
|
|
792
|
-
"""
|
|
793
|
-
|
|
760
|
+
"""
|
|
761
|
+
Test view alliance administration when the alliance is not found.
|
|
762
|
+
|
|
763
|
+
This test verifies that a user is redirected and shown an info message when accessing a non-existent alliance administration.
|
|
764
|
+
"""
|
|
765
|
+
# Test Data
|
|
794
766
|
request = self.factory.get(
|
|
795
|
-
reverse("ledger:alliance_administration",
|
|
767
|
+
reverse("ledger:alliance_administration", kwargs={"alliance_id": 6666})
|
|
796
768
|
)
|
|
797
|
-
request.user = self.
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
#
|
|
801
|
-
response = alliance_ledger.alliance_administration(request, 6666)
|
|
802
|
-
|
|
769
|
+
request.user = self.manage_user
|
|
770
|
+
self._middleware_process_request(request)
|
|
771
|
+
|
|
772
|
+
# Test Action
|
|
773
|
+
response = alliance_ledger.alliance_administration(request, alliance_id=6666)
|
|
774
|
+
|
|
775
|
+
# Expected Result
|
|
803
776
|
self.assertEqual(response.status_code, HTTPStatus.FOUND)
|
|
804
777
|
mock_messages.info.assert_called_once_with(request, "Alliance not found.")
|
|
805
778
|
|
|
806
779
|
|
|
807
|
-
class TestViewPlanetaryLedgerAccess(
|
|
780
|
+
class TestViewPlanetaryLedgerAccess(LedgerTestCase):
|
|
808
781
|
@classmethod
|
|
809
782
|
def setUpClass(cls):
|
|
810
783
|
super().setUpClass()
|
|
811
|
-
load_allianceauth()
|
|
812
|
-
load_eveuniverse()
|
|
813
784
|
|
|
814
|
-
cls.
|
|
815
|
-
|
|
816
|
-
1001,
|
|
817
|
-
permissions=[
|
|
818
|
-
"ledger.basic_access",
|
|
819
|
-
"ledger.advanced_access",
|
|
820
|
-
],
|
|
785
|
+
cls.audit = create_owner_from_user(
|
|
786
|
+
user=cls.user,
|
|
821
787
|
)
|
|
788
|
+
cls.user = add_new_permission_to_user(cls.user, "ledger.advanced_access")
|
|
822
789
|
|
|
823
790
|
def test_view_planetary_ledger_index(self):
|
|
824
791
|
"""Test view planetary ledger index."""
|
|
@@ -836,13 +803,13 @@ class TestViewPlanetaryLedgerAccess(TestCase):
|
|
|
836
803
|
request = self.factory.get(
|
|
837
804
|
reverse(
|
|
838
805
|
"ledger:planetary_ledger",
|
|
839
|
-
args=[self.
|
|
806
|
+
args=[self.user_character.character.character_id],
|
|
840
807
|
)
|
|
841
808
|
)
|
|
842
809
|
request.user = self.user
|
|
843
810
|
# when
|
|
844
811
|
response = planetary.planetary_ledger(
|
|
845
|
-
request, self.
|
|
812
|
+
request, self.user_character.character.character_id
|
|
846
813
|
)
|
|
847
814
|
# then
|
|
848
815
|
self.assertEqual(response.status_code, HTTPStatus.OK)
|
|
@@ -854,7 +821,7 @@ class TestViewPlanetaryLedgerAccess(TestCase):
|
|
|
854
821
|
request = self.factory.get(
|
|
855
822
|
reverse(
|
|
856
823
|
"ledger:planetary_ledger",
|
|
857
|
-
args=[self.
|
|
824
|
+
args=[self.user_character.character.character_id],
|
|
858
825
|
)
|
|
859
826
|
)
|
|
860
827
|
request.user = self.user
|