46 lines
1.7 KiB
Python
46 lines
1.7 KiB
Python
from django.contrib.auth import get_user_model
|
|
from django.test import TestCase
|
|
from django.urls import reverse
|
|
|
|
|
|
class ProfileTests(TestCase):
|
|
"""验证资料显式创建、认证保护和更新边界。"""
|
|
|
|
def setUp(self):
|
|
self.user = get_user_model().objects.create_user(
|
|
username="alice",
|
|
password="safe-pass-123",
|
|
)
|
|
|
|
def test_profile_requires_login(self):
|
|
response = self.client.get(reverse("accounts:profile"))
|
|
self.assertEqual(response.status_code, 302)
|
|
|
|
def test_profile_is_created_and_updated(self):
|
|
self.client.force_login(self.user)
|
|
response = self.client.post(
|
|
reverse("accounts:profile"),
|
|
{"display_name": "爱丽丝", "timezone": "Asia/Shanghai"},
|
|
)
|
|
self.assertRedirects(response, reverse("accounts:profile"))
|
|
self.user.refresh_from_db()
|
|
self.assertEqual(self.user.profile.display_name, "爱丽丝")
|
|
|
|
def test_profile_rejects_unknown_timezone(self):
|
|
self.client.force_login(self.user)
|
|
response = self.client.post(
|
|
reverse("accounts:profile"),
|
|
{"display_name": "爱丽丝", "timezone": "Unknown/Timezone"},
|
|
)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertContains(response, "选择一个有效的选项")
|
|
|
|
def test_login_and_post_logout_flow(self):
|
|
login_response = self.client.post(
|
|
reverse("accounts:login"),
|
|
{"username": "alice", "password": "safe-pass-123"},
|
|
)
|
|
self.assertRedirects(login_response, reverse("agent_runtime:run-list"))
|
|
logout_response = self.client.post(reverse("accounts:logout"))
|
|
self.assertRedirects(logout_response, reverse("accounts:login"))
|