This commit is contained in:
Bryce
2025-08-03 21:35:22 -07:00
parent 21d3a710f2
commit 9df259eb58
26 changed files with 476 additions and 363 deletions

View File

@@ -1,6 +1,8 @@
import pytest
import sys
import os
import flask
from flask_sqlalchemy import SQLAlchemy
# Add the project root directory to the Python path
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
@@ -9,45 +11,47 @@ from app import create_app, db
from app.models import User, Folder
import uuid
@pytest.fixture
@pytest.fixture(scope="function")
def app():
"""Create application for testing."""
"""Create a fresh app with in-memory database for each test."""
app = create_app('testing')
app.config['TESTING'] = True
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///:memory:' # In-memory database for tests
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///:memory:"
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False # Recommended for Flask-SQLAlchemy
with app.app_context():
db.create_all()
yield app
db.drop_all()
db.create_all() # Create tables for your models
db.session.begin()
yield app # Yield the app for tests to use
db.session.close()
db.drop_all() # Clean up after tests
@pytest.fixture
def client(app):
"""A test client for the app."""
return app.test_client()
@pytest.fixture
@pytest.fixture(scope="function")
def mock_user(app):
"""Create a mock user for testing."""
with app.app_context():
user = User(
id=uuid.UUID('123e4567-e89b-12d3-a456-426614174000'),
email='test@example.com'
)
db.session.add(user)
db.session.commit()
return user
user = User(
email='test@example.com'
)
db.session.add(user)
db.session.commit()
return user
@pytest.fixture
@pytest.fixture(scope="function")
def mock_folder(app, mock_user):
"""Create a mock folder for testing."""
with app.app_context():
folder = Folder(
user_id=mock_user.id,
name='Test Folder',
rule_text='Test rule',
priority=1
)
db.session.add(folder)
db.session.commit()
return folder
folder = Folder(
user_id=mock_user.id,
name='Test Folder',
rule_text='Test rule',
priority=1
)
db.session.add(folder)
db.session.commit()
return folder

View File

@@ -1,33 +1,32 @@
import pytest
from app.models import User, Folder
from app import db
import uuid
import conftest
def test_user_model(app, mock_user):
def test_user_model(app, mock_user):
"""Test User model creation and properties."""
with app.app_context():
# Test user was created by fixture
assert mock_user.id == uuid.UUID('123e4567-e89b-12d3-a456-426614174000')
assert mock_user.email == 'test@example.com'
# Test querying user
user_from_db = User.query.filter_by(email='test@example.com').first()
assert user_from_db is not None
assert user_from_db.id == mock_user.id
# Test user was created by fixture
assert mock_user.email == 'test@example.com'
# Test querying user
user_from_db = User.query.filter_by(email='test@example.com').first()
assert user_from_db is not None
assert user_from_db.id == mock_user.id
def test_folder_model(app, mock_folder, mock_user):
"""Test Folder model creation and properties."""
with app.app_context():
# Test folder was created by fixture
assert mock_folder.user_id == mock_user.id
assert mock_folder.name == 'Test Folder'
assert mock_folder.rule_text == 'Test rule'
assert mock_folder.priority == 1
# Test relationship
assert len(mock_user.folders) == 1
assert mock_user.folders[0].id == mock_folder.id
# Test querying folder
folder_from_db = Folder.query.filter_by(name='Test Folder').first()
assert folder_from_db is not None
assert folder_from_db.user_id == mock_user.id
# Test folder was created by fixture
assert mock_folder.user_id == mock_user.id
assert mock_folder.name == 'Test Folder'
assert mock_folder.rule_text == 'Test rule'
assert mock_folder.priority == 1
# Test relationship
assert len(mock_user.folders) == 1
assert mock_user.folders[0].id == mock_folder.id
# Test querying folder
folder_from_db = Folder.query.filter_by(name='Test Folder').first()
assert folder_from_db is not None
assert folder_from_db.user_id == mock_user.id

View File

@@ -1,31 +1,28 @@
import pytest
from app.models import User
from app.models import User, Folder
import uuid
def test_index_route(client, app):
"""Test that the index route loads successfully."""
with app.app_context():
# Create a mock user for the test
mock_user = User(
id=uuid.UUID('123e4567-e89b-12d3-a456-426614174000'),
email='test@example.com'
)
from app import db
db.session.add(mock_user)
db.session.commit()
def test_index_route(client, app, mock_user):
response = client.get('/')
assert response.status_code == 200
# Check if the page contains expected elements
assert b'Email Organizer' in response.data
assert b'Folders' in response.data
def test_add_folder_route(client):
def test_add_folder_route(client, mock_user):
"""Test the add folder API endpoint."""
response = client.post('/api/folders',
json={'name': 'Test Folder', 'rule_text': 'Test rule'},
content_type='application/json')
# Get initial count of folders for the user
initial_folder_count = Folder.query.count()
# Send form data (URL encoded) instead of JSON
response = client.post('/api/folders',
data={'name': 'Test Folder', 'rule_text': 'Test rule something ok yes'},
content_type='application/x-www-form-urlencoded')
print(response.__dict__)
# Verify the response status is 201 Created
assert response.status_code == 201
assert b'Folder added (mock)' in response.data
assert b'Test Folder' in response.data
# Verify that the number of folders has increased
final_folder_count = Folder.query.count()
assert final_folder_count > initial_folder_count