LinkDesk/backend/test_delete_fix.py

109 lines
3.3 KiB
Python

"""Quick test to verify delete endpoint fix"""
import sys
import os
sys.path.insert(0, os.path.dirname(__file__))
from fastapi.testclient import TestClient
from main import app
from database import get_db, Base, engine
from models.user import User, UserRole
from utils.auth import get_password_hash
from sqlalchemy.orm import Session
# Create test client
client = TestClient(app)
def setup_test_data():
"""Setup test data"""
Base.metadata.create_all(bind=engine)
db = next(get_db())
# Create admin user if not exists
admin = db.query(User).filter(User.email == "admin@test.com").first()
if not admin:
admin = User(
email="admin@test.com",
hashed_password=get_password_hash("admin123"),
first_name="Admin",
last_name="User",
role=UserRole.ADMIN,
is_admin=True,
is_approved=True
)
db.add(admin)
db.commit()
db.close()
def get_auth_token():
"""Get authentication token"""
response = client.post(
"/auth/login",
data={"username": "admin@test.com", "password": "admin123"}
)
if response.status_code == 200:
return response.json()["access_token"]
return None
def test_delete_custom_task_type():
"""Test the delete endpoint"""
print("\n" + "="*60)
print("Testing Custom Task Type Delete Endpoint")
print("="*60)
setup_test_data()
token = get_auth_token()
if not token:
print("❌ Failed to get auth token")
return
headers = {"Authorization": f"Bearer {token}"}
project_id = 1
# Step 1: Add a custom task type
print("\n1. Adding custom task type 'test_delete'...")
add_response = client.post(
f"/projects/{project_id}/custom-task-types",
headers=headers,
json={"task_type": "test_delete", "category": "asset"}
)
print(f" Status: {add_response.status_code}")
if add_response.status_code == 201:
print(" ✓ Task type added")
data = add_response.json()
print(f" Custom asset types: {data.get('custom_asset_types', [])}")
else:
print(f" ✗ Failed: {add_response.text}")
return
# Step 2: Delete the custom task type
print("\n2. Deleting custom task type 'test_delete'...")
delete_response = client.delete(
f"/projects/{project_id}/custom-task-types/test_delete",
headers=headers,
params={"category": "asset"}
)
print(f" Status: {delete_response.status_code}")
if delete_response.status_code == 200:
print(" ✓ Task type deleted successfully!")
data = delete_response.json()
print(f" Custom asset types: {data.get('custom_asset_types', [])}")
if "test_delete" not in data.get('custom_asset_types', []):
print("\n✅ DELETE ENDPOINT WORKING CORRECTLY!")
else:
print("\n⚠️ Task type still in list")
else:
print(f" ✗ Failed: {delete_response.status_code}")
print(f" Error: {delete_response.text}")
if delete_response.status_code == 405:
print("\n❌ METHOD NOT ALLOWED ERROR - Backend needs restart!")
print("\n" + "="*60)
if __name__ == "__main__":
test_delete_custom_task_type()