42 lines
2.1 KiB
Python
42 lines
2.1 KiB
Python
"""پروندهی کاربر در ادمین: ترتیب، CSV، و دسترسی."""
|
||
from django.test import TestCase
|
||
from django.utils import timezone
|
||
|
||
from accounts.models import LoginEvent, User
|
||
from payment.models import Order
|
||
|
||
|
||
class UserActivityTests(TestCase):
|
||
def setUp(self):
|
||
self.user = User.objects.create(phone='09121117001', name='علی')
|
||
LoginEvent.objects.create(event='login_ok', user_id=self.user.id, phone=self.user.phone, ip='203.0.113.9')
|
||
Order.objects.create(user_id=self.user.id, amount=45000, plan_title='بسته ۲۰', idempotency_key='k1', status='paid')
|
||
from django.contrib.auth.models import User as AuthUser
|
||
self.admin = AuthUser.objects.create_superuser('boss', 'b@x.ir', 'pw')
|
||
self.client.force_login(self.admin)
|
||
|
||
def test_page_lists_login_and_order(self):
|
||
r = self.client.get(f'/admin/accounts/user/{self.user.id}/activity/')
|
||
self.assertEqual(r.status_code, 200)
|
||
body = r.content.decode()
|
||
self.assertIn('ورود موفق', body)
|
||
self.assertIn('بسته ۲۰', body)
|
||
self.assertIn('45000 IRT', body)
|
||
|
||
def test_csv_has_bom_and_rows(self):
|
||
r = self.client.get(f'/admin/accounts/user/{self.user.id}/activity/?format=csv')
|
||
text = r.content.decode('utf-8')
|
||
self.assertTrue(text.startswith(''))
|
||
self.assertIn('203.0.113.9', text)
|
||
self.assertEqual(len(text.strip().splitlines()), 4) # سرستون + ثبتنام + ورود + سفارش
|
||
|
||
def test_view_only_staff_without_order_permission_is_refused(self):
|
||
from django.contrib.auth.models import Permission, User as AuthUser
|
||
s = AuthUser.objects.create_user('sup', 's@x.ir', 'pw', is_staff=True)
|
||
s.user_permissions.add(Permission.objects.get(codename='view_user', content_type__app_label='accounts'))
|
||
self.client.force_login(s)
|
||
self.assertEqual(self.client.get(f'/admin/accounts/user/{self.user.id}/activity/').status_code, 403)
|
||
|
||
def test_unknown_user_is_404(self):
|
||
self.assertEqual(self.client.get('/admin/accounts/user/999999/activity/').status_code, 404)
|