Files
moreminimore-marketing/backend/test/test_facebook_writer.py
Kunthawat Greethong c35fa52117 Base code
2026-01-08 22:39:53 +07:00

232 lines
8.4 KiB
Python

"""Test script for Facebook Writer API endpoints."""
import requests
import json
from typing import Dict, Any
# Base URL for the API
BASE_URL = "http://localhost:8000"
def test_health_check():
"""Test the health check endpoint."""
try:
response = requests.get(f"{BASE_URL}/api/facebook-writer/health")
print(f"Health Check: {response.status_code}")
if response.status_code == 200:
print(f"Response: {response.json()}")
return response.status_code == 200
except Exception as e:
print(f"Health check failed: {e}")
return False
def test_get_tools():
"""Test getting available tools."""
try:
response = requests.get(f"{BASE_URL}/api/facebook-writer/tools")
print(f"Get Tools: {response.status_code}")
if response.status_code == 200:
data = response.json()
print(f"Available tools: {data['total_count']}")
for tool in data['tools'][:3]: # Show first 3 tools
print(f" - {tool['name']}: {tool['description']}")
return response.status_code == 200
except Exception as e:
print(f"Get tools failed: {e}")
return False
def test_generate_post():
"""Test Facebook post generation."""
payload = {
"business_type": "Fitness coach",
"target_audience": "Fitness enthusiasts aged 25-35",
"post_goal": "Increase engagement",
"post_tone": "Inspirational",
"include": "Success story, workout tips",
"avoid": "Generic advice",
"media_type": "Image",
"advanced_options": {
"use_hook": True,
"use_story": True,
"use_cta": True,
"use_question": True,
"use_emoji": True,
"use_hashtags": True
}
}
try:
response = requests.post(
f"{BASE_URL}/api/facebook-writer/post/generate",
json=payload,
headers={"Content-Type": "application/json"}
)
print(f"Generate Post: {response.status_code}")
if response.status_code == 200:
data = response.json()
if data['success']:
print(f"Post generated successfully!")
print(f"Content preview: {data['content'][:100]}...")
if data.get('analytics'):
print(f"Expected reach: {data['analytics']['expected_reach']}")
else:
print(f"Generation failed: {data.get('error', 'Unknown error')}")
else:
print(f"Request failed: {response.text}")
return response.status_code == 200
except Exception as e:
print(f"Generate post failed: {e}")
return False
def test_generate_story():
"""Test Facebook story generation."""
payload = {
"business_type": "Fashion brand",
"target_audience": "Fashion enthusiasts aged 18-30",
"story_type": "Product showcase",
"story_tone": "Fun",
"include": "Behind the scenes",
"avoid": "Too much text",
"visual_options": {
"background_type": "Gradient",
"text_overlay": True,
"stickers": True,
"interactive_elements": True
}
}
try:
response = requests.post(
f"{BASE_URL}/api/facebook-writer/story/generate",
json=payload,
headers={"Content-Type": "application/json"}
)
print(f"Generate Story: {response.status_code}")
if response.status_code == 200:
data = response.json()
if data['success']:
print(f"Story generated successfully!")
print(f"Content preview: {data['content'][:100]}...")
if data.get('visual_suggestions'):
print(f"Visual suggestions: {len(data['visual_suggestions'])} items")
else:
print(f"Generation failed: {data.get('error', 'Unknown error')}")
return response.status_code == 200
except Exception as e:
print(f"Generate story failed: {e}")
return False
def test_generate_ad_copy():
"""Test Facebook ad copy generation."""
payload = {
"business_type": "E-commerce store",
"product_service": "Wireless headphones",
"ad_objective": "Conversions",
"ad_format": "Single image",
"target_audience": "Tech enthusiasts and music lovers",
"targeting_options": {
"age_group": "25-34",
"interests": "Technology, Music, Audio equipment",
"location": "United States"
},
"unique_selling_proposition": "Premium sound quality at affordable prices",
"offer_details": "20% off for first-time buyers",
"budget_range": "Medium"
}
try:
response = requests.post(
f"{BASE_URL}/api/facebook-writer/ad-copy/generate",
json=payload,
headers={"Content-Type": "application/json"}
)
print(f"Generate Ad Copy: {response.status_code}")
if response.status_code == 200:
data = response.json()
if data['success']:
print(f"Ad copy generated successfully!")
if data.get('primary_ad_copy'):
print(f"Headline: {data['primary_ad_copy'].get('headline', 'N/A')}")
if data.get('performance_predictions'):
print(f"Estimated reach: {data['performance_predictions']['estimated_reach']}")
else:
print(f"Generation failed: {data.get('error', 'Unknown error')}")
return response.status_code == 200
except Exception as e:
print(f"Generate ad copy failed: {e}")
return False
def test_analyze_engagement():
"""Test engagement analysis."""
payload = {
"content": "🚀 Ready to transform your fitness journey? Our new 30-day challenge is here! Join thousands who've already seen amazing results. What's your biggest fitness goal? 💪 #FitnessMotivation #Challenge #Transformation",
"content_type": "Post",
"analysis_type": "Performance prediction",
"business_type": "Fitness coach",
"target_audience": "Fitness enthusiasts"
}
try:
response = requests.post(
f"{BASE_URL}/api/facebook-writer/engagement/analyze",
json=payload,
headers={"Content-Type": "application/json"}
)
print(f"Analyze Engagement: {response.status_code}")
if response.status_code == 200:
data = response.json()
if data['success']:
print(f"Analysis completed successfully!")
print(f"Content score: {data.get('content_score', 'N/A')}/100")
if data.get('engagement_metrics'):
print(f"Predicted engagement: {data['engagement_metrics']['predicted_engagement_rate']}")
else:
print(f"Analysis failed: {data.get('error', 'Unknown error')}")
return response.status_code == 200
except Exception as e:
print(f"Analyze engagement failed: {e}")
return False
def main():
"""Run all tests."""
print("🧪 Testing Facebook Writer API Endpoints")
print("=" * 50)
tests = [
("Health Check", test_health_check),
("Get Tools", test_get_tools),
("Generate Post", test_generate_post),
("Generate Story", test_generate_story),
("Generate Ad Copy", test_generate_ad_copy),
("Analyze Engagement", test_analyze_engagement)
]
results = []
for test_name, test_func in tests:
print(f"\n🔍 Running {test_name}...")
try:
success = test_func()
results.append((test_name, success))
status = "✅ PASS" if success else "❌ FAIL"
print(f"{status}")
except Exception as e:
print(f"❌ FAIL - {e}")
results.append((test_name, False))
print(f"\n📊 Test Results Summary")
print("=" * 50)
passed = sum(1 for _, success in results if success)
total = len(results)
for test_name, success in results:
status = "✅ PASS" if success else "❌ FAIL"
print(f"{status} {test_name}")
print(f"\nOverall: {passed}/{total} tests passed ({passed/total*100:.1f}%)")
if passed == total:
print("🎉 All tests passed! Facebook Writer API is ready to use.")
else:
print("⚠️ Some tests failed. Check the server logs for details.")
if __name__ == "__main__":
main()