Files
Task_Reporter/tests/test_chat_room.py
egg 92834dbe0e feat: Migrate to MySQL and add unified environment configuration
## Database Migration (SQLite → MySQL)
- Add Alembic migration framework
- Add 'tr_' prefix to all tables to avoid conflicts in shared database
- Remove SQLite support, use MySQL exclusively
- Add pymysql driver dependency
- Change ad_token column to Text type for long JWT tokens

## Unified Environment Configuration
- Centralize all hardcoded settings to environment variables
- Backend: Extend Settings class in app/core/config.py
- Frontend: Use Vite environment variables (import.meta.env)
- Docker: Move credentials to environment variables
- Update .env.example files with comprehensive documentation

## Test Organization
- Move root-level test files to tests/ directory:
  - test_chat_room.py → tests/test_chat_room.py
  - test_websocket.py → tests/test_websocket.py
  - test_realtime_implementation.py → tests/test_realtime_implementation.py
- Fix path references in test_realtime_implementation.py

Breaking Changes:
- CORS now requires explicit origins (no more wildcard)
- All database tables renamed with 'tr_' prefix
- SQLite no longer supported

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-07 14:15:11 +08:00

169 lines
6.9 KiB
Python

#!/usr/bin/env python3
"""Test script for chat room management API"""
import json
import uuid
from datetime import datetime
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from app.core.database import Base
from app.modules.auth.models import UserSession
from app.modules.chat_room.models import IncidentRoom, RoomMember, RoomTemplate, RoomStatus, MemberRole
from app.modules.chat_room.services.room_service import room_service
from app.modules.chat_room.services.membership_service import membership_service
from app.modules.chat_room.services.template_service import template_service
from app.modules.chat_room.schemas import CreateRoomRequest, IncidentType, SeverityLevel
# Setup test database
engine = create_engine("sqlite:///./test_chat_room.db")
Base.metadata.create_all(bind=engine)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
def test_room_management():
"""Test the core room management functionality"""
db = SessionLocal()
print("=" * 60)
print("Testing Chat Room Management System")
print("=" * 60)
try:
# Test users
admin_email = "ymirliu@panjit.com.tw"
user1_email = "john.doe@panjit.com.tw"
user2_email = "jane.smith@panjit.com.tw"
# 1. Test admin check
print("\n1. Testing admin identification:")
is_admin = membership_service.is_system_admin(admin_email)
print(f" - Is {admin_email} admin? {is_admin}")
is_admin = membership_service.is_system_admin(user1_email)
print(f" - Is {user1_email} admin? {is_admin}")
# 2. Create a room
print("\n2. Creating a new incident room:")
room_data = CreateRoomRequest(
title="Equipment Failure in Line A",
incident_type=IncidentType.EQUIPMENT_FAILURE,
severity=SeverityLevel.HIGH,
location="Production Floor A",
description="Main conveyor belt stopped working"
)
room = room_service.create_room(db, user1_email, room_data)
print(f" - Room created: {room.title}")
print(f" - Room ID: {room.room_id}")
print(f" - Created by: {room.created_by}")
print(f" - Status: {room.status}")
# 3. Check initial membership
print("\n3. Checking initial membership:")
role = membership_service.get_user_role_in_room(db, room.room_id, user1_email)
print(f" - {user1_email} role: {role}")
# 4. Add members
print("\n4. Adding members to the room:")
member2 = membership_service.add_member(
db, room.room_id, user2_email, MemberRole.EDITOR, user1_email
)
print(f" - Added {user2_email} as {member2.role}")
member3 = membership_service.add_member(
db, room.room_id, admin_email, MemberRole.VIEWER, user1_email
)
print(f" - Added {admin_email} as {member3.role}")
# 5. List room members
print("\n5. Listing all room members:")
members = membership_service.get_room_members(db, room.room_id)
for member in members:
print(f" - {member.user_id}: {member.role}")
# 6. Test ownership transfer
print("\n6. Testing ownership transfer:")
print(f" - Current owner: {user1_email}")
print(f" - Transferring to: {user2_email}")
success = membership_service.transfer_ownership(
db, room.room_id, user1_email, user2_email
)
if success:
print(" - Transfer successful!")
# Check new roles
role1 = membership_service.get_user_role_in_room(db, room.room_id, user1_email)
role2 = membership_service.get_user_role_in_room(db, room.room_id, user2_email)
print(f" - {user1_email} new role: {role1}")
print(f" - {user2_email} new role: {role2}")
# Check audit fields (refetch room)
db.refresh(room)
print(f" - Transfer recorded at: {room.ownership_transferred_at}")
print(f" - Transfer by: {room.ownership_transferred_by}")
# 7. Test admin override
print("\n7. Testing admin override capabilities:")
# Admin can update room even if only a viewer
from app.modules.chat_room.schemas import UpdateRoomRequest
update_data = UpdateRoomRequest(
severity=SeverityLevel.CRITICAL,
status=RoomStatus.RESOLVED,
resolution_notes="Admin resolved the issue"
)
# Simulate admin update (in real API, this would be checked in dependencies)
is_admin = membership_service.is_system_admin(admin_email)
if is_admin:
print(f" - Admin {admin_email} updating room (has override)")
room = room_service.update_room(db, room.room_id, update_data)
print(f" - New severity: {room.severity}")
print(f" - New status: {room.status}")
print(f" - Resolution notes: {room.resolution_notes}")
# 8. Test room templates
print("\n8. Testing room templates:")
templates = template_service.get_templates(db)
print(f" - Found {len(templates)} templates")
for template in templates:
print(f" * {template.name}: {template.incident_type}")
if templates:
# Create room from template
print("\n9. Creating room from template:")
template = templates[0]
room2 = template_service.create_room_from_template(
db,
template.template_id,
user1_email,
title="New Equipment Issue",
location="Line B",
description="Using template for quick setup"
)
print(f" - Room created from template: {room2.title}")
print(f" - Incident type: {room2.incident_type}")
print(f" - Severity: {room2.severity}")
# Check default members
members = membership_service.get_room_members(db, room2.room_id)
print(f" - Auto-added {len(members)} members from template")
# 10. Test user's room listing
print("\n10. Testing user's room listing:")
from app.modules.chat_room.schemas import RoomFilterParams
filters = RoomFilterParams(limit=10, offset=0)
# User1's rooms
rooms, total = room_service.list_user_rooms(db, user1_email, filters, False)
print(f" - {user1_email} has access to {total} room(s)")
# Admin's rooms (with admin flag)
rooms, total = room_service.list_user_rooms(db, admin_email, filters, True)
print(f" - Admin {admin_email} can see {total} room(s)")
print("\n" + "=" * 60)
print("All tests completed successfully!")
print("=" * 60)
except Exception as e:
print(f"\nError during testing: {e}")
import traceback
traceback.print_exc()
finally:
db.close()
if __name__ == "__main__":
test_room_management()