Files
Oxicloud/tests/test-trash-api-simple.py
T
2025-03-26 19:08:07 +01:00

181 lines
5.6 KiB
Python
Executable File

#!/usr/bin/env python3
import requests
import json
import os
import time
import random
import string
# Configuration
BASE_URL = "http://localhost:8086/api"
DEFAULT_USER_ID = "00000000-0000-0000-0000-000000000000"
def create_test_file():
"""Create a test file and upload it"""
print("Creating test file...")
# Create temp file
filename = f"test-file-{int(time.time())}.txt"
with open(filename, 'w') as f:
f.write(f"Test content {time.time()}")
# Upload file
files = {'file': open(filename, 'rb')}
response = requests.post(f"{BASE_URL}/files/upload?userId={DEFAULT_USER_ID}", files=files)
# Clean up
os.remove(filename)
if response.status_code in [200, 201]:
# The response is already a file object with ID
data = response.json()
file_id = data.get('id')
print(f"Created file with ID: {file_id}")
return file_id
else:
print(f"Failed to create test file: {response.status_code} - {response.text}")
return None
def create_test_folder():
"""Create a test folder"""
print("Creating test folder...")
folder_name = f"test-folder-{int(time.time())}"
payload = {
"name": folder_name
}
response = requests.post(f"{BASE_URL}/folders?userId={DEFAULT_USER_ID}", json=payload)
if response.status_code in [200, 201]:
# The response is a folder object with ID
data = response.json()
folder_id = data.get('id')
print(f"Created folder with ID: {folder_id}")
return folder_id
else:
print(f"Failed to create test folder: {response.status_code} - {response.text}")
return None
def move_to_trash(item_id, item_type):
"""Move an item to trash"""
print(f"Moving {item_type} {item_id} to trash...")
if item_type == 'file':
url = f"{BASE_URL}/files/{item_id}?userId={DEFAULT_USER_ID}"
else:
url = f"{BASE_URL}/folders/{item_id}?userId={DEFAULT_USER_ID}"
response = requests.delete(url)
if response.status_code in [200, 201, 202, 204]:
print(f"Successfully moved {item_type} to trash")
return True
else:
print(f"Failed to move {item_type} to trash: {response.status_code} - {response.text}")
return False
def list_trash():
"""List all items in trash"""
print("Listing trash items...")
response = requests.get(f"{BASE_URL}/trash?userId={DEFAULT_USER_ID}")
if response.status_code in [200, 201]:
items = response.json()
print(f"Found {len(items)} items in trash:")
for item in items:
print(f"- {item['id']} ({item['item_type']}): {item['name']} (original ID: {item['original_id']})")
return items
else:
print(f"Failed to list trash: {response.status_code} - {response.text}")
return []
def restore_from_trash(trash_id):
"""Restore an item from trash"""
print(f"Restoring item {trash_id} from trash...")
response = requests.post(f"{BASE_URL}/trash/{trash_id}/restore?userId={DEFAULT_USER_ID}", json={})
if response.status_code in [200, 201, 202, 204]:
print("Successfully restored item from trash")
return True
else:
print(f"Failed to restore item: {response.status_code} - {response.text}")
return False
def delete_permanently(trash_id):
"""Delete an item permanently"""
print(f"Permanently deleting item {trash_id}...")
response = requests.delete(f"{BASE_URL}/trash/{trash_id}?userId={DEFAULT_USER_ID}")
if response.status_code in [200, 201, 202, 204]:
print("Successfully deleted item permanently")
return True
else:
print(f"Failed to delete item: {response.status_code} - {response.text}")
return False
def main():
"""Main test function"""
print("=== Starting Trash API Tests ===")
# Create test file
file_id = create_test_file()
if not file_id:
print("Test failed: Could not create test file")
return
# Move file to trash
if not move_to_trash(file_id, 'file'):
print("Test failed: Could not move file to trash")
return
# Wait a moment for the trash operation to complete
print("Waiting 5 seconds for trash operation to complete...")
time.sleep(5)
# List trash items
trash_items = list_trash()
# Find our file in trash
file_trash_item = next((item for item in trash_items if item['original_id'] == file_id and item['item_type'] == 'file'), None)
if not file_trash_item:
print("Test failed: File not found in trash")
return
# Restore file from trash
if not restore_from_trash(file_trash_item['id']):
print("Test failed: Could not restore file from trash")
return
# Create test folder
folder_id = create_test_folder()
if not folder_id:
print("Test failed: Could not create test folder")
return
# Move folder to trash
if not move_to_trash(folder_id, 'folder'):
print("Test failed: Could not move folder to trash")
return
# List trash items again
trash_items = list_trash()
# Find our folder in trash
folder_trash_item = next((item for item in trash_items if item['original_id'] == folder_id and item['item_type'] == 'folder'), None)
if not folder_trash_item:
print("Test failed: Folder not found in trash")
return
# Delete folder permanently
if not delete_permanently(folder_trash_item['id']):
print("Test failed: Could not delete folder permanently")
return
print("=== All Trash API Tests Passed! ===")
if __name__ == "__main__":
main()