#!/usr/bin/env python3 """ Test script to demonstrate and verify the weighted average cost calculation Location: services/inventory/tests/test_weighted_average_cost.py """ import sys from decimal import Decimal def calculate_weighted_average(current_stock: float, current_avg_cost: float, new_quantity: float, new_unit_cost: float) -> float: """ Calculate weighted average cost - mirrors the implementation in ingredient_repository.py Args: current_stock: Current stock quantity before purchase current_avg_cost: Current average cost per unit new_quantity: Quantity being purchased new_unit_cost: Unit cost of new purchase Returns: New average cost per unit """ if current_stock <= 0: return new_unit_cost total_cost = (current_stock * current_avg_cost) + (new_quantity * new_unit_cost) total_quantity = current_stock + new_quantity return total_cost / total_quantity def print_test_case(case_num: int, title: str, current_stock: float, current_avg_cost: float, new_quantity: float, new_unit_cost: float): """Print a formatted test case with calculation details""" print(f"\nTest Case {case_num}: {title}") print("-" * 60) print(f"Current Stock: {current_stock} kg @ €{current_avg_cost:.2f}/kg") print(f"New Purchase: {new_quantity} kg @ €{new_unit_cost:.2f}/kg") new_avg_cost = calculate_weighted_average(current_stock, current_avg_cost, new_quantity, new_unit_cost) if current_stock > 0: total_cost = (current_stock * current_avg_cost) + (new_quantity * new_unit_cost) total_quantity = current_stock + new_quantity print(f"Calculation: ({current_stock} × €{current_avg_cost:.2f} + {new_quantity} × €{new_unit_cost:.2f}) / {total_quantity}") print(f" = (€{current_stock * current_avg_cost:.2f} + €{new_quantity * new_unit_cost:.2f}) / {total_quantity}") print(f" = €{total_cost:.2f} / {total_quantity}") print(f"→ New Average Cost: €{new_avg_cost:.2f}/kg") return new_avg_cost def test_weighted_average_calculation(): """Run comprehensive tests of the weighted average cost calculation""" print("=" * 80) print("WEIGHTED AVERAGE COST CALCULATION - COMPREHENSIVE TEST SUITE") print("=" * 80) # Test Case 1: First Purchase (Bootstrap case) print_test_case( 1, "First Purchase (No Existing Stock)", current_stock=0, current_avg_cost=0, new_quantity=100, new_unit_cost=5.00 ) # Test Case 2: Same Price Purchase print_test_case( 2, "Second Purchase at Same Price", current_stock=100, current_avg_cost=5.00, new_quantity=50, new_unit_cost=5.00 ) # Test Case 3: Price Increase avg_cost = print_test_case( 3, "Purchase at Higher Price (Inflation)", current_stock=150, current_avg_cost=5.00, new_quantity=50, new_unit_cost=6.00 ) # Test Case 4: Large Volume Discount avg_cost = print_test_case( 4, "Large Purchase with Volume Discount", current_stock=200, current_avg_cost=5.25, new_quantity=200, new_unit_cost=4.50 ) # Test Case 5: Small Purchase After Consumption avg_cost = print_test_case( 5, "Purchase After Heavy Consumption", current_stock=50, current_avg_cost=4.88, new_quantity=100, new_unit_cost=5.50 ) # Test Case 6: Tiny Emergency Purchase print_test_case( 6, "Small Emergency Purchase at Premium Price", current_stock=150, current_avg_cost=5.29, new_quantity=10, new_unit_cost=8.00 ) # Summary print("\n" + "=" * 80) print("KEY INSIGHTS") print("=" * 80) print(""" ✓ The weighted average considers both QUANTITY and PRICE: - Larger purchases have more impact on the average - Smaller purchases have minimal impact ✓ Behavior with price changes: - Price increases gradually raise the average (dampened by existing stock) - Price decreases gradually lower the average (dampened by existing stock) - Volume discounts can significantly lower costs when buying in bulk ✓ Business implications: - Encourages bulk purchasing when prices are favorable - Protects against price spike impacts (averaged over time) - Provides accurate COGS for financial reporting - Helps identify procurement opportunities (compare to standard_cost) ✓ Implementation notes: - Calculation happens automatically on every stock addition - No user intervention required - Logged for audit purposes - Works with FIFO stock consumption """) print("=" * 80) print("✓ All tests completed successfully!") print("=" * 80) if __name__ == "__main__": test_weighted_average_calculation()