#!/usr/bin/env python3 """ Gitea Webhook Ambassador Enhanced Feature Test Script """ import requests import json import time BASE_URL = "http://localhost:8000" ADMIN_SECRET_KEY = "admin-secret-key-change-in-production" def test_health_check(): """Test health check""" print("šŸ” Testing health check...") try: response = requests.get(f"{BASE_URL}/health") if response.status_code == 200: data = response.json() print(f"āœ… Health check succeeded: {data['status']}") print(f" Version: {data['version']}") print(f" Uptime: {data['uptime']}") print(f" Memory usage: {data['memory']}") return True else: print(f"āŒ Health check failed: {response.status_code}") return False except Exception as e: print(f"āŒ Health check exception: {e}") return False def test_login(): """Test login functionality""" print("\nšŸ” Testing login functionality...") try: # Test login API login_data = {"secret_key": ADMIN_SECRET_KEY} response = requests.post( f"{BASE_URL}/api/auth/login", json=login_data, headers={"Content-Type": "application/json"} ) if response.status_code == 200: data = response.json() token = data.get("token") print(f"āœ… Login succeeded, obtained JWT token") return token else: print(f"āŒ Login failed: {response.status_code} - {response.text}") return None except Exception as e: print(f"āŒ Login exception: {e}") return None def test_api_key_management(token): """Test API key management""" print("\nšŸ”‘ Testing API key management...") headers = {"Authorization": f"Bearer {token}"} try: # Create API key key_data = {"description": "Test API key"} response = requests.post( f"{BASE_URL}/api/keys", json=key_data, headers=headers ) if response.status_code == 200: data = response.json() api_key = data["key"] key_id = data["id"] print(f"āœ… API key created successfully: {api_key[:20]}...") # List API keys response = requests.get(f"{BASE_URL}/api/keys", headers=headers) if response.status_code == 200: keys_data = response.json() print(f"āœ… API keys listed successfully, total {len(keys_data['keys'])}") # Delete API key response = requests.delete(f"{BASE_URL}/api/keys/{key_id}", headers=headers) if response.status_code == 200: print(f"āœ… API key deleted successfully") return True else: print(f"āŒ API key deletion failed: {response.status_code}") return False else: print(f"āŒ API key listing failed: {response.status_code}") return False else: print(f"āŒ API key creation failed: {response.status_code} - {response.text}") return False except Exception as e: print(f"āŒ API key management exception: {e}") return False def test_project_management(token): """Test project management""" print("\nšŸ“ Testing project management...") headers = {"Authorization": f"Bearer {token}"} try: # Create project project_data = { "name": "Test Project", "jenkinsJob": "test-job", "giteaRepo": "test-owner/test-repo" } response = requests.post( f"{BASE_URL}/api/projects/", json=project_data, headers=headers ) if response.status_code == 200: data = response.json() project_id = data["id"] print(f"āœ… Project created successfully: {data['name']}") # List projects response = requests.get(f"{BASE_URL}/api/projects/", headers=headers) if response.status_code == 200: projects_data = response.json() print(f"āœ… Projects listed successfully, total {len(projects_data['projects'])}") # Delete project response = requests.delete(f"{BASE_URL}/api/projects/{project_id}", headers=headers) if response.status_code == 200: print(f"āœ… Project deleted successfully") return True else: print(f"āŒ Project deletion failed: {response.status_code}") return False else: print(f"āŒ Project listing failed: {response.status_code}") return False else: print(f"āŒ Project creation failed: {response.status_code} - {response.text}") return False except Exception as e: print(f"āŒ Project management exception: {e}") return False def test_stats(token): """Test statistics information""" print("\nšŸ“Š Testing statistics information...") headers = {"Authorization": f"Bearer {token}"} try: response = requests.get(f"{BASE_URL}/api/stats", headers=headers) if response.status_code == 200: data = response.json() print(f"āœ… Statistics retrieved successfully:") print(f" Total projects: {data['total_projects']}") print(f" API keys: {data['total_api_keys']}") print(f" Triggers today: {data['today_triggers']}") print(f" Successful triggers: {data['successful_triggers']}") return True else: print(f"āŒ Statistics retrieval failed: {response.status_code}") return False except Exception as e: print(f"āŒ Statistics exception: {e}") return False def test_logs(token): """Test log functionality""" print("\nšŸ“ Testing log functionality...") headers = {"Authorization": f"Bearer {token}"} try: response = requests.get(f"{BASE_URL}/api/logs", headers=headers) if response.status_code == 200: data = response.json() print(f"āœ… Logs retrieved successfully, total {len(data['logs'])} records") return True else: print(f"āŒ Log retrieval failed: {response.status_code}") return False except Exception as e: print(f"āŒ Log functionality exception: {e}") return False def main(): """Main test function""" print("šŸš€ Gitea Webhook Ambassador Enhanced Feature Test") print("=" * 50) # Test health check if not test_health_check(): print("āŒ Health check failed, service may not be running") return # Test login token = test_login() if not token: print("āŒ Login failed, cannot continue testing") return # Test features test_api_key_management(token) test_project_management(token) test_stats(token) test_logs(token) print("\n" + "=" * 50) print("šŸŽ‰ Enhanced feature test completed!") print("\nšŸ“‹ Implemented features:") print(" āœ… Web login interface") print(" āœ… Database storage for API keys") print(" āœ… Extended JWT validity (7 days)") print(" āœ… Frontend dashboard") print(" āœ… Project management") print(" āœ… API key management") print(" āœ… Log viewing") print(" āœ… Health status monitoring") print("\n🌐 Access URLs:") print(f" Login page: {BASE_URL}/login") print(f" Dashboard: {BASE_URL}/dashboard") if __name__ == "__main__": main()