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.
- {aa_ledger-1.0.3.dist-info → aa_ledger-2.0.0.dist-info}/METADATA +6 -6
- aa_ledger-2.0.0.dist-info/RECORD +267 -0
- {aa_ledger-1.0.3.dist-info → aa_ledger-2.0.0.dist-info}/WHEEL +1 -1
- 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 +18 -26
- 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 +717 -553
- 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 +187 -358
- ledger/managers/character_mining_manager.py +64 -30
- ledger/managers/character_planetary_manager.py +185 -138
- ledger/managers/corporation_audit_manager.py +36 -27
- ledger/managers/corporation_journal_manager.py +94 -57
- ledger/managers/general_manager.py +12 -8
- 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 -146
- 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.3.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.3.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
|
@@ -3,37 +3,40 @@ from django.test import TestCase
|
|
|
3
3
|
from django.utils import timezone
|
|
4
4
|
|
|
5
5
|
# AA Ledger
|
|
6
|
-
from ledger.models.characteraudit import
|
|
7
|
-
from ledger.
|
|
8
|
-
|
|
6
|
+
from ledger.models.characteraudit import CharacterOwner
|
|
7
|
+
from ledger.models.helpers.update_manager import CharacterUpdateSection, UpdateStatus
|
|
8
|
+
from ledger.tests import LedgerTestCase
|
|
9
|
+
from ledger.tests.testdata.utils import (
|
|
10
|
+
create_owner_from_user,
|
|
9
11
|
create_update_status,
|
|
10
|
-
create_user_from_evecharacter_with_access,
|
|
11
12
|
)
|
|
12
|
-
from ledger.tests.testdata.load_allianceauth import load_allianceauth
|
|
13
|
-
from ledger.tests.testdata.load_eveentity import load_eveentity
|
|
14
|
-
from ledger.tests.testdata.load_eveuniverse import load_eveuniverse
|
|
15
13
|
|
|
16
14
|
MODULE_PATH = "ledger.managers.character_audit_manager"
|
|
17
15
|
|
|
18
16
|
|
|
19
|
-
class TestCharacterAuditManager(
|
|
17
|
+
class TestCharacterAuditManager(LedgerTestCase):
|
|
20
18
|
@classmethod
|
|
21
19
|
def setUpClass(cls):
|
|
22
20
|
super().setUpClass()
|
|
23
|
-
|
|
24
|
-
load_eveuniverse()
|
|
25
|
-
load_eveentity()
|
|
26
|
-
cls.user, cls.character_ownership = create_user_from_evecharacter_with_access(
|
|
27
|
-
1001,
|
|
28
|
-
)
|
|
29
|
-
cls.audit = add_characteraudit_character_to_user(cls.user, 1001)
|
|
21
|
+
cls.audit = create_owner_from_user(user=cls.user)
|
|
30
22
|
|
|
31
|
-
cls.
|
|
23
|
+
cls.user_character.delete()
|
|
32
24
|
|
|
33
25
|
def test_disable_characters_with_no_ownership_should_disable(self):
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
26
|
+
"""
|
|
27
|
+
Test that characters without ownership are disabled.
|
|
28
|
+
|
|
29
|
+
This test creates a character audit entry without any associated ownership
|
|
30
|
+
and then calls the disable_characters_with_no_owner method. It verifies that
|
|
31
|
+
the character is correctly disabled.
|
|
32
|
+
|
|
33
|
+
### Results:
|
|
34
|
+
- Characters without ownership are disabled.
|
|
35
|
+
- The method returns the correct count of disabled characters.
|
|
36
|
+
"""
|
|
37
|
+
# Test Data
|
|
38
|
+
sections = CharacterUpdateSection.get_sections()
|
|
39
|
+
for section in sections:
|
|
37
40
|
create_update_status(
|
|
38
41
|
self.audit,
|
|
39
42
|
section=section,
|
|
@@ -45,26 +48,30 @@ class TestCharacterAuditManager(TestCase):
|
|
|
45
48
|
last_update_at=timezone.now(),
|
|
46
49
|
last_update_finished_at=timezone.now(),
|
|
47
50
|
)
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
self.
|
|
51
|
+
# Expected Result
|
|
52
|
+
self.assertEqual(CharacterOwner.objects.disable_characters_with_no_owner(), 1)
|
|
53
|
+
self.assertFalse(CharacterOwner.objects.get(pk=self.audit.pk).active)
|
|
51
54
|
|
|
52
55
|
|
|
53
|
-
class TestCharacterAnnotateTotalUpdateStatus(
|
|
56
|
+
class TestCharacterAnnotateTotalUpdateStatus(LedgerTestCase):
|
|
54
57
|
@classmethod
|
|
55
58
|
def setUpClass(cls):
|
|
56
59
|
super().setUpClass()
|
|
57
|
-
load_allianceauth()
|
|
58
|
-
load_eveuniverse()
|
|
59
|
-
load_eveentity()
|
|
60
|
-
cls.user, cls.character_ownership = create_user_from_evecharacter_with_access(
|
|
61
|
-
1001,
|
|
62
|
-
)
|
|
63
60
|
|
|
64
61
|
def test_should_be_ok(self):
|
|
65
|
-
|
|
66
|
-
character
|
|
67
|
-
|
|
62
|
+
"""
|
|
63
|
+
Test that a character with all successful updates is marked as OK.
|
|
64
|
+
|
|
65
|
+
This test creates a character audit entry with successful update statuses
|
|
66
|
+
for all sections and verifies that the total update status is annotated as OK.
|
|
67
|
+
|
|
68
|
+
### Results:
|
|
69
|
+
- Characters with all successful updates are marked as OK.
|
|
70
|
+
- The method correctly annotates the total update status.
|
|
71
|
+
"""
|
|
72
|
+
# Test Data
|
|
73
|
+
character = create_owner_from_user(user=self.user)
|
|
74
|
+
sections = CharacterUpdateSection.get_sections()
|
|
68
75
|
for section in sections:
|
|
69
76
|
create_update_status(
|
|
70
77
|
character,
|
|
@@ -78,17 +85,26 @@ class TestCharacterAnnotateTotalUpdateStatus(TestCase):
|
|
|
78
85
|
last_update_finished_at=timezone.now(),
|
|
79
86
|
)
|
|
80
87
|
|
|
81
|
-
#
|
|
82
|
-
update_status =
|
|
88
|
+
# Test Action
|
|
89
|
+
update_status = CharacterOwner.objects.annotate_total_update_status()
|
|
83
90
|
obj = update_status.first()
|
|
84
91
|
|
|
85
|
-
#
|
|
86
|
-
self.assertEqual(obj.total_update_status,
|
|
92
|
+
# Expected Result
|
|
93
|
+
self.assertEqual(obj.total_update_status, UpdateStatus.OK)
|
|
87
94
|
|
|
88
95
|
def test_should_be_incomplete(self):
|
|
89
|
-
|
|
90
|
-
character
|
|
91
|
-
|
|
96
|
+
"""
|
|
97
|
+
Test that a character with incomplete updates is marked as INCOMPLETE.
|
|
98
|
+
|
|
99
|
+
This test creates a character audit entry with successful update statuses
|
|
100
|
+
for some sections and verifies that the total update status is annotated as INCOMPLETE.
|
|
101
|
+
|
|
102
|
+
### Results:
|
|
103
|
+
- Characters with incomplete updates are marked as INCOMPLETE.
|
|
104
|
+
- The method correctly annotates the total update status."""
|
|
105
|
+
# Test Data
|
|
106
|
+
character = create_owner_from_user(user=self.user)
|
|
107
|
+
sections = CharacterUpdateSection.get_sections()
|
|
92
108
|
for section in sections[:2]:
|
|
93
109
|
create_update_status(
|
|
94
110
|
character,
|
|
@@ -102,19 +118,27 @@ class TestCharacterAnnotateTotalUpdateStatus(TestCase):
|
|
|
102
118
|
last_update_finished_at=timezone.now(),
|
|
103
119
|
)
|
|
104
120
|
|
|
105
|
-
#
|
|
106
|
-
update_status =
|
|
121
|
+
# Test Action
|
|
122
|
+
update_status = CharacterOwner.objects.annotate_total_update_status()
|
|
107
123
|
obj = update_status.first()
|
|
108
124
|
|
|
109
|
-
#
|
|
110
|
-
self.assertEqual(
|
|
111
|
-
obj.total_update_status, CharacterAudit.UpdateStatus.INCOMPLETE
|
|
112
|
-
)
|
|
125
|
+
# Expected Result
|
|
126
|
+
self.assertEqual(obj.total_update_status, UpdateStatus.INCOMPLETE)
|
|
113
127
|
|
|
114
128
|
def test_should_be_token_error(self):
|
|
115
|
-
|
|
116
|
-
character
|
|
117
|
-
|
|
129
|
+
"""
|
|
130
|
+
Test that a character with token errors is marked as TOKEN_ERROR.
|
|
131
|
+
|
|
132
|
+
This test creates a character audit entry with at least one section having
|
|
133
|
+
a token error and verifies that the total update status is annotated as TOKEN_ERROR.
|
|
134
|
+
|
|
135
|
+
### Results:
|
|
136
|
+
- Characters with token errors are marked as TOKEN_ERROR.
|
|
137
|
+
- The method correctly annotates the total update status.
|
|
138
|
+
"""
|
|
139
|
+
# Test Data
|
|
140
|
+
character = create_owner_from_user(user=self.user)
|
|
141
|
+
sections = CharacterUpdateSection.get_sections()
|
|
118
142
|
for section in sections:
|
|
119
143
|
create_update_status(
|
|
120
144
|
character,
|
|
@@ -130,7 +154,7 @@ class TestCharacterAnnotateTotalUpdateStatus(TestCase):
|
|
|
130
154
|
|
|
131
155
|
create_update_status(
|
|
132
156
|
character,
|
|
133
|
-
section=
|
|
157
|
+
section=CharacterUpdateSection.WALLET_JOURNAL,
|
|
134
158
|
is_success=False,
|
|
135
159
|
error_message="",
|
|
136
160
|
has_token_error=True,
|
|
@@ -140,19 +164,27 @@ class TestCharacterAnnotateTotalUpdateStatus(TestCase):
|
|
|
140
164
|
last_update_finished_at=timezone.now(),
|
|
141
165
|
)
|
|
142
166
|
|
|
143
|
-
#
|
|
144
|
-
update_status =
|
|
167
|
+
# Test Action
|
|
168
|
+
update_status = CharacterOwner.objects.annotate_total_update_status()
|
|
145
169
|
obj = update_status.first()
|
|
146
170
|
|
|
147
|
-
#
|
|
148
|
-
self.assertEqual(
|
|
149
|
-
obj.total_update_status, CharacterAudit.UpdateStatus.TOKEN_ERROR
|
|
150
|
-
)
|
|
171
|
+
# Expected Result
|
|
172
|
+
self.assertEqual(obj.total_update_status, UpdateStatus.TOKEN_ERROR)
|
|
151
173
|
|
|
152
174
|
def test_should_be_disabled(self):
|
|
153
|
-
|
|
154
|
-
character
|
|
155
|
-
|
|
175
|
+
"""
|
|
176
|
+
Test that a disabled character is marked as DISABLED.
|
|
177
|
+
|
|
178
|
+
This test creates a character audit entry, marks it as inactive,
|
|
179
|
+
and verifies that the total update status is annotated as DISABLED.
|
|
180
|
+
|
|
181
|
+
### Results:
|
|
182
|
+
- Disabled characters are marked as DISABLED.
|
|
183
|
+
- The method correctly annotates the total update status.
|
|
184
|
+
"""
|
|
185
|
+
# Test Data
|
|
186
|
+
character = create_owner_from_user(user=self.user)
|
|
187
|
+
sections = CharacterUpdateSection.get_sections()
|
|
156
188
|
for section in sections:
|
|
157
189
|
create_update_status(
|
|
158
190
|
character,
|
|
@@ -169,17 +201,27 @@ class TestCharacterAnnotateTotalUpdateStatus(TestCase):
|
|
|
169
201
|
character.active = False
|
|
170
202
|
character.save()
|
|
171
203
|
|
|
172
|
-
#
|
|
173
|
-
update_status =
|
|
204
|
+
# Test Action
|
|
205
|
+
update_status = CharacterOwner.objects.annotate_total_update_status()
|
|
174
206
|
obj = update_status.first()
|
|
175
207
|
|
|
176
|
-
#
|
|
177
|
-
self.assertEqual(obj.total_update_status,
|
|
208
|
+
# Expected Result
|
|
209
|
+
self.assertEqual(obj.total_update_status, UpdateStatus.DISABLED)
|
|
178
210
|
|
|
179
211
|
def test_should_be_error(self):
|
|
180
|
-
|
|
181
|
-
character
|
|
182
|
-
|
|
212
|
+
"""
|
|
213
|
+
Test that a character with errors is marked as ERROR.
|
|
214
|
+
|
|
215
|
+
This test creates a character audit entry with failed update statuses
|
|
216
|
+
for all sections and verifies that the total update status is annotated as ERROR.
|
|
217
|
+
|
|
218
|
+
### Results:
|
|
219
|
+
- Characters with errors are marked as ERROR.
|
|
220
|
+
- The method correctly annotates the total update status.
|
|
221
|
+
"""
|
|
222
|
+
# Test Data
|
|
223
|
+
character = create_owner_from_user(user=self.user)
|
|
224
|
+
sections = CharacterUpdateSection.get_sections()
|
|
183
225
|
for section in sections:
|
|
184
226
|
create_update_status(
|
|
185
227
|
character,
|
|
@@ -193,9 +235,9 @@ class TestCharacterAnnotateTotalUpdateStatus(TestCase):
|
|
|
193
235
|
last_update_finished_at=timezone.now(),
|
|
194
236
|
)
|
|
195
237
|
|
|
196
|
-
#
|
|
197
|
-
update_status =
|
|
238
|
+
# Test Action
|
|
239
|
+
update_status = CharacterOwner.objects.annotate_total_update_status()
|
|
198
240
|
obj = update_status.first()
|
|
199
241
|
|
|
200
|
-
#
|
|
201
|
-
self.assertEqual(obj.total_update_status,
|
|
242
|
+
# Expected Result
|
|
243
|
+
self.assertEqual(obj.total_update_status, UpdateStatus.ERROR)
|
|
@@ -1,44 +1,41 @@
|
|
|
1
1
|
# Standard Library
|
|
2
|
-
from unittest.mock import patch
|
|
2
|
+
from unittest.mock import MagicMock, patch
|
|
3
3
|
|
|
4
4
|
# Django
|
|
5
5
|
from django.test import TestCase, override_settings
|
|
6
6
|
from django.utils import timezone
|
|
7
7
|
|
|
8
|
-
# Alliance Auth (External Libs)
|
|
9
|
-
from app_utils.testing import NoSocketsTestCase
|
|
10
|
-
|
|
11
8
|
# AA Ledger
|
|
12
9
|
from ledger.models.general import EveEntity
|
|
13
|
-
from ledger.tests
|
|
14
|
-
from ledger.tests.testdata.
|
|
15
|
-
|
|
10
|
+
from ledger.tests import LedgerTestCase
|
|
11
|
+
from ledger.tests.testdata.esi_stub_openapi import EsiEndpoint, create_esi_client_stub
|
|
12
|
+
from ledger.tests.testdata.utils import (
|
|
13
|
+
create_owner_from_user,
|
|
14
|
+
create_wallet_journal_entry,
|
|
16
15
|
)
|
|
17
|
-
from ledger.tests.testdata.generate_walletjournal import create_wallet_journal_entry
|
|
18
|
-
from ledger.tests.testdata.load_allianceauth import load_allianceauth
|
|
19
|
-
from ledger.tests.testdata.load_eveentity import load_eveentity
|
|
20
|
-
from ledger.tests.testdata.load_eveuniverse import load_eveuniverse
|
|
21
16
|
|
|
22
17
|
MODULE_PATH = "ledger.managers.character_journal_manager"
|
|
23
18
|
|
|
19
|
+
LEDGER_CHARACTER_WALLET_JOURNAL_ENDPOINTS = [
|
|
20
|
+
EsiEndpoint("Wallet", "GetCharactersCharacterIdWalletJournal", "character_id"),
|
|
21
|
+
]
|
|
22
|
+
|
|
24
23
|
|
|
25
24
|
@override_settings(CELERY_ALWAYS_EAGER=True, CELERY_EAGER_PROPAGATES_EXCEPTIONS=True)
|
|
26
25
|
@patch(MODULE_PATH + ".esi")
|
|
27
26
|
@patch("ledger.models.general.EveEntity")
|
|
28
|
-
class TestCharacterJournalManager(
|
|
27
|
+
class TestCharacterJournalManager(LedgerTestCase):
|
|
28
|
+
"""Test Character Journal Manager for Character."""
|
|
29
|
+
|
|
29
30
|
@classmethod
|
|
30
31
|
def setUpClass(cls):
|
|
31
32
|
super().setUpClass()
|
|
32
|
-
|
|
33
|
-
load_eveuniverse()
|
|
34
|
-
load_eveentity()
|
|
35
|
-
cls.audit = create_characteraudit_from_evecharacter(1001)
|
|
36
|
-
|
|
33
|
+
cls.audit = create_owner_from_user(user=cls.user)
|
|
37
34
|
cls.eve_character_first_party = EveEntity.objects.get(eve_id=1001)
|
|
38
35
|
cls.eve_character_second_party = EveEntity.objects.get(eve_id=1002)
|
|
39
36
|
|
|
40
37
|
cls.journal_entry = create_wallet_journal_entry(
|
|
41
|
-
|
|
38
|
+
owner_type="character",
|
|
42
39
|
character=cls.audit,
|
|
43
40
|
context_id=1,
|
|
44
41
|
entry_id=10,
|
|
@@ -59,18 +56,34 @@ class TestCharacterJournalManager(NoSocketsTestCase):
|
|
|
59
56
|
second_party=cls.eve_character_second_party,
|
|
60
57
|
ref_type="player_donation",
|
|
61
58
|
)
|
|
59
|
+
cls.token = cls.user_character.user.token_set.first()
|
|
60
|
+
cls.audit.get_token = MagicMock(return_value=cls.token)
|
|
62
61
|
|
|
63
62
|
def test_update_wallet_journal(self, mock_eveentity, mock_esi):
|
|
64
|
-
|
|
65
|
-
|
|
63
|
+
"""
|
|
64
|
+
Test updating the wallet journal for a character.
|
|
65
|
+
|
|
66
|
+
This test mocks the ESI client and EveEntity model to simulate
|
|
67
|
+
fetching wallet journal entries from ESI and updating the local
|
|
68
|
+
database accordingly.
|
|
69
|
+
|
|
70
|
+
### Results:
|
|
71
|
+
- Wallet Journal Entries (entry_id: 10, 13, 16) are created with correct data.
|
|
72
|
+
"""
|
|
73
|
+
# Test Data
|
|
74
|
+
mock_esi.client = create_esi_client_stub(
|
|
75
|
+
endpoints=LEDGER_CHARACTER_WALLET_JOURNAL_ENDPOINTS
|
|
76
|
+
)
|
|
66
77
|
mock_eveentity.objects.create_bulk_from_esi.return_value = True
|
|
67
78
|
|
|
68
79
|
EveEntity.objects.create(
|
|
69
80
|
eve_id=9999, name="Test Character 1", category="character"
|
|
70
81
|
)
|
|
71
82
|
|
|
83
|
+
# Test Action
|
|
72
84
|
self.audit.update_wallet_journal(force_refresh=False)
|
|
73
85
|
|
|
86
|
+
# Expected Results
|
|
74
87
|
self.assertSetEqual(
|
|
75
88
|
set(self.audit.ledger_character_journal.values_list("entry_id", flat=True)),
|
|
76
89
|
{10, 13, 16},
|
|
@@ -88,20 +101,19 @@ class TestCharacterJournalManager(NoSocketsTestCase):
|
|
|
88
101
|
self.assertEqual(obj.amount, 10000)
|
|
89
102
|
|
|
90
103
|
|
|
91
|
-
class TestCharacterJournalManagerAnnotations(
|
|
104
|
+
class TestCharacterJournalManagerAnnotations(LedgerTestCase):
|
|
105
|
+
"""Test annotation methods in CharacterJournalManager."""
|
|
106
|
+
|
|
92
107
|
@classmethod
|
|
93
108
|
def setUpClass(cls):
|
|
94
109
|
super().setUpClass()
|
|
95
|
-
|
|
96
|
-
load_eveuniverse()
|
|
97
|
-
load_eveentity()
|
|
98
|
-
cls.audit = create_characteraudit_from_evecharacter(1001)
|
|
110
|
+
cls.audit = create_owner_from_user(user=cls.user)
|
|
99
111
|
|
|
100
112
|
cls.eve_character_first_party = EveEntity.objects.get(eve_id=1001)
|
|
101
113
|
cls.eve_character_second_party = EveEntity.objects.get(eve_id=1002)
|
|
102
114
|
|
|
103
115
|
cls.journal_entry = create_wallet_journal_entry(
|
|
104
|
-
|
|
116
|
+
owner_type="character",
|
|
105
117
|
character=cls.audit,
|
|
106
118
|
context_id=1,
|
|
107
119
|
entry_id=10,
|
|
@@ -124,6 +136,7 @@ class TestCharacterJournalManagerAnnotations(TestCase):
|
|
|
124
136
|
)
|
|
125
137
|
|
|
126
138
|
def test_annotate_bounty_income(self):
|
|
139
|
+
""" "Test annotating bounty income."""
|
|
127
140
|
qs = self.audit.ledger_character_journal.all().annotate_bounty_income()
|
|
128
141
|
for obj in qs:
|
|
129
142
|
self.assertTrue(
|
|
@@ -132,79 +145,8 @@ class TestCharacterJournalManagerAnnotations(TestCase):
|
|
|
132
145
|
)
|
|
133
146
|
self.assertEqual(obj.bounty_income, 0)
|
|
134
147
|
|
|
135
|
-
def test_annotate_mission_income(self):
|
|
136
|
-
qs = self.audit.ledger_character_journal.all().annotate_mission_income()
|
|
137
|
-
for obj in qs:
|
|
138
|
-
self.assertTrue(
|
|
139
|
-
hasattr(obj, "mission_income"),
|
|
140
|
-
"Mission income annotation should be present",
|
|
141
|
-
)
|
|
142
|
-
self.assertEqual(obj.mission_income, 0)
|
|
143
|
-
|
|
144
|
-
def test_annotate_market_income(self):
|
|
145
|
-
qs = self.audit.ledger_character_journal.all().annotate_market_income()
|
|
146
|
-
for obj in qs:
|
|
147
|
-
self.assertTrue(
|
|
148
|
-
hasattr(obj, "market_income"),
|
|
149
|
-
"Market income annotation should be present",
|
|
150
|
-
)
|
|
151
|
-
self.assertEqual(obj.market_income, 0)
|
|
152
|
-
|
|
153
|
-
def test_annotate_incursion_income(self):
|
|
154
|
-
qs = self.audit.ledger_character_journal.all().annotate_incursion_income()
|
|
155
|
-
for obj in qs:
|
|
156
|
-
self.assertTrue(
|
|
157
|
-
hasattr(obj, "incursion_income"),
|
|
158
|
-
"Incursion income annotation should be present",
|
|
159
|
-
)
|
|
160
|
-
self.assertEqual(obj.incursion_income, 0)
|
|
161
|
-
|
|
162
|
-
def test_annotate_contract_income(self):
|
|
163
|
-
qs = self.audit.ledger_character_journal.all().annotate_contract_income()
|
|
164
|
-
for obj in qs:
|
|
165
|
-
self.assertTrue(
|
|
166
|
-
hasattr(obj, "contract_income"),
|
|
167
|
-
"Contract income annotation should be present",
|
|
168
|
-
)
|
|
169
|
-
self.assertEqual(obj.contract_income, 0)
|
|
170
|
-
|
|
171
|
-
def test_annotate_donation_income(self):
|
|
172
|
-
qs = self.audit.ledger_character_journal.all().annotate_donation_income()
|
|
173
|
-
for obj in qs:
|
|
174
|
-
self.assertTrue(
|
|
175
|
-
hasattr(obj, "donation_income"),
|
|
176
|
-
"Donation income annotation should be present",
|
|
177
|
-
)
|
|
178
|
-
self.assertEqual(obj.donation_income, 1000.00)
|
|
179
|
-
|
|
180
|
-
def test_annotate_insurance_income(self):
|
|
181
|
-
qs = self.audit.ledger_character_journal.all().annotate_insurance_income()
|
|
182
|
-
for obj in qs:
|
|
183
|
-
self.assertTrue(
|
|
184
|
-
hasattr(obj, "insurance_income"),
|
|
185
|
-
"Insurance income annotation should be present",
|
|
186
|
-
)
|
|
187
|
-
self.assertEqual(obj.insurance_income, 0)
|
|
188
|
-
|
|
189
|
-
def test_annotate_milestone_income(self):
|
|
190
|
-
qs = self.audit.ledger_character_journal.all().annotate_milestone_income()
|
|
191
|
-
for obj in qs:
|
|
192
|
-
self.assertTrue(
|
|
193
|
-
hasattr(obj, "milestone_income"),
|
|
194
|
-
"Milestone income annotation should be present",
|
|
195
|
-
)
|
|
196
|
-
self.assertEqual(obj.milestone_income, 0)
|
|
197
|
-
|
|
198
|
-
def test_annotate_daily_goal_income(self):
|
|
199
|
-
qs = self.audit.ledger_character_journal.all().annotate_daily_goal_income()
|
|
200
|
-
for obj in qs:
|
|
201
|
-
self.assertTrue(
|
|
202
|
-
hasattr(obj, "daily_goal_income"),
|
|
203
|
-
"Daily goal income annotation should be present",
|
|
204
|
-
)
|
|
205
|
-
self.assertEqual(obj.daily_goal_income, 0)
|
|
206
|
-
|
|
207
148
|
def test_annotate_miscellaneous_income(self):
|
|
149
|
+
"""Test annotating miscellaneous income."""
|
|
208
150
|
qs = self.audit.ledger_character_journal.all().annotate_miscellaneous()
|
|
209
151
|
for obj in qs:
|
|
210
152
|
self.assertTrue(
|
|
@@ -213,126 +155,20 @@ class TestCharacterJournalManagerAnnotations(TestCase):
|
|
|
213
155
|
)
|
|
214
156
|
self.assertEqual(obj.miscellaneous, 1000.00)
|
|
215
157
|
|
|
216
|
-
def test_annotate_miscellaneous_exclude_donations(self):
|
|
217
|
-
"""Test including donations in miscellaneous annotation."""
|
|
218
|
-
qs = (
|
|
219
|
-
self.audit.ledger_character_journal.all().annotate_miscellaneous_exclude_donations()
|
|
220
|
-
)
|
|
221
|
-
for obj in qs:
|
|
222
|
-
self.assertTrue(
|
|
223
|
-
hasattr(obj, "miscellaneous"),
|
|
224
|
-
"Miscellaneous with exclude annotation should be present",
|
|
225
|
-
)
|
|
226
|
-
self.assertEqual(obj.miscellaneous, 1000.00)
|
|
227
|
-
|
|
228
|
-
def test_annotate_miscellaneous_exclude_donations_with_exclude(self):
|
|
229
|
-
"""Test excluding donations from miscellaneous annotation."""
|
|
230
|
-
qs = self.audit.ledger_character_journal.all().annotate_miscellaneous_exclude_donations(
|
|
231
|
-
exclude=1001
|
|
232
|
-
)
|
|
233
|
-
for obj in qs:
|
|
234
|
-
self.assertTrue(
|
|
235
|
-
hasattr(obj, "miscellaneous"),
|
|
236
|
-
"Miscellaneous with exclude annotation should be present",
|
|
237
|
-
)
|
|
238
|
-
self.assertEqual(obj.miscellaneous, 0)
|
|
239
|
-
|
|
240
|
-
def test_annotate_contract_cost(self):
|
|
241
|
-
qs = self.audit.ledger_character_journal.all().annotate_contract_cost()
|
|
242
|
-
for obj in qs:
|
|
243
|
-
self.assertTrue(
|
|
244
|
-
hasattr(obj, "contract_cost"),
|
|
245
|
-
"Contract costs annotation should be present",
|
|
246
|
-
)
|
|
247
|
-
self.assertEqual(obj.contract_cost, 0)
|
|
248
|
-
|
|
249
|
-
def test_annotate_market_cost(self):
|
|
250
|
-
qs = self.audit.ledger_character_journal.all().annotate_market_cost()
|
|
251
|
-
for obj in qs:
|
|
252
|
-
self.assertTrue(
|
|
253
|
-
hasattr(obj, "market_cost"),
|
|
254
|
-
"Market costs annotation should be present",
|
|
255
|
-
)
|
|
256
|
-
self.assertEqual(obj.market_cost, 0)
|
|
257
|
-
|
|
258
|
-
def test_annotate_asset_cost(self):
|
|
259
|
-
qs = self.audit.ledger_character_journal.all().annotate_asset_cost()
|
|
260
|
-
for obj in qs:
|
|
261
|
-
self.assertTrue(
|
|
262
|
-
hasattr(obj, "asset_cost"),
|
|
263
|
-
"Asset costs annotation should be present",
|
|
264
|
-
)
|
|
265
|
-
self.assertEqual(obj.asset_cost, 0)
|
|
266
|
-
|
|
267
|
-
def test_annotate_traveling_cost(self):
|
|
268
|
-
qs = self.audit.ledger_character_journal.all().annotate_traveling_cost()
|
|
269
|
-
for obj in qs:
|
|
270
|
-
self.assertTrue(
|
|
271
|
-
hasattr(obj, "traveling_cost"),
|
|
272
|
-
"Traveling costs annotation should be present",
|
|
273
|
-
)
|
|
274
|
-
self.assertEqual(obj.traveling_cost, 0)
|
|
275
|
-
|
|
276
|
-
def test_annotate_production_cost(self):
|
|
277
|
-
qs = self.audit.ledger_character_journal.all().annotate_production_cost()
|
|
278
|
-
for obj in qs:
|
|
279
|
-
self.assertTrue(
|
|
280
|
-
hasattr(obj, "production_cost"),
|
|
281
|
-
"Production costs annotation should be present",
|
|
282
|
-
)
|
|
283
|
-
self.assertEqual(obj.production_cost, 0)
|
|
284
|
-
|
|
285
|
-
def test_annotate_skill_cost(self):
|
|
286
|
-
qs = self.audit.ledger_character_journal.all().annotate_skill_cost()
|
|
287
|
-
for obj in qs:
|
|
288
|
-
self.assertTrue(
|
|
289
|
-
hasattr(obj, "skill_cost"),
|
|
290
|
-
"Skill costs annotation should be present",
|
|
291
|
-
)
|
|
292
|
-
self.assertEqual(obj.skill_cost, 0)
|
|
293
|
-
|
|
294
|
-
def test_annotate_insurance_cost(self):
|
|
295
|
-
qs = self.audit.ledger_character_journal.all().annotate_insurance_cost()
|
|
296
|
-
for obj in qs:
|
|
297
|
-
self.assertTrue(
|
|
298
|
-
hasattr(obj, "insurance_cost"),
|
|
299
|
-
"Insurance costs annotation should be present",
|
|
300
|
-
)
|
|
301
|
-
self.assertEqual(obj.insurance_cost, 0)
|
|
302
|
-
|
|
303
|
-
def test_annotate_planetary_cost(self):
|
|
304
|
-
qs = self.audit.ledger_character_journal.all().annotate_planetary_cost()
|
|
305
|
-
for obj in qs:
|
|
306
|
-
self.assertTrue(
|
|
307
|
-
hasattr(obj, "planetary_cost"),
|
|
308
|
-
"Planetary costs annotation should be present",
|
|
309
|
-
)
|
|
310
|
-
self.assertEqual(obj.planetary_cost, 0)
|
|
311
|
-
|
|
312
|
-
def test_annotate_lp_cost(self):
|
|
313
|
-
qs = self.audit.ledger_character_journal.all().annotate_lp_cost()
|
|
314
|
-
for obj in qs:
|
|
315
|
-
self.assertTrue(
|
|
316
|
-
hasattr(obj, "lp_cost"),
|
|
317
|
-
"LP costs annotation should be present",
|
|
318
|
-
)
|
|
319
|
-
self.assertEqual(obj.lp_cost, 0)
|
|
320
158
|
|
|
159
|
+
class TestCharacterJournalManagerAggregate(LedgerTestCase):
|
|
160
|
+
"""Test aggregation methods in CharacterJournalManager."""
|
|
321
161
|
|
|
322
|
-
class TestCharacterJournalManagerAggregate(NoSocketsTestCase):
|
|
323
162
|
@classmethod
|
|
324
163
|
def setUpClass(cls):
|
|
325
164
|
super().setUpClass()
|
|
326
|
-
|
|
327
|
-
load_eveuniverse()
|
|
328
|
-
load_eveentity()
|
|
329
|
-
cls.audit = create_characteraudit_from_evecharacter(1001)
|
|
165
|
+
cls.audit = create_owner_from_user(user=cls.user)
|
|
330
166
|
|
|
331
167
|
cls.eve_character_first_party = EveEntity.objects.get(eve_id=1001)
|
|
332
168
|
cls.eve_character_second_party = EveEntity.objects.get(eve_id=1002)
|
|
333
169
|
|
|
334
170
|
cls.journal_entry = create_wallet_journal_entry(
|
|
335
|
-
|
|
171
|
+
owner_type="character",
|
|
336
172
|
character=cls.audit,
|
|
337
173
|
context_id=1,
|
|
338
174
|
entry_id=10,
|
|
@@ -355,18 +191,22 @@ class TestCharacterJournalManagerAggregate(NoSocketsTestCase):
|
|
|
355
191
|
)
|
|
356
192
|
|
|
357
193
|
def test_aggregate_bounty(self):
|
|
194
|
+
"""Test aggregating bounty income."""
|
|
358
195
|
result = self.audit.ledger_character_journal.all().aggregate_bounty()
|
|
359
196
|
self.assertEqual(result, 0)
|
|
360
197
|
|
|
361
198
|
def test_aggregate_costs(self):
|
|
199
|
+
"""Test aggregating costs."""
|
|
362
200
|
result = self.audit.ledger_character_journal.all().aggregate_costs()
|
|
363
201
|
self.assertEqual(result, 0)
|
|
364
202
|
|
|
365
203
|
def test_aggregate_miscellaneous(self):
|
|
204
|
+
"""Test aggregating miscellaneous income."""
|
|
366
205
|
result = self.audit.ledger_character_journal.all().aggregate_miscellaneous()
|
|
367
206
|
self.assertEqual(result, 1000.00)
|
|
368
207
|
|
|
369
208
|
def test_aggregate_ref_type(self):
|
|
209
|
+
"""Test aggregating by reference type."""
|
|
370
210
|
result = self.audit.ledger_character_journal.all().aggregate_ref_type(
|
|
371
211
|
ref_type=["player_donation"], income=True
|
|
372
212
|
)
|