FLASK_APP / tests /test_three_phase_flask.py
pranit144's picture
Upload 97 files
e38de99 verified
"""
Test script for Three-Phase DCRM Flask API
==========================================
Tests the three-phase endpoint with 3 CSV files.
"""
import requests
import json
import sys
# Configuration
API_URL = "http://localhost:5000"
BREAKER_ID = "6926e63d4614721a79b7b24e"
CSV_FILE = "df3_final (1).csv" # We'll use the same file for all 3 phases for testing
def test_health_check():
"""Test the health check endpoint"""
print("Testing health check endpoint...")
try:
response = requests.get(f"{API_URL}/api/health")
if response.status_code == 200:
print("Health check passed!")
print(json.dumps(response.json(), indent=2))
return True
else:
print(f"Health check failed with status {response.status_code}")
return False
except requests.exceptions.ConnectionError:
print("❌ Cannot connect to API. Make sure the server is running!")
print(" Run: python dcrm_flask_api.py")
return False
except Exception as e:
print(f"❌ Error: {e}")
return False
def test_three_phase_analysis():
"""Test the three-phase analysis endpoint"""
print(f"\nTesting three-phase analysis endpoint...")
try:
# Open the CSV file 3 times (for R, Y, B phases)
with open(CSV_FILE, 'rb') as fileR, \
open(CSV_FILE, 'rb') as fileY, \
open(CSV_FILE, 'rb') as fileB:
files = {
'fileR': (CSV_FILE, fileR, 'text/csv'),
'fileY': (CSV_FILE, fileY, 'text/csv'),
'fileB': (CSV_FILE, fileB, 'text/csv')
}
data = {
'operator': 'Test Engineer'
}
url = f"{API_URL}/api/circuit-breakers/{BREAKER_ID}/tests/upload-three-phase"
print(f"Uploading to: {url}")
print("Processing 3 phases (this may take 90-180 seconds)...")
response = requests.post(url, files=files, data=data, timeout=300)
if response.status_code == 200:
print("Three-phase analysis completed successfully!")
# Parse response
result = response.json()
# Display key results
print("\nKey Results:")
print(f" Breaker ID: {result.get('breakerId')}")
print(f" Overall Health Score: {result.get('healthScore')}/100")
print(f" Operator: {result.get('operator')}")
print(f" Created At: {result.get('createdAt')}")
# Check each phase
for phase in ['r', 'y', 'b']:
if phase in result:
phase_data = result[phase]
print(f"\n {phase.upper()} Phase:")
print(f" Health Score: {phase_data.get('healthScore')}/100")
print(f" CBHI Score: {phase_data.get('cbhi', {}).get('score')}/100")
print(f" Findings: {phase_data.get('findings')}")
# Check waveform structure
waveform = phase_data.get('waveform', [])
if waveform:
first_point = waveform[0]
required_fields = ['time', 'current', 'resistance', 'travel', 'shap',
'close_coil', 'trip_coil_1', 'trip_coil_2']
has_all_fields = all(field in first_point for field in required_fields)
print(f" Waveform fields: {'Complete' if has_all_fields else 'Missing fields'}")
if has_all_fields:
print(f" Sample: time={first_point['time']}, current={first_point['current']}, "
f"close_coil={first_point['close_coil']}")
# Check effectAnalysis
ai_verdict = phase_data.get('aiVerdict', {})
effect_analysis = ai_verdict.get('effectAnalysis', {})
has_performance_gains = 'performanceGains' in effect_analysis
has_risk_mitigation = 'riskMitigation' in effect_analysis
print(f" Performance Gains: {'Present' if has_performance_gains else 'Missing'}")
print(f" Risk Mitigation: {'Present' if has_risk_mitigation else 'Missing'}")
# Save full response
output_file = "test_three_phase_response.json"
with open(output_file, 'w', encoding='utf-8') as f:
json.dump(result, f, indent=2, ensure_ascii=False)
print(f"\nFull response saved to: {output_file}")
return True
else:
print(f"Analysis failed with status {response.status_code}")
print(f" Error: {response.text}")
return False
except FileNotFoundError:
print(f"CSV file not found: {CSV_FILE}")
print(" Make sure the file exists in the current directory")
return False
except requests.exceptions.Timeout:
print("Request timeout. Analysis took too long.")
return False
except Exception as e:
print(f"Error: {e}")
import traceback
traceback.print_exc()
return False
def main():
"""Run all tests"""
print("=" * 60)
print("Three-Phase DCRM Flask API Test Suite")
print("=" * 60)
# Test 1: Health check
if not test_health_check():
print("\nHealth check failed. Stopping tests.")
sys.exit(1)
# Test 2: Three-phase analysis
if not test_three_phase_analysis():
print("\nThree-phase analysis test failed.")
sys.exit(1)
print("\n" + "=" * 60)
print("All tests completed successfully!")
print("=" * 60)
if __name__ == "__main__":
main()