145 lines
4.2 KiB
Python
145 lines
4.2 KiB
Python
import pytest
|
|
import os
|
|
import json
|
|
import shutil
|
|
from app import create_app
|
|
|
|
@pytest.fixture
|
|
def app():
|
|
"""Create a Flask application instance for testing."""
|
|
# Test configuration
|
|
test_config = {
|
|
'TESTING': True,
|
|
'STORAGE_PATH': 'test_storage',
|
|
'SECRET_KEY': 'test_key',
|
|
'WTF_CSRF_ENABLED': False
|
|
}
|
|
|
|
# Create test storage directory
|
|
if not os.path.exists('test_storage'):
|
|
os.makedirs('test_storage')
|
|
|
|
# Create basic directory structure
|
|
for dir_name in ['users', 'schemas', 'filetypes', 'projects', 'logs', 'exports']:
|
|
if not os.path.exists(f'test_storage/{dir_name}'):
|
|
os.makedirs(f'test_storage/{dir_name}')
|
|
|
|
# Create app with test configuration
|
|
app = create_app('testing')
|
|
|
|
# Create context
|
|
with app.app_context():
|
|
# Set up test data
|
|
initialize_test_data()
|
|
|
|
yield app
|
|
|
|
# Clean up after tests
|
|
shutil.rmtree('test_storage', ignore_errors=True)
|
|
|
|
@pytest.fixture
|
|
def client(app):
|
|
"""Create a test client for the application."""
|
|
return app.test_client()
|
|
|
|
@pytest.fixture
|
|
def auth(client):
|
|
"""Helper for authentication tests."""
|
|
class AuthActions:
|
|
def login(self, username='admin', password='admin123'):
|
|
return client.post('/auth/login', data={
|
|
'username': username,
|
|
'password': password
|
|
}, follow_redirects=True)
|
|
|
|
def logout(self):
|
|
return client.get('/auth/logout', follow_redirects=True)
|
|
|
|
return AuthActions()
|
|
|
|
@pytest.fixture
|
|
def logged_in_client(client, auth):
|
|
"""Client that's already logged in as admin."""
|
|
auth.login()
|
|
return client
|
|
|
|
def initialize_test_data():
|
|
"""Initialize test data files."""
|
|
# Create test users
|
|
users_data = {
|
|
"admin": {
|
|
"nombre": "Administrador",
|
|
"username": "admin",
|
|
"email": "admin@ejemplo.com",
|
|
"password_hash": "$2b$12$Q5Nz3QSF0FP.mKAxPmWXmurKn1oor4Cl1KbYZAKsFbGcEWWyPHou6", # admin123
|
|
"nivel": 9999,
|
|
"idioma": "es",
|
|
"fecha_caducidad": None,
|
|
"empresa": "ARCH",
|
|
"estado": "activo"
|
|
},
|
|
"user1": {
|
|
"nombre": "Usuario Normal",
|
|
"username": "user1",
|
|
"email": "user1@ejemplo.com",
|
|
"password_hash": "$2b$12$Q5Nz3QSF0FP.mKAxPmWXmurKn1oor4Cl1KbYZAKsFbGcEWWyPHou6", # admin123
|
|
"nivel": 1000,
|
|
"idioma": "es",
|
|
"fecha_caducidad": None,
|
|
"empresa": "ARCH",
|
|
"estado": "activo"
|
|
}
|
|
}
|
|
|
|
with open('test_storage/users/users.json', 'w', encoding='utf-8') as f:
|
|
json.dump(users_data, f, ensure_ascii=False, indent=2)
|
|
|
|
# Create test file types
|
|
filetypes_data = {
|
|
"pdf": {
|
|
"extension": "pdf",
|
|
"descripcion": "Documento PDF",
|
|
"mime_type": "application/pdf",
|
|
"tamano_maximo": 20971520
|
|
},
|
|
"txt": {
|
|
"extension": "txt",
|
|
"descripcion": "Documento de texto",
|
|
"mime_type": "text/plain",
|
|
"tamano_maximo": 5242880
|
|
}
|
|
}
|
|
|
|
with open('test_storage/filetypes/filetypes.json', 'w', encoding='utf-8') as f:
|
|
json.dump(filetypes_data, f, ensure_ascii=False, indent=2)
|
|
|
|
# Create test schemas
|
|
schemas_data = {
|
|
"TEST001": {
|
|
"codigo": "TEST001",
|
|
"descripcion": "Esquema de prueba",
|
|
"fecha_creacion": "2023-10-01T10:00:00Z",
|
|
"creado_por": "admin",
|
|
"documentos": [
|
|
{
|
|
"tipo": "pdf",
|
|
"nombre": "Documento de Prueba",
|
|
"nivel_ver": 0,
|
|
"nivel_editar": 1000
|
|
}
|
|
]
|
|
}
|
|
}
|
|
|
|
with open('test_storage/schemas/schema.json', 'w', encoding='utf-8') as f:
|
|
json.dump(schemas_data, f, ensure_ascii=False, indent=2)
|
|
|
|
# Create indices file
|
|
indices_data = {
|
|
"max_project_id": 0,
|
|
"max_document_id": 0
|
|
}
|
|
|
|
with open('test_storage/indices.json', 'w', encoding='utf-8') as f:
|
|
json.dump(indices_data, f, ensure_ascii=False, indent=2)
|