feat: finish phase 4 portal review fixes

This commit is contained in:
QiuSW
2026-07-03 16:02:29 +08:00
parent ecdbb7292e
commit ebb4782bb2
22 changed files with 3078 additions and 31 deletions
+98 -1
View File
@@ -3,6 +3,7 @@ from decimal import Decimal
from allauth.account.models import EmailAddress
from django.contrib.auth import get_user, get_user_model
from django.contrib.staticfiles import finders
from django.core import mail
from django.core.cache import cache
from django.test import Client, TestCase, override_settings
@@ -377,6 +378,43 @@ class PortalAccountFlowTests(TestCase):
self.assertContains(response, "R-OWN-PENDING-503")
self.assertNotContains(response, "R-OTHER-RECHARGE-503")
def test_recharge_records_paginate_more_than_page_size(self):
user = self.create_verified_user()
other_user = self.create_verified_user()
self.create_recharge_order(
other_user,
order_no="R-PAGE-OTHER-505",
amount="99.00",
points=990,
)
for index in range(55):
self.create_recharge_order(
user,
order_no=f"R-PAGE-{index:03d}",
amount="1.00",
points=10,
)
self.client.force_login(user)
first_page = self.client.get("/records/recharge")
second_page = self.client.get("/records/recharge?page=2")
self.assertEqual(first_page.status_code, 200)
self.assertEqual(first_page.context["records_total_count"], 55)
self.assertEqual(first_page.context["page_obj"].number, 1)
self.assertEqual(len(first_page.context["recharge_orders"]), 50)
self.assertContains(first_page, "共 55 条,每页 50 条")
self.assertContains(first_page, "R-PAGE-054")
self.assertNotContains(first_page, "R-PAGE-000")
self.assertNotContains(first_page, "R-PAGE-OTHER-505")
self.assertEqual(second_page.status_code, 200)
self.assertEqual(second_page.context["page_obj"].number, 2)
self.assertEqual(len(second_page.context["recharge_orders"]), 5)
self.assertContains(second_page, "R-PAGE-000")
self.assertNotContains(second_page, "R-PAGE-054")
self.assertNotContains(second_page, "R-PAGE-OTHER-505")
def test_usage_records_require_login_and_only_show_current_user_usage(self):
user = self.create_verified_user()
other_user = self.create_verified_user()
@@ -435,6 +473,59 @@ class PortalAccountFlowTests(TestCase):
self.assertNotContains(response, "other-alias")
self.assertNotContains(response, other_key.key_prefix)
def test_usage_records_paginate_more_than_page_size(self):
user = self.create_verified_user()
other_user = self.create_verified_user()
api_key, _raw_key = ApiKey.create_for_user(user, name="desktop")
other_key, _other_raw_key = ApiKey.create_for_user(other_user, name="other")
other_call = self.create_call_record(
other_user,
other_key,
alias="other-page-alias",
points_cost=99,
)
PointsLedger.objects.create(
user=other_user,
change_type=PointsLedger.ChangeType.CONSUME,
points_delta=-99,
balance_after=0,
ref_call=other_call,
)
for index in range(55):
call = self.create_call_record(
user,
api_key,
alias=f"title-page-{index:03d}",
points_cost=1,
)
PointsLedger.objects.create(
user=user,
change_type=PointsLedger.ChangeType.CONSUME,
points_delta=-1,
balance_after=100 - index,
ref_call=call,
)
self.client.force_login(user)
first_page = self.client.get("/records/usage")
second_page = self.client.get("/records/usage?page=2")
self.assertEqual(first_page.status_code, 200)
self.assertEqual(first_page.context["records_total_count"], 55)
self.assertEqual(first_page.context["page_obj"].number, 1)
self.assertEqual(len(first_page.context["usage_entries"]), 50)
self.assertContains(first_page, "共 55 条,每页 50 条")
self.assertContains(first_page, "title-page-054")
self.assertNotContains(first_page, "title-page-000")
self.assertNotContains(first_page, "other-page-alias")
self.assertEqual(second_page.status_code, 200)
self.assertEqual(second_page.context["page_obj"].number, 2)
self.assertEqual(len(second_page.context["usage_entries"]), 5)
self.assertContains(second_page, "title-page-000")
self.assertNotContains(second_page, "title-page-054")
self.assertNotContains(second_page, "other-page-alias")
def test_recharge_page_requires_login_and_shows_form(self):
user = self.create_verified_user()
UserWallet.objects.create(user=user, points_balance=25)
@@ -450,8 +541,14 @@ class PortalAccountFlowTests(TestCase):
self.assertEqual(response.context["balance"].points_balance, 25)
self.assertContains(response, "充值金额")
self.assertContains(response, "创建订单")
self.assertContains(response, "qrcode@1.5.4")
self.assertContains(response, "portal/vendor/bootstrap/bootstrap.min.css")
self.assertContains(response, "portal/vendor/qrcode/qrcode.js")
self.assertContains(response, "QRCode.toCanvas")
self.assertNotContains(response, "cdn.jsdelivr.net")
self.assertIsNotNone(
finders.find("portal/vendor/bootstrap/bootstrap.min.css")
)
self.assertIsNotNone(finders.find("portal/vendor/qrcode/qrcode.js"))
def test_recharge_page_post_creates_pending_order_without_crediting_wallet_or_ledger(self):
user = self.create_verified_user()