MIF_E31232435/test_backend.py

125 lines
3.8 KiB
Python

#!/usr/bin/env python3
"""
Simple backend connectivity test using built-in urllib (dependency-free)
Run: python test_backend.py
"""
import json
from datetime import datetime
from urllib.request import Request, urlopen
from urllib.error import URLError, HTTPError
# Change this to your backend URL
BACKEND_URL = "http://127.0.0.1:5000" # Default to localhost for easier local checks
def make_request(url, method="GET", data=None, headers=None, timeout=5):
if headers is None:
headers = {}
req_data = None
if data is not None:
req_data = json.dumps(data).encode('utf-8')
if 'Content-Type' not in headers:
headers['Content-Type'] = 'application/json'
req = Request(url, data=req_data, headers=headers, method=method)
try:
with urlopen(req, timeout=timeout) as response:
status_code = response.status
body = response.read().decode('utf-8')
try:
json_data = json.loads(body)
except json.JSONDecodeError:
json_data = body
return status_code, json_data
except HTTPError as e:
body = e.read().decode('utf-8', errors='replace')
try:
json_data = json.loads(body)
except json.JSONDecodeError:
json_data = body
return e.code, json_data
except URLError as e:
raise RuntimeError(f"Connection failed: {e.reason}")
def test_health():
"""Test if backend is running"""
try:
print("\n[TEST 1] Health Check")
url = f"{BACKEND_URL}/health"
print(f"URL: {url}")
status, data = make_request(url)
print(f"Status: {status}")
print(f"Response: {data}")
return status == 200
except Exception as e:
print(f"[ERROR] Error: {e}")
return False
def test_get_products():
"""Test get products endpoint"""
try:
print("\n[TEST 2] Get Products")
url = f"{BACKEND_URL}/products"
print(f"URL: {url}")
status, data = make_request(url)
print(f"Status: {status}")
if isinstance(data, dict):
print(f"Total products: {data.get('total', 0)}")
if data.get('products'):
print(f"First product: {data['products'][0]}")
else:
print(f"Response: {data}")
return status == 200
except Exception as e:
print(f"[ERROR] Error: {e}")
return False
def test_create_product():
"""Test create product endpoint"""
try:
print("\n[TEST 3] Create Product")
url = f"{BACKEND_URL}/products"
print(f"URL: {url}")
payload = {
"name": f"Test Produk {datetime.now().strftime('%H%M%S')}",
"category": "Test",
"price": 10000,
"current_stock": 5
}
print(f"Payload: {json.dumps(payload, indent=2)}")
status, data = make_request(url, method="POST", data=payload)
print(f"Status: {status}")
print(f"Response: {data}")
return status in [201, 409]
except Exception as e:
print(f"[ERROR] Error: {e}")
return False
if __name__ == "__main__":
print("="*80)
print(f"Backend Connectivity Test - {BACKEND_URL}")
print("="*80)
tests = [
("Health Check", test_health()),
("Get Products", test_get_products()),
("Create Product", test_create_product()),
]
print("\n" + "="*80)
print("SUMMARY:")
for test_name, result in tests:
status = "[OK] PASS" if result else "[X] FAIL"
print(f" {status}: {test_name}")
print("="*80)
all_passed = all(result for _, result in tests)
if all_passed:
print("\n[OK] Backend is working correctly!")
else:
print("\n[X] Some tests failed. Check your backend connection.")