opencompletion.com/tests/integration/test_app_integration.py
Claude 22db7a9a8a
Run black formatter on all Python files
Format code according to black style guidelines for consistency
2025-11-10 19:37:05 +00:00

166 lines
4.8 KiB
Python

#!/usr/bin/env python3
"""
Integration tests for app.py with real Flask routes and Socket.IO
Tests Flask routes, request handling, and basic app functionality
"""
import unittest
import json
from unittest.mock import patch, MagicMock
import sys
from pathlib import Path
# Add parent directory to path
sys.path.insert(0, str(Path(__file__).parent.parent.parent))
class TestAppUtilityFunctionsIntegration(unittest.TestCase):
"""Integration tests for app.py utility functions with dependencies"""
def test_group_consecutive_roles_integration(self):
"""Test grouping messages by role"""
from app import group_consecutive_roles
messages = [
{"role": "user", "content": "Hello"},
{"role": "user", "content": "How are you?"},
{"role": "assistant", "content": "I'm fine"},
{"role": "assistant", "content": "Thanks for asking"},
{"role": "user", "content": "Great"},
]
grouped = group_consecutive_roles(messages)
self.assertEqual(len(grouped), 3)
self.assertEqual(grouped[0]["role"], "user")
self.assertIn("Hello", grouped[0]["content"])
self.assertIn("How are you?", grouped[0]["content"])
class TestDatabaseModelsIntegration(unittest.TestCase):
"""Integration tests for database models with real Flask app"""
def setUp(self):
"""Set up test database"""
import app as app_module
from models import db
from flask import Flask
test_app = Flask(__name__)
test_app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///:memory:"
test_app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
test_app.config["TESTING"] = True
db.init_app(test_app)
self.app_context = test_app.app_context()
self.app_context.push()
db.create_all()
self.db = db
def tearDown(self):
"""Clean up"""
self.db.session.remove()
try:
self.db.drop_all()
except Exception as e:
# Drop all may fail if db is already cleaned up
pass
self.app_context.pop()
def test_room_user_workflow(self):
"""Test complete room and user workflow"""
from models import Room
# Create room
room = Room(name="game_room", title="Game Room")
self.db.session.add(room)
self.db.session.commit()
# Add users
room.add_user("alice")
room.add_user("bob")
room.add_user("charlie")
self.db.session.commit()
# Verify users added
self.assertEqual(len(room.get_active_users()), 3)
# Remove a user
room.remove_user("bob")
self.db.session.commit()
# Verify bob moved to inactive
active = room.get_active_users()
inactive = room.get_inactive_users()
self.assertNotIn("bob", active)
self.assertIn("bob", inactive)
self.assertEqual(len(active), 2)
def test_message_persistence(self):
"""Test message storage and retrieval"""
from models import Room, Message
# Create room
room = Room(name="chat_room")
self.db.session.add(room)
self.db.session.commit()
# Create messages
msg1 = Message("alice", "Hello world", room.id)
msg2 = Message("bob", "Hi there", room.id)
self.db.session.add(msg1)
self.db.session.add(msg2)
self.db.session.commit()
# Retrieve messages
messages = Message.query.filter_by(room_id=room.id).all()
self.assertEqual(len(messages), 2)
self.assertEqual(messages[0].username, "alice")
self.assertEqual(messages[1].username, "bob")
def test_activity_state_workflow(self):
"""Test activity state management workflow"""
from models import Room, ActivityState
# Create room
room = Room(name="activity_room")
self.db.session.add(room)
self.db.session.commit()
# Create activity state
state = ActivityState(
room_id=room.id,
section_id="intro",
step_id="step_1",
s3_file_path="activity.yaml",
attempts=0,
max_attempts=3,
)
self.db.session.add(state)
self.db.session.commit()
# Add metadata
state.add_metadata("score", 0)
state.add_metadata("level", 1)
self.db.session.commit()
# Progress through activity
state.step_id = "step_2"
state.attempts = 1
state.add_metadata("score", 10)
self.db.session.commit()
# Retrieve and verify
retrieved = ActivityState.query.filter_by(room_id=room.id).first()
self.assertEqual(retrieved.step_id, "step_2")
self.assertEqual(retrieved.attempts, 1)
self.assertEqual(retrieved.dict_metadata["score"], 10)
if __name__ == "__main__":
unittest.main()