Initial commit: Django inventory system
This commit is contained in:
170
myproject/test_sku_generation.py
Normal file
170
myproject/test_sku_generation.py
Normal file
@@ -0,0 +1,170 @@
|
||||
"""
|
||||
Тестовый скрипт для проверки генерации артикулов
|
||||
"""
|
||||
import os
|
||||
import django
|
||||
|
||||
# Настройка Django
|
||||
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
|
||||
django.setup()
|
||||
|
||||
from products.models import Product, ProductKit, ProductCategory, ProductVariantGroup, SKUCounter
|
||||
|
||||
def test_sku_generation():
|
||||
print("=" * 80)
|
||||
print("ТЕСТИРОВАНИЕ СИСТЕМЫ ГЕНЕРАЦИИ АРТИКУЛОВ")
|
||||
print("=" * 80)
|
||||
|
||||
# Проверяем текущее состояние счетчиков
|
||||
print("\n1. Текущее состояние счетчиков:")
|
||||
print("-" * 80)
|
||||
for counter in SKUCounter.objects.all():
|
||||
print(f" {counter.get_counter_type_display()}: {counter.current_value}")
|
||||
|
||||
if not SKUCounter.objects.exists():
|
||||
print(" Счетчики еще не созданы. Они будут созданы при первом создании товара.")
|
||||
|
||||
# Создаем тестовую категорию
|
||||
print("\n2. Создание тестовой категории:")
|
||||
print("-" * 80)
|
||||
category, created = ProductCategory.objects.get_or_create(
|
||||
name="Розы",
|
||||
defaults={'slug': 'rozy'}
|
||||
)
|
||||
print(f" Категория 'Розы' {'создана' if created else 'уже существует'}")
|
||||
|
||||
# Тест 1: Простой товар без группы вариантов
|
||||
print("\n3. Тест 1: Простой товар без суффикса:")
|
||||
print("-" * 80)
|
||||
product1 = Product(
|
||||
name="Роза красная",
|
||||
category=category,
|
||||
cost_price=100,
|
||||
sale_price=200
|
||||
)
|
||||
product1.save()
|
||||
print(f" Товар: {product1.name}")
|
||||
print(f" Артикул: {product1.sku}")
|
||||
print(f" Суффикс варианта: {product1.variant_suffix or 'нет'}")
|
||||
|
||||
# Тест 2: Товар с размером в названии
|
||||
print("\n4. Тест 2: Товар с размером в названии (автопарсинг):")
|
||||
print("-" * 80)
|
||||
product2 = Product(
|
||||
name="Роза Freedom 50см",
|
||||
category=category,
|
||||
cost_price=150,
|
||||
sale_price=300
|
||||
)
|
||||
product2.save()
|
||||
print(f" Товар: {product2.name}")
|
||||
print(f" Артикул: {product2.sku}")
|
||||
print(f" Суффикс варианта: {product2.variant_suffix or 'нет'}")
|
||||
|
||||
# Тест 3: Товар с другим размером
|
||||
print("\n5. Тест 3: Товар с другим размером:")
|
||||
print("-" * 80)
|
||||
product3 = Product(
|
||||
name="Роза Freedom 60 см",
|
||||
category=category,
|
||||
cost_price=180,
|
||||
sale_price=350
|
||||
)
|
||||
product3.save()
|
||||
print(f" Товар: {product3.name}")
|
||||
print(f" Артикул: {product3.sku}")
|
||||
print(f" Суффикс варианта: {product3.variant_suffix or 'нет'}")
|
||||
|
||||
# Тест 4: Товар с буквенным размером
|
||||
print("\n6. Тест 4: Товар с буквенным размером:")
|
||||
print("-" * 80)
|
||||
product4 = Product(
|
||||
name="Коробка подарочная размер M",
|
||||
category=category,
|
||||
cost_price=50,
|
||||
sale_price=100
|
||||
)
|
||||
product4.save()
|
||||
print(f" Товар: {product4.name}")
|
||||
print(f" Артикул: {product4.sku}")
|
||||
print(f" Суффикс варианта: {product4.variant_suffix or 'нет'}")
|
||||
|
||||
# Тест 5: Товар с ручным указанием суффикса
|
||||
print("\n7. Тест 5: Товар с ручным указанием суффикса:")
|
||||
print("-" * 80)
|
||||
product5 = Product(
|
||||
name="Лента атласная красная",
|
||||
category=category,
|
||||
cost_price=20,
|
||||
sale_price=40,
|
||||
variant_suffix="RED"
|
||||
)
|
||||
product5.save()
|
||||
print(f" Товар: {product5.name}")
|
||||
print(f" Артикул: {product5.sku}")
|
||||
print(f" Суффикс варианта: {product5.variant_suffix or 'нет'}")
|
||||
|
||||
# Тест 6: Комплект
|
||||
print("\n8. Тест 6: Комплект (букет):")
|
||||
print("-" * 80)
|
||||
kit1 = ProductKit(
|
||||
name="Букет Романтика",
|
||||
slug="buket-romantika",
|
||||
category=category,
|
||||
pricing_method='fixed',
|
||||
fixed_price=1500
|
||||
)
|
||||
kit1.save()
|
||||
print(f" Комплект: {kit1.name}")
|
||||
print(f" Артикул: {kit1.sku}")
|
||||
|
||||
# Тест 7: Еще один комплект
|
||||
print("\n9. Тест 7: Еще один комплект:")
|
||||
print("-" * 80)
|
||||
kit2 = ProductKit(
|
||||
name="Букет Весна",
|
||||
slug="buket-vesna",
|
||||
category=category,
|
||||
pricing_method='fixed',
|
||||
fixed_price=2000
|
||||
)
|
||||
kit2.save()
|
||||
print(f" Комплект: {kit2.name}")
|
||||
print(f" Артикул: {kit2.sku}")
|
||||
|
||||
# Проверяем финальное состояние счетчиков
|
||||
print("\n10. Финальное состояние счетчиков:")
|
||||
print("-" * 80)
|
||||
for counter in SKUCounter.objects.all():
|
||||
print(f" {counter.get_counter_type_display()}: {counter.current_value}")
|
||||
|
||||
# Показываем все созданные товары
|
||||
print("\n11. Все созданные тестовые товары:")
|
||||
print("-" * 80)
|
||||
print(f" {'Название':<40} {'Артикул':<20} {'Суффикс':<10}")
|
||||
print(" " + "-" * 70)
|
||||
for p in Product.objects.filter(name__startswith=('Роза', 'Коробка', 'Лента')):
|
||||
print(f" {p.name:<40} {p.sku:<20} {p.variant_suffix or '-':<10}")
|
||||
|
||||
print("\n12. Все созданные тестовые комплекты:")
|
||||
print("-" * 80)
|
||||
print(f" {'Название':<40} {'Артикул':<20}")
|
||||
print(" " + "-" * 60)
|
||||
for k in ProductKit.objects.filter(name__startswith='Букет'):
|
||||
print(f" {k.name:<40} {k.sku:<20}")
|
||||
|
||||
print("\n" + "=" * 80)
|
||||
print("ТЕСТИРОВАНИЕ ЗАВЕРШЕНО!")
|
||||
print("=" * 80)
|
||||
|
||||
# Предложение удалить тестовые данные
|
||||
print("\nВнимание: Тестовые данные НЕ удалены автоматически.")
|
||||
print("Чтобы удалить их, выполните:")
|
||||
print(" python manage.py shell")
|
||||
print(" from products.models import Product, ProductKit, ProductCategory")
|
||||
print(" Product.objects.filter(name__startswith=('Роза', 'Коробка', 'Лента')).delete()")
|
||||
print(" ProductKit.objects.filter(name__startswith='Букет').delete()")
|
||||
print(" ProductCategory.objects.filter(name='Розы').delete()")
|
||||
|
||||
if __name__ == '__main__':
|
||||
test_sku_generation()
|
||||
Reference in New Issue
Block a user