85 lines
3.3 KiB
Python
85 lines
3.3 KiB
Python
"""
|
|
تستهای قرارداد مشتری: افزودن، ویرایش و نگهبان حذف (عدم حذف مشتری دارای سابقه).
|
|
"""
|
|
from django.test import TestCase
|
|
from django.urls import reverse
|
|
|
|
from admin_panel.models import Article, Customer, PhoneNumber
|
|
|
|
from .factories import make_customer, make_user
|
|
|
|
|
|
class CustomerCrudTests(TestCase):
|
|
|
|
def setUp(self):
|
|
self.user = make_user('csUser', superuser=True)
|
|
self.client.force_login(self.user)
|
|
|
|
def test_add_customer_creates_phones(self):
|
|
url = reverse('admin_panel:customersAdd')
|
|
response = self.client.post(url, {
|
|
'an_name': 'علی رضایی',
|
|
'an_address': 'تهران',
|
|
'installDate': '1400/01/01',
|
|
'idnCode': '1234567890',
|
|
'phone_titles': ['موبایل', 'ثابت', ''],
|
|
'phones': ['09120000000', '02112345678', ''],
|
|
})
|
|
|
|
self.assertIn(response.status_code, (200, 302))
|
|
customer = Customer.objects.get(name_family='علی رضایی')
|
|
self.assertEqual(customer.phone1, '09120000000')
|
|
self.assertEqual(customer.phone2, '02112345678')
|
|
# ردیف خالی نباید ذخیره شود
|
|
self.assertEqual(PhoneNumber.objects.filter(customer=customer).count(), 2)
|
|
|
|
def test_edit_customer_replaces_phones(self):
|
|
customer = make_customer('مشتری ویرایش', phones=['09120000001'])
|
|
url = reverse('admin_panel:customerEdit', kwargs={'c_id': customer.id})
|
|
|
|
response = self.client.post(url, {
|
|
'an_name': 'مشتری ویرایش شده',
|
|
'an_address': 'شیراز',
|
|
'installDate': '1401/02/03',
|
|
'idnCode': '999',
|
|
'laghv_bazdid': 'true',
|
|
'phone_titles': ['موبایل جدید'],
|
|
'phones': ['09120009999'],
|
|
})
|
|
self.assertIn(response.status_code, (200, 302))
|
|
|
|
customer.refresh_from_db()
|
|
self.assertEqual(customer.name_family, 'مشتری ویرایش شده')
|
|
self.assertTrue(customer.laghv_bazdid)
|
|
phones = list(PhoneNumber.objects.filter(customer=customer))
|
|
self.assertEqual(len(phones), 1)
|
|
self.assertEqual(phones[0].phone_number, '09120009999')
|
|
|
|
|
|
class CustomerDeleteGuardTests(TestCase):
|
|
|
|
def setUp(self):
|
|
self.user = make_user('delUser', superuser=True)
|
|
self.client.force_login(self.user)
|
|
|
|
def test_customer_without_history_is_deactivated(self):
|
|
customer = make_customer('مشتری خام')
|
|
url = reverse('admin_panel:customerDel', kwargs={'c_id': customer.id})
|
|
|
|
self.client.get(url)
|
|
|
|
customer.refresh_from_db()
|
|
# حذف نرم: رکورد باقی میماند ولی غیرفعال میشود
|
|
self.assertFalse(customer.is_active)
|
|
|
|
def test_customer_with_financial_history_is_never_deleted(self):
|
|
customer = make_customer('مشتری دارای سابقه')
|
|
Article.objects.create(customer=customer, debit=1000, credit=0, desc='سابقه مالی')
|
|
|
|
url = reverse('admin_panel:customerDel', kwargs={'c_id': customer.id})
|
|
self.client.get(url)
|
|
|
|
customer.refresh_from_db()
|
|
self.assertTrue(customer.is_active, msg="مشتری دارای سابقه مالی نباید حذف/غیرفعال شود.")
|
|
self.assertTrue(Customer.objects.filter(id=customer.id).exists())
|