#!/usr/bin/env python3 """ Test script to demonstrate the updated _add_stock logic. This shows how duplicates are prevented by updating existing stock items. """ def simulate_add_stock(part_id, location_id, quantity, existing_stock_items): """ Simulate the add stock workflow. Args: part_id: Part ID location_id: Location ID quantity: Quantity to add existing_stock_items: List of existing stock items (for simulation) Returns: Tuple of (action, stock_id, old_stock, new_stock) """ # Find existing stock item for this part at this location existing = None for item in existing_stock_items: if item['part'] == part_id and item['location'] == location_id: existing = item break if existing: # Stock item exists - add to it stock_id = existing['pk'] old_stock = existing['quantity'] new_stock = old_stock + quantity # Update the existing item (simulate) existing['quantity'] = new_stock return ('updated', stock_id, old_stock, new_stock) else: # No existing stock - create new item new_item = { 'pk': len(existing_stock_items) + 100, # Simulate new ID 'part': part_id, 'location': location_id, 'quantity': quantity } existing_stock_items.append(new_item) return ('created', new_item['pk'], 0, quantity) print("Testing Add Stock Duplicate Prevention\n") print("=" * 60) # Simulate existing stock items stock_items = [] print("\nScenario 1: Adding stock when NO existing item exists") print("-" * 60) action, sid, old, new = simulate_add_stock(part_id=456, location_id=476, quantity=150, existing_stock_items=stock_items) print(f"Action: {action}") print(f"Stock ID: {sid}") print(f"Stock change: {old} -> {new} (+{new - old})") print(f"Total stock items: {len(stock_items)}") print(f"Expected: Created new stock item PASS" if action == 'created' else "FAIL") print("\n" + "=" * 60) print("\nScenario 2: Adding MORE stock to EXISTING item (should UPDATE, not duplicate)") print("-" * 60) print(f"Current stock items before scan: {len(stock_items)}") action, sid, old, new = simulate_add_stock(part_id=456, location_id=476, quantity=100, existing_stock_items=stock_items) print(f"Action: {action}") print(f"Stock ID: {sid}") print(f"Stock change: {old} -> {new} (+{new - old})") print(f"Total stock items: {len(stock_items)}") print(f"Expected: Updated existing item, NO duplicate PASS" if action == 'updated' and len(stock_items) == 1 else "FAIL") print("\n" + "=" * 60) print("\nScenario 3: Adding stock AGAIN (should continue to UPDATE)") print("-" * 60) print(f"Current stock items before scan: {len(stock_items)}") action, sid, old, new = simulate_add_stock(part_id=456, location_id=476, quantity=50, existing_stock_items=stock_items) print(f"Action: {action}") print(f"Stock ID: {sid}") print(f"Stock change: {old} -> {new} (+{new - old})") print(f"Total stock items: {len(stock_items)}") print(f"Expected: Updated existing item, still NO duplicate PASS" if action == 'updated' and len(stock_items) == 1 else "FAIL") print("\n" + "=" * 60) print("\nScenario 4: Adding same part to DIFFERENT location (should create new)") print("-" * 60) print(f"Current stock items before scan: {len(stock_items)}") action, sid, old, new = simulate_add_stock(part_id=456, location_id=999, quantity=75, existing_stock_items=stock_items) print(f"Action: {action}") print(f"Stock ID: {sid}") print(f"Stock change: {old} -> {new} (+{new - old})") print(f"Total stock items: {len(stock_items)}") print(f"Expected: Created new item for different location PASS" if action == 'created' and len(stock_items) == 2 else "FAIL") print("\n" + "=" * 60) print("\nFinal Summary:") print("-" * 60) for i, item in enumerate(stock_items, 1): print(f"Stock Item {i}: ID={item['pk']}, Part={item['part']}, Location={item['location']}, Qty={item['quantity']}") print("\nSUCCESS All scenarios demonstrate proper duplicate prevention!") print(" - Same part + same location = UPDATE existing") print(" - Same part + different location = CREATE new")