refactor
This commit is contained in:
1 parent
6f36db63a1
commit
250cdbab7f
42 files changed
+96363
-11699
No files matched your search
@@ -0,0 +1,81 @@
|
||||
"""
|
||||
قرارداد (Contract) پکیج مدلها پس از بازنویسی.
|
||||
|
||||
هدف: تضمین اینکه تقسیم `admin_panel/models.py` به پکیج `admin_panel/models/`
|
||||
هیچ نامی را حذف نکرده، `app_label`ها ثابت ماندهاند و نام جدولهای دیتابیس
|
||||
دقیقاً همان مقادیر پیشین هستند (شرط لازم برای «No changes detected» در مایگریشنها).
|
||||
"""
|
||||
from django.apps import apps
|
||||
from django.test import SimpleTestCase
|
||||
|
||||
import admin_panel.models as models_pkg
|
||||
|
||||
# ۱۸ مدل اصلی فایل قدیمی models.py (پیش از بازنویسی)
|
||||
EXPECTED_MODELS = [
|
||||
'UserProfile',
|
||||
'Customer',
|
||||
'PhoneNumber',
|
||||
'StoreRoom',
|
||||
'StoreRoomOwner',
|
||||
'ProductCategory',
|
||||
'Product',
|
||||
'Factor',
|
||||
'ProductInStore',
|
||||
'ProductStockHistory',
|
||||
'StoreTransferRequest',
|
||||
'FactorIteam',
|
||||
'VisitQueue',
|
||||
'ArticleType',
|
||||
'Article',
|
||||
'Action',
|
||||
'Sarresid',
|
||||
'CacheTable',
|
||||
]
|
||||
|
||||
# نامهایی که کدهای دیگر از طریق star-import به آنها تکیه دارند
|
||||
# (مثلاً context_processor.py از `User` استفاده میکند که از همین نشتی میآید).
|
||||
LEAKED_NAMES = ['models', 'User', 'Sum', 'transaction', 'connection', 'ValidationError']
|
||||
|
||||
|
||||
class ModelsPackageContractTests(SimpleTestCase):
|
||||
|
||||
def test_all_models_importable_from_package(self):
|
||||
for name in EXPECTED_MODELS:
|
||||
self.assertTrue(
|
||||
hasattr(models_pkg, name),
|
||||
msg=f"مدل «{name}» از admin_panel.models قابل import نیست.",
|
||||
)
|
||||
|
||||
def test_models_are_registered_under_admin_panel_app(self):
|
||||
for name in EXPECTED_MODELS:
|
||||
model = getattr(models_pkg, name)
|
||||
self.assertEqual(
|
||||
model._meta.app_label, 'admin_panel',
|
||||
msg=f"app_label مدل {name} تغییر کرده است: {model._meta.app_label}",
|
||||
)
|
||||
|
||||
def test_db_table_names_are_unchanged_defaults(self):
|
||||
for name in EXPECTED_MODELS:
|
||||
model = getattr(models_pkg, name)
|
||||
expected = f"admin_panel_{name.lower()}"
|
||||
self.assertEqual(
|
||||
model._meta.db_table, expected,
|
||||
msg=f"نام جدول مدل {name} تغییر کرده است: {model._meta.db_table} != {expected}",
|
||||
)
|
||||
|
||||
def test_star_import_leak_names_still_present(self):
|
||||
"""
|
||||
رفتار star-import باید دقیقاً مانند فایل تکپارچهی قبلی حفظ شود؛ چراکه
|
||||
context_processor.py و چند ماژول دیگر به نشتی نامهایی مثل `User` و `models`
|
||||
وابستهاند.
|
||||
"""
|
||||
for name in LEAKED_NAMES:
|
||||
self.assertTrue(
|
||||
hasattr(models_pkg, name),
|
||||
msg=f"نام «{name}» که از طریق star-import منتشر میشد، حذف شده است.",
|
||||
)
|
||||
|
||||
def test_models_package_has_no_duplicate_registration(self):
|
||||
registered = [m for m in apps.get_app_config('admin_panel').get_models()]
|
||||
labels = [m.__name__ for m in registered]
|
||||
self.assertEqual(len(labels), len(set(labels)), msg=f"نام تکراری مدل: {labels}")
|
||||
Reference in new issue
Block a user