125 lines
4.3 KiB
Python
125 lines
4.3 KiB
Python
import pytest
|
|
import pytest_asyncio
|
|
import os
|
|
|
|
# Use consistent environment variables
|
|
DB_USER = os.environ.get("DB_USER", "test_user")
|
|
DB_PASSWORD = os.environ.get("DB_PASSWORD", "test_password")
|
|
DB_HOST = os.environ.get("DB_HOST", "127.0.0.1")
|
|
DB_PORT = os.environ.get("DB_PORT", "5432")
|
|
DB_NAME = os.environ.get("DB_NAME", "test_db")
|
|
|
|
# Read the API key from the file
|
|
def get_admin_api_key():
|
|
try:
|
|
with open("/tmp/web_api_key.txt", "r") as f:
|
|
return f.read().strip()
|
|
except FileNotFoundError:
|
|
raise RuntimeError("API key file not found. Ensure database setup has completed.")
|
|
|
|
# Get the API key once at module level
|
|
ADMIN_API_KEY = get_admin_api_key()
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_pinepods_check(async_client):
|
|
"""Test the basic health check endpoint"""
|
|
response = await async_client.get("/api/pinepods_check")
|
|
assert response.status_code == 200
|
|
assert response.json() == {"status_code": 200, "pinepods_instance": True}
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_verify_api_key(async_client):
|
|
"""Test API key verification with admin web key"""
|
|
response = await async_client.get(
|
|
"/api/data/verify_key",
|
|
headers={"Api-Key": ADMIN_API_KEY}
|
|
)
|
|
assert response.status_code == 200
|
|
assert response.json() == {"status": "success"}
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_get_podcast_details_dynamic(async_client):
|
|
"""Test fetching dynamic podcast details from the feed"""
|
|
params = {
|
|
"user_id": 1, # Admin user ID is typically 1
|
|
"podcast_title": "PinePods News",
|
|
"podcast_url": "https://news.pinepods.online/feed.xml",
|
|
"added": False,
|
|
"display_only": False
|
|
}
|
|
response = await async_client.get(
|
|
"/api/data/get_podcast_details_dynamic",
|
|
params=params,
|
|
headers={"Api-Key": ADMIN_API_KEY}
|
|
)
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert data["podcast_title"] == "Pinepods News Feed"
|
|
assert data["podcast_url"] == "https://news.pinepods.online/feed.xml"
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_add_podcast(async_client):
|
|
"""Test adding a podcast to the database"""
|
|
# Mock the database functions
|
|
import database_functions.functions
|
|
|
|
# Store original function
|
|
original_add_podcast = database_functions.functions.add_podcast
|
|
|
|
# Mock the add_podcast function to return expected values
|
|
def mock_add_podcast(*args, **kwargs):
|
|
return (1, 1) # Return a tuple of (podcast_id, first_episode_id)
|
|
|
|
# Patch the function
|
|
database_functions.functions.add_podcast = mock_add_podcast
|
|
|
|
try:
|
|
# First get the podcast details
|
|
params = {
|
|
"user_id": 1,
|
|
"podcast_title": "PinePods News",
|
|
"podcast_url": "https://news.pinepods.online/feed.xml",
|
|
"added": False,
|
|
"display_only": False
|
|
}
|
|
details_response = await async_client.get(
|
|
"/api/data/get_podcast_details_dynamic",
|
|
params=params,
|
|
headers={"Api-Key": ADMIN_API_KEY}
|
|
)
|
|
podcast_details = details_response.json()
|
|
|
|
# Then add the podcast
|
|
add_request = {
|
|
"podcast_values": {
|
|
"pod_title": podcast_details["podcast_title"],
|
|
"pod_artwork": podcast_details["podcast_artwork"],
|
|
"pod_author": podcast_details["podcast_author"],
|
|
"categories": podcast_details["podcast_categories"],
|
|
"pod_description": podcast_details["podcast_description"],
|
|
"pod_episode_count": podcast_details["podcast_episode_count"],
|
|
"pod_feed_url": podcast_details["podcast_url"],
|
|
"pod_website": podcast_details["podcast_link"],
|
|
"pod_explicit": podcast_details["podcast_explicit"],
|
|
"user_id": 1
|
|
},
|
|
"podcast_index_id": 0
|
|
}
|
|
|
|
response = await async_client.post(
|
|
"/api/data/add_podcast",
|
|
json=add_request,
|
|
headers={"Api-Key": ADMIN_API_KEY}
|
|
)
|
|
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert data["success"] is True
|
|
assert "podcast_id" in data
|
|
assert "first_episode_id" in data
|
|
|
|
finally:
|
|
# Restore original function
|
|
database_functions.functions.add_podcast = original_add_podcast
|