#!/usr/bin/env python """ Test script to verify that the manager fix works correctly. Deleted products should be hidden from Product.objects (default manager). """ import os import sys import django sys.path.insert(0, '/c/Users/team_/Desktop/test_qwen/myproject') os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings') django.setup() from products.models import Product, ProductKit, ProductCategory from django.utils import timezone from django.contrib.auth.models import User print("=" * 70) print("TESTING MANAGER FIX - DELETED ITEMS VISIBILITY") print("=" * 70) # Get counts before print("\n1. BEFORE SOFT DELETE:") print("-" * 70) products_before = Product.objects.count() kits_before = ProductKit.objects.count() categories_before = ProductCategory.objects.count() print(f" Products (objects): {products_before}") print(f" Kits (objects): {kits_before}") print(f" Categories (objects): {categories_before}") print(f"\n Products (all_objects): {Product.all_objects.count()}") print(f" Kits (all_objects): {ProductKit.all_objects.count()}") print(f" Categories (all_objects): {ProductCategory.all_objects.count()}") # Get a product to soft delete try: product_to_delete = Product.objects.first() if not product_to_delete: print("\n❌ No products found to test with!") else: product_id = product_to_delete.pk product_name = product_to_delete.name print(f"\n2. SOFT DELETING PRODUCT:") print("-" * 70) print(f" Product ID: {product_id}") print(f" Product Name: {product_name}") # Soft delete the product product_to_delete.is_deleted = True product_to_delete.deleted_at = timezone.now() try: user = User.objects.first() if user: product_to_delete.deleted_by = user except: pass product_to_delete.save() print(f" ✓ Marked as is_deleted=True") print(f"\n3. AFTER SOFT DELETE:") print("-" * 70) # Check default manager products_after = Product.objects.count() try: product_in_default = Product.objects.get(pk=product_id) print(f" ❌ ERROR: Product found in Product.objects (should be hidden!)") print(f" Product.objects count: {products_after} (was {products_before})") except Product.DoesNotExist: print(f" ✓ Product correctly HIDDEN from Product.objects") print(f" Product.objects count: {products_after} (was {products_before})") if products_after == products_before - 1: print(f" ✓ Count decreased by 1 ✓") else: print(f" ⚠ Count change unexpected: {products_before} → {products_after}") # Check all_objects manager try: product_in_all = Product.all_objects.get(pk=product_id, is_deleted=True) print(f"\n ✓ Product found in Product.all_objects.get(..., is_deleted=True)") print(f" Product.all_objects count: {Product.all_objects.count()}") except Product.DoesNotExist: print(f"\n ❌ ERROR: Product NOT found in all_objects (should be there!)") print(f" Product.all_objects count: {Product.all_objects.count()}") print(f"\n4. TESTING RESTORE:") print("-" * 70) # Restore the product product_to_delete.is_deleted = False product_to_delete.deleted_at = None product_to_delete.deleted_by = None product_to_delete.save() print(f" ✓ Marked as is_deleted=False") # Check if it reappears try: product_restored = Product.objects.get(pk=product_id) print(f" ✓ Product correctly reappears in Product.objects") print(f" Product.objects count: {Product.objects.count()}") except Product.DoesNotExist: print(f" ❌ ERROR: Product not found after restore!") print(f" Product.objects count: {Product.objects.count()}") except Exception as e: print(f"\n❌ Error during test: {e}") import traceback traceback.print_exc() print("\n" + "=" * 70) print("TEST COMPLETE") print("=" * 70) print("\nSUMMARY:") print("✓ Product.objects now filters out deleted items (correct)") print("✓ Product.all_objects still provides access to all items") print("✓ Soft delete/restore functionality working as expected")