#!/usr/bin/env python3 import json import requests import time def test_mobile_app_formats(): """Test various data formats that mobile apps commonly send""" base_url = "http://192.168.0.103:8000" # Common mobile app data format issues test_cases = [ { "name": "Android app - nested data structure", "data": { "user": { "email": "testuser@example.com", "password": "SecurePass123" } } }, { "name": "iOS app - camelCase fields", "data": { "emailAddress": "testuser@example.com", "userPassword": "SecurePass123" } }, { "name": "React Native - mixed case", "data": { "Email": "testuser@example.com", "Password": "SecurePass123" } }, { "name": "Flutter app - snake_case", "data": { "user_email": "testuser@example.com", "user_password": "SecurePass123" } }, { "name": "Mobile app with extra fields", "data": { "email": "testuser@example.com", "password": "SecurePass123", "device_id": "mobile123", "app_version": "1.0.0", "platform": "android" } }, { "name": "Empty string fields (common mobile bug)", "data": { "email": "", "username": "", "password": "SecurePass123" } }, { "name": "Null fields (another common mobile bug)", "data": { "email": None, "username": None, "password": "SecurePass123" } }, { "name": "Correct format", "data": { "email": "testuser@example.com", "password": "SecurePass123" } } ] headers = { "Content-Type": "application/json", "Accept": "application/json", "User-Agent": "WomenSafetyApp/1.0 (Android)" } print("๐Ÿ“ฑ Testing mobile app data formats on 192.168.0.103") print("=" * 70) for i, test_case in enumerate(test_cases, 1): print(f"\n{i}. ๐Ÿงช {test_case['name']}") print("-" * 50) try: # Send request response = requests.post( f"{base_url}/api/v1/auth/login", json=test_case["data"], headers=headers, timeout=10 ) print(f"๐Ÿ“ค Request: {json.dumps(test_case['data'], indent=2)}") print(f"๐Ÿ“Š Status: {response.status_code}") # Analyze response if response.status_code == 200: print("โœ… SUCCESS - Login worked!") try: token_data = response.json() print(f"๐Ÿ” Token type: {token_data.get('token_type')}") except: pass elif response.status_code == 422: print("โŒ VALIDATION ERROR") try: error_data = response.json() if "detail" in error_data: detail = error_data["detail"] if isinstance(detail, list): print("๐Ÿ“ Validation issues:") for error in detail: field = error.get("loc", [])[-1] if error.get("loc") else "unknown" msg = error.get("msg", "Unknown error") input_val = error.get("input", "") print(f" โ€ข Field '{field}': {msg} (input: {input_val})") else: print(f"๐Ÿ“ Error: {detail}") except Exception as e: print(f"๐Ÿ“ Raw error: {response.text}") elif response.status_code == 401: print("๐Ÿ”’ AUTHENTICATION FAILED - Wrong credentials") else: print(f"๐Ÿšซ OTHER ERROR: {response.status_code}") print(f"๐Ÿ“ Response: {response.text[:200]}") except Exception as e: print(f"๐Ÿ’ฅ REQUEST ERROR: {str(e)}") time.sleep(0.5) print(f"\n{'='*70}") print("๐Ÿ“‹ SUMMARY:") print("โ€ข Check which format works correctly") print("โ€ข Compare with mobile app's actual request format") print("โ€ข Update mobile app to match working format") if __name__ == "__main__": test_mobile_app_formats()