This commit is contained in:
javad committed 2026-10-10 14:21:04 +03:30
1 parent 250cdbab7f
commit 5c6069c3ef
87 files changed
+29209 -3697

No files matched your search

+7
View File
@@ -43,6 +43,13 @@ def make_user(username=None, *, password='TestPass!2345', superuser=False,
return user
def login_superuser(client, username):
"""ساخت کاربر سوپریوزر و ورود آن به کلاینت تست؛ کاربر را برمی‌گرداند."""
user = make_user(username, superuser=True)
client.force_login(user)
return user
def make_store(name=None, *, viewers=(), owner=None):
"""
ساخت انبار.
+47 -3
View File
@@ -6,14 +6,13 @@ from django.urls import reverse
from admin_panel.models import Article, Customer, PhoneNumber
from .factories import make_customer, make_user
from .factories import login_superuser, make_customer, make_user
class CustomerCrudTests(TestCase):
def setUp(self):
self.user = make_user('csUser', superuser=True)
self.client.force_login(self.user)
self.user = login_superuser(self.client, 'csUser')
def test_add_customer_creates_phones(self):
url = reverse('admin_panel:customersAdd')
@@ -56,6 +55,51 @@ class CustomerCrudTests(TestCase):
self.assertEqual(phones[0].phone_number, '09120009999')
class InactiveCustomerHiddenTests(TestCase):
"""مشتری غیرفعال (is_active=False) در فهرست و در جستجو دیده نمی‌شود."""
def setUp(self):
self.user = login_superuser(self.client, 'hideUser')
self.active = make_customer('خطیبی فعال', phones=['09120000041'])
self.inactive = make_customer('خطیبی غیرفعال', is_active=False,
phones=['09120000042'])
# جستجوی تلفن از ستون phone1 می‌خواند (فیلد قدیمی مشتری).
Customer.objects.filter(pk=self.active.pk).update(phone1='09120000041')
Customer.objects.filter(pk=self.inactive.pk).update(phone1='09120000042')
def test_inactive_absent_from_default_listing(self):
html = self.client.get(reverse('admin_panel:customers')).content.decode('utf-8')
self.assertIn('خطیبی فعال', html)
self.assertNotIn('خطیبی غیرفعال', html)
def test_inactive_absent_from_search_by_name(self):
html = self.client.get(
reverse('admin_panel:customers'),
{'searchVal': 'خطیبی', 'searchOn': 'name'},
).content.decode('utf-8')
self.assertIn('خطیبی فعال', html)
self.assertNotIn('خطیبی غیرفعال', html)
def test_inactive_absent_from_search_by_phone(self):
html = self.client.get(
reverse('admin_panel:customers'),
{'searchVal': '0912000004', 'searchOn': 'phone'},
).content.decode('utf-8')
self.assertIn('09120000041', html)
self.assertNotIn('09120000042', html)
def test_inactive_absent_from_path_search_view(self):
# مسیر <slug:> فقط نویسه‌های لاتین می‌پذیرد.
make_customer('khatibi-active')
make_customer('khatibi-inactive', is_active=False)
html = self.client.get(
reverse('admin_panel:customersSearch',
kwargs={'searchVal': 'khatibi', 'searchOn': 'name'}),
).content.decode('utf-8')
self.assertIn('khatibi-active', html)
self.assertNotIn('khatibi-inactive', html)
class CustomerDeleteGuardTests(TestCase):
def setUp(self):
+1818
View File
File diff suppressed because it is too large. Load diff
+20 -1
View File
@@ -7,7 +7,7 @@
from django.test import SimpleTestCase
from django.urls import reverse
# snapshot قطعی نام‌های مسیرهای اپ admin_panel (۶۲ مسیر)
# snapshot قطعی نام‌های مسیرهای اپ admin_panel (۷۲ مسیر)
EXPECTED_URL_NAMES = {
'index',
'p_login',
@@ -73,6 +73,18 @@ EXPECTED_URL_NAMES = {
'update_check_info',
'addSarresid',
'pardakhtNesiye',
'sms_settings',
'sms_templates',
'sms_template_edit',
'sms_customer_toggle',
'sms_primary_toggle',
'sms_send_custom',
'sms_queue',
'sms_queue_retry',
'sms_queue_approve',
'sms_queue_delete',
'sms_queue_bulk',
'sms_queue_empty',
}
# مسیرهایی که آرگومان می‌گیرند: نام -> kwargs نمونه
@@ -111,6 +123,13 @@ PARAMETERIZED = {
'update_check_info': {'sarresid_id': 1},
'addSarresid': {'cs_id': 1},
'pardakhtNesiye': {'cs_id': 1},
'sms_template_edit': {'t_id': 1},
'sms_customer_toggle': {'c_id': 1},
'sms_primary_toggle': {'c_id': 1},
'sms_send_custom': {'c_id': 1},
'sms_queue_retry': {'q_id': 1},
'sms_queue_approve': {'q_id': 1},
'sms_queue_delete': {'q_id': 1},
}
+30 -2
View File
@@ -14,8 +14,8 @@ from django.test import TestCase
from django.urls import reverse
from django.utils import timezone
from admin_panel.models import (Action, Article, Factor, Sarresid,
StoreTransferRequest)
from admin_panel.models import (Action, Article, Factor, PhoneNumber, Sarresid,
SMSQueue, SMSTemplate, StoreTransferRequest)
from .factories import (make_category, make_customer, make_product, make_store,
make_user, stock_in)
@@ -67,6 +67,18 @@ class ViewSmokeTests(TestCase):
product=cls.product, quantity=1, requester=cls.user,
)
# --- پیامک ---
cls.phone = PhoneNumber.objects.create(
customer=cls.customer, title='موبایل', phone_number='09120000000',
)
cls.customer.sms_primary_phones = '+989120000000'
cls.customer.save(update_fields=['sms_primary_phones'])
cls.sms_template = SMSTemplate.objects.get(sms_type='welcome')
cls.sms_queue = SMSQueue.objects.create(
customer=cls.customer, sms_type='welcome',
phone_number='+989120000000', message='دودی', status='failed',
)
def setUp(self):
self.client.force_login(self.user)
# در صورت خطای سرور، استثنا را نگه می‌داریم تا کد وضعیت ۵۰۰ را ببینیم
@@ -198,6 +210,22 @@ class ViewSmokeTests(TestCase):
}),
('api_check_status_inquiry', {}, GET, None),
('api_check_sabt_inquiry', {}, GET, None),
# --- پیامک ---
('sms_settings', {}, GET, None),
('sms_templates', {}, GET, None),
('sms_template_edit', {'t_id': self.sms_template.id}, POST, {
'title': 'عنوان دودی', 'text': 'متن دودی',
'timing_value': '2',
}),
('sms_customer_toggle', {'c_id': c.id}, POST, {
'sms_type': 'welcome', 'is_enabled': 'false',
}),
('sms_primary_toggle', {'c_id': c.id}, POST, {
'phone': '09120000000', 'is_primary': 'true',
}),
('sms_send_custom', {'c_id': c.id}, POST, {'text': 'پیامک دودی'}),
('sms_queue', {}, GET, None),
('sms_queue_retry', {'q_id': self.sms_queue.id}, POST, None),
# در انتهای لیست: خروج از حساب، چون بعد از آن تمام درخواست‌ها بی‌اعتبار می‌شوند
('p_logout', {}, GET, None),
]