222 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			222 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # Test Data Scripts Documentation
 | |
| 
 | |
| This directory contains scripts for creating and managing test data for the Product Tracker application.
 | |
| 
 | |
| ## Scripts Overview
 | |
| 
 | |
| ### 1. `create_test_data.py` - Comprehensive Test Data Generator
 | |
| 
 | |
| Creates realistic test data including shops, products, and shopping events.
 | |
| 
 | |
| #### Basic Usage
 | |
| 
 | |
| ```bash
 | |
| # Create all test data (default: 30 events over 90 days)
 | |
| python create_test_data.py
 | |
| 
 | |
| # Create with custom parameters
 | |
| python create_test_data.py --events 50 --days 120
 | |
| 
 | |
| # Verbose output
 | |
| python create_test_data.py --verbose
 | |
| 
 | |
| # Dry run (see what would be created without creating it)
 | |
| python create_test_data.py --dry-run
 | |
| ```
 | |
| 
 | |
| #### Command Line Options
 | |
| 
 | |
| | Option | Description | Default |
 | |
| |--------|-------------|---------|
 | |
| | `--events N` | Number of shopping events to create | 30 |
 | |
| | `--days N` | Number of days back to generate events | 90 |
 | |
| | `--url URL` | API base URL | http://localhost:8000 |
 | |
| | `--shops-only` | Create only shops | False |
 | |
| | `--products-only` | Create only products | False |
 | |
| | `--events-only` | Create only shopping events (requires existing data) | False |
 | |
| | `--verbose`, `-v` | Verbose output with detailed progress | False |
 | |
| | `--dry-run` | Show what would be created without creating it | False |
 | |
| 
 | |
| #### Examples
 | |
| 
 | |
| ```bash
 | |
| # Create only shops
 | |
| python create_test_data.py --shops-only
 | |
| 
 | |
| # Create only products
 | |
| python create_test_data.py --products-only
 | |
| 
 | |
| # Create 100 shopping events using existing shops and products
 | |
| python create_test_data.py --events-only --events 100
 | |
| 
 | |
| # Create test data for the past 6 months with verbose output
 | |
| python create_test_data.py --events 60 --days 180 --verbose
 | |
| 
 | |
| # Preview what would be created without actually creating it
 | |
| python create_test_data.py --dry-run
 | |
| 
 | |
| # Use a different API URL
 | |
| python create_test_data.py --url http://localhost:3000
 | |
| ```
 | |
| 
 | |
| ### 2. `cleanup_test_data.py` - Data Cleanup Script
 | |
| 
 | |
| Safely removes all test data with confirmation prompts.
 | |
| 
 | |
| ```bash
 | |
| python cleanup_test_data.py
 | |
| ```
 | |
| 
 | |
| ## Data Structure
 | |
| 
 | |
| ### Shops (10 total)
 | |
| - **Whole Foods Market** (San Francisco)
 | |
| - **Safeway** (San Francisco) 
 | |
| - **Trader Joe's** (Berkeley)
 | |
| - **Berkeley Bowl** (Berkeley)
 | |
| - **Rainbow Product** (San Francisco)
 | |
| - **Mollie Stone's Market** (Palo Alto)
 | |
| - **Costco Wholesale** (San Mateo)
 | |
| - **Target** (Mountain View)
 | |
| - **Sprouts Farmers Market** (Sunnyvale)
 | |
| - **Lucky Supermarket** (San Jose)
 | |
| 
 | |
| ### Products (50+ items across 8 categories)
 | |
| 
 | |
| | Category | Items | Organic Options |
 | |
| |----------|-------|-----------------|
 | |
| | **Fruits** | 10 items | 5 organic |
 | |
| | **Vegetables** | 10 items | 5 organic |
 | |
| | **Dairy** | 7 items | 4 organic |
 | |
| | **Meat & Seafood** | 6 items | 3 organic |
 | |
| | **Pantry** | 10 items | 5 organic |
 | |
| | **Beverages** | 6 items | 3 organic |
 | |
| | **Frozen** | 5 items | 2 organic |
 | |
| | **Snacks** | 5 items | 3 organic |
 | |
| 
 | |
| ### Shopping Events
 | |
| - **Realistic dates**: Distributed over specified time period (default: 90 days)
 | |
| - **Smart quantities**: Appropriate amounts based on item type
 | |
| - **Category-based pricing**: Realistic price ranges per category
 | |
| - **Organic premiums**: 20-50% higher prices for organic items
 | |
| - **Random notes**: 30% of events include descriptive notes
 | |
| - **Varied trip sizes**: 2-8 items per shopping trip
 | |
| 
 | |
| ## Features
 | |
| 
 | |
| ### Smart Data Generation
 | |
| - **Realistic pricing**: Category-based price ranges with organic premiums
 | |
| - **Appropriate quantities**: Items sold by piece, weight, or volume as appropriate
 | |
| - **Temporal distribution**: Events spread realistically over time
 | |
| - **Shopping patterns**: Varied trip sizes and frequencies
 | |
| 
 | |
| ### Error Handling
 | |
| - **Graceful failures**: Script continues even if some items fail
 | |
| - **Network timeouts**: Reasonable timeout values for API calls
 | |
| - **Progress tracking**: Clear feedback on creation progress
 | |
| - **Connection testing**: Verifies API availability before starting
 | |
| 
 | |
| ### Flexible Options
 | |
| - **Partial creation**: Create only specific data types
 | |
| - **Custom parameters**: Adjust event count and date range
 | |
| - **Dry run mode**: Preview without creating data
 | |
| - **Verbose output**: Detailed progress information
 | |
| - **Custom API URLs**: Support for different backend configurations
 | |
| 
 | |
| ## Troubleshooting
 | |
| 
 | |
| ### Common Issues
 | |
| 
 | |
| 1. **Connection Error**
 | |
|    ```
 | |
|    ❌ Cannot connect to the API server at http://localhost:8000
 | |
|    ```
 | |
|    **Solution**: Make sure the backend server is running:
 | |
|    ```bash
 | |
|    cd backend
 | |
|    uvicorn main:app --reload
 | |
|    ```
 | |
| 
 | |
| 2. **Module Not Found Error**
 | |
|    ```
 | |
|    ModuleNotFoundError: No module named 'requests'
 | |
|    ```
 | |
|    **Solution**: Install dependencies:
 | |
|    ```bash
 | |
|    pip install -r requirements.txt
 | |
|    ```
 | |
| 
 | |
| 3. **Database Connection Error**
 | |
|    **Solution**: Ensure PostgreSQL is running and database exists:
 | |
|    ```bash
 | |
|    # Check if PostgreSQL is running
 | |
|    brew services list | grep postgresql
 | |
|    
 | |
|    # Start PostgreSQL if needed
 | |
|    brew services start postgresql
 | |
|    ```
 | |
| 
 | |
| 4. **Partial Data Creation**
 | |
|    If some items fail to create, the script will continue and report the final count.
 | |
|    Use `--verbose` to see detailed error messages.
 | |
| 
 | |
| ### Performance Tips
 | |
| 
 | |
| - **Large datasets**: For creating many events (100+), consider running in smaller batches
 | |
| - **Network issues**: Use `--verbose` to identify specific failures
 | |
| - **Database performance**: Ensure your database has adequate resources for bulk operations
 | |
| 
 | |
| ## Data Cleanup
 | |
| 
 | |
| To remove all test data:
 | |
| 
 | |
| ```bash
 | |
| python cleanup_test_data.py
 | |
| ```
 | |
| 
 | |
| This script will:
 | |
| 1. Show what data exists
 | |
| 2. Ask for confirmation before deletion
 | |
| 3. Handle foreign key constraints properly
 | |
| 4. Provide progress feedback
 | |
| 
 | |
| ## Integration with Application
 | |
| 
 | |
| After running the test data scripts:
 | |
| 
 | |
| 1. **Frontend**: Refresh the application to see new data
 | |
| 2. **API**: All endpoints will return the test data
 | |
| 3. **Database**: Data is persisted and will survive server restarts
 | |
| 
 | |
| The test data is designed to showcase all application features:
 | |
| - Multiple shops and locations
 | |
| - Diverse product categories
 | |
| - Realistic shopping patterns
 | |
| - Price variations and organic options
 | |
| - Historical data for analytics
 | |
| 
 | |
| ## Advanced Usage
 | |
| 
 | |
| ### Custom Data Sets
 | |
| 
 | |
| You can modify the data arrays in `create_test_data.py` to create custom test scenarios:
 | |
| 
 | |
| - Add more shops for specific regions
 | |
| - Include specialty product categories
 | |
| - Adjust price ranges for different markets
 | |
| - Create seasonal shopping patterns
 | |
| 
 | |
| ### Automated Testing
 | |
| 
 | |
| The scripts can be integrated into automated testing workflows:
 | |
| 
 | |
| ```bash
 | |
| # Setup test environment
 | |
| python create_test_data.py --events 10 --days 30
 | |
| 
 | |
| # Run tests
 | |
| pytest
 | |
| 
 | |
| # Cleanup
 | |
| python cleanup_test_data.py --force  # (if you add a --force option)
 | |
| ```  |