from decimal import Decimal from django.conf import settings from django.test import TestCase from rest_framework.test import APIClient from apps.accounts.models import Team, TeamMember, User from apps.billing.models import CreditAccount, CreditLedger class AuthApiTests(TestCase): def test_register_creates_user_team_member_credit_account_and_token(self): client = APIClient() response = client.post( "/api/auth/register/", { "username": "new-owner", "password": "strong-password", "email": "owner@example.com", "team_name": "Launch Team", }, format="json", ) self.assertEqual(response.status_code, 201) self.assertIn("token", response.data) user = User.objects.get(username="new-owner") team = Team.objects.get(name="Launch Team") self.assertEqual(team.owner, user) self.assertTrue(TeamMember.objects.filter(team=team, user=user, role=TeamMember.Role.OWNER).exists()) self.assertTrue(CreditAccount.objects.filter(team=team).exists()) def test_register_trial_grant_is_recorded_in_ledger(self): """开户赠送额度必须进流水:余额=赠送额,且有一条 balance_after=赠送额的 genesis 流水,账目从第一条起可对账。""" client = APIClient() client.post( "/api/auth/register/", {"username": "ledger-owner", "password": "strong-password", "team_name": "Ledger Team"}, format="json", ) team = Team.objects.get(name="Ledger Team") trial = Decimal(str(settings.DEFAULT_TRIAL_CREDITS)) account = CreditAccount.objects.get(team=team) self.assertEqual(account.balance, trial) genesis = CreditLedger.objects.filter(team=team, ledger_type=CreditLedger.Type.RECHARGE) self.assertEqual(genesis.count(), 1) self.assertEqual(genesis.first().amount, trial) self.assertEqual(genesis.first().balance_after, trial) # 流水终点 == 账户余额,可对账