Arch/tests/conftest.py

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)