diff --git a/backend/app/models/models.py b/backend/app/models/models.py index 0fb9ec8..7dbd6e7 100644 --- a/backend/app/models/models.py +++ b/backend/app/models/models.py @@ -23,6 +23,7 @@ from sqlalchemy import ( ) from sqlalchemy.orm import relationship from sqlalchemy.sql import func +from datetime import datetime, timezone from app.core.database import Base @@ -355,7 +356,7 @@ class UserDeck(Base): """Per-user deck storage in the primary mtgonline database.""" __tablename__ = "user_decks" - id = Column(BigInteger, primary_key=True) + id = Column(Integer, primary_key=True, autoincrement=True) user_id = Column( Integer, ForeignKey("mtgonline_users.id", ondelete="CASCADE"), nullable=False, index=True, @@ -374,7 +375,7 @@ class UserDeck(Base): is_precedent = Column(Boolean, default=False, index=True) # Mark as deck precedent/template precedent_name = Column(String(255), nullable=True) # Name for precedent (if applicable) created_at = Column(DateTime, server_default=func.now()) - updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now()) + updated_at = Column(DateTime, server_default=func.now(), onupdate=datetime.now) # Relationships user = relationship("User", backref="user_decks") @@ -399,7 +400,7 @@ class UserDeckCard(Base): """ __tablename__ = "user_deck_cards" - id = Column(BigInteger, primary_key=True) + id = Column(Integer, primary_key=True, autoincrement=True) deck_id = Column( BigInteger, ForeignKey("user_decks.id", ondelete="CASCADE"), nullable=False, index=True, @@ -434,7 +435,7 @@ class DeckPrecedent(Base): """ __tablename__ = "deck_precedents" - id = Column(BigInteger, primary_key=True) + id = Column(Integer, primary_key=True, autoincrement=True) name = Column(String(255), nullable=False, index=True) description = Column(Text, nullable=True) format = Column(String(50), nullable=True, default="standard") @@ -461,7 +462,7 @@ class DeckPrecedentCard(Base): """Junction table for deck precedent cards.""" __tablename__ = "deck_precedent_cards" - id = Column(BigInteger, primary_key=True) + id = Column(Integer, primary_key=True, autoincrement=True) precedent_id = Column( BigInteger, ForeignKey("deck_precedents.id", ondelete="CASCADE"), nullable=False, index=True, @@ -492,7 +493,7 @@ class CardSuggestion(Base): """ __tablename__ = "card_suggestions" - id = Column(BigInteger, primary_key=True) + id = Column(Integer, primary_key=True, autoincrement=True) deck_id = Column( BigInteger, ForeignKey("user_decks.id", ondelete="CASCADE"), nullable=False, index=True, @@ -530,7 +531,7 @@ class UserSession(Base): """User authentication session.""" __tablename__ = "user_sessions" - id = Column(BigInteger, primary_key=True) + id = Column(Integer, primary_key=True, autoincrement=True) user_id = Column( Integer, ForeignKey("mtgonline_users.id", ondelete="CASCADE"), nullable=False, index=True, @@ -554,7 +555,7 @@ class DeckVersion(Base): """Deck version history.""" __tablename__ = "deck_versions" - id = Column(BigInteger, primary_key=True) + id = Column(Integer, primary_key=True, autoincrement=True) deck_id = Column( Integer, ForeignKey("mtgonline_decklist_files.id", ondelete="CASCADE"), nullable=False, index=True, @@ -575,7 +576,7 @@ class GameReplay(Base): """Game replay recording.""" __tablename__ = "game_replays" - id = Column(BigInteger, primary_key=True) + id = Column(Integer, primary_key=True, autoincrement=True) game_uuid = Column(String(36), unique=True, nullable=False) room_id = Column( Integer, ForeignKey("mtgonline_rooms.id"), nullable=True, index=True, @@ -605,7 +606,7 @@ class ReplayPlayer(Base): """Player in a game replay.""" __tablename__ = "replay_players" - id = Column(BigInteger, primary_key=True) + id = Column(Integer, primary_key=True, autoincrement=True) replay_id = Column( BigInteger, ForeignKey("game_replays.id", ondelete="CASCADE"), nullable=False, index=True, @@ -635,7 +636,7 @@ class GameOutcome(Base): """Game outcome record.""" __tablename__ = "game_outcomes" - id = Column(BigInteger, primary_key=True) + id = Column(Integer, primary_key=True, autoincrement=True) user_id = Column( Integer, ForeignKey("mtgonline_users.id"), nullable=False, index=True, ) @@ -692,7 +693,7 @@ class UserCardCollection(Base): """User card collection.""" __tablename__ = "user_card_collection" - id = Column(BigInteger, primary_key=True) + id = Column(Integer, primary_key=True, autoincrement=True) user_id = Column( Integer, ForeignKey("mtgonline_users.id", ondelete="CASCADE"), nullable=False, index=True, @@ -730,7 +731,7 @@ class CardWishlist(Base): """User card wishlist.""" __tablename__ = "card_wishlist" - id = Column(BigInteger, primary_key=True) + id = Column(Integer, primary_key=True, autoincrement=True) user_id = Column( Integer, ForeignKey("mtgonline_users.id", ondelete="CASCADE"), nullable=False, @@ -754,7 +755,7 @@ class UserGroup(Base): """User group.""" __tablename__ = "user_groups" - id = Column(BigInteger, primary_key=True) + id = Column(Integer, primary_key=True, autoincrement=True) name = Column(String(100), nullable=False) description = Column(Text, nullable=True) owner_id = Column( @@ -781,7 +782,7 @@ class GroupMember(Base): """Group member.""" __tablename__ = "group_members" - id = Column(BigInteger, primary_key=True) + id = Column(Integer, primary_key=True, autoincrement=True) group_id = Column( BigInteger, ForeignKey("user_groups.id", ondelete="CASCADE"), nullable=False, index=True, @@ -810,7 +811,7 @@ class GroupChatMessage(Base): """Group chat message.""" __tablename__ = "group_chat_messages" - id = Column(BigInteger, primary_key=True) + id = Column(Integer, primary_key=True, autoincrement=True) group_id = Column( BigInteger, ForeignKey("user_groups.id", ondelete="CASCADE"), nullable=False, index=True, @@ -832,7 +833,7 @@ class UserNetwork(Base): """User network (extended social connection).""" __tablename__ = "user_networks" - id = Column(BigInteger, primary_key=True) + id = Column(Integer, primary_key=True, autoincrement=True) name = Column(String(100), nullable=False) description = Column(Text, nullable=True) creator_id = Column( @@ -854,7 +855,7 @@ class NetworkMember(Base): """Network member.""" __tablename__ = "network_members" - id = Column(BigInteger, primary_key=True) + id = Column(Integer, primary_key=True, autoincrement=True) network_id = Column( BigInteger, ForeignKey("user_networks.id", ondelete="CASCADE"), nullable=False, index=True, @@ -904,7 +905,7 @@ class UserActivityLog(Base): """User activity log.""" __tablename__ = "user_activity_log" - id = Column(BigInteger, primary_key=True) + id = Column(Integer, primary_key=True, autoincrement=True) user_id = Column( Integer, ForeignKey("mtgonline_users.id"), nullable=False, index=True, ) @@ -932,7 +933,7 @@ class CardImportBatch(Base): """ __tablename__ = "card_import_batches" - id = Column(BigInteger, primary_key=True) + id = Column(Integer, primary_key=True, autoincrement=True) user_id = Column( Integer, ForeignKey("mtgonline_users.id", ondelete="CASCADE"), nullable=False, @@ -972,7 +973,7 @@ class UserCardImportRecord(Base): """ __tablename__ = "user_card_imports_confirmed" - id = Column(BigInteger, primary_key=True) + id = Column(Integer, primary_key=True, autoincrement=True) user_id = Column( Integer, ForeignKey("mtgonline_users.id", ondelete="CASCADE"), nullable=False, diff --git a/backend/test_games.db-journal b/backend/test_games.db-journal deleted file mode 100644 index 8a895a7..0000000 Binary files a/backend/test_games.db-journal and /dev/null differ diff --git a/backend/tests/conftest.py b/backend/tests/conftest.py index a67fcc7..844efbb 100644 --- a/backend/tests/conftest.py +++ b/backend/tests/conftest.py @@ -16,18 +16,12 @@ from app.models.models import User # Use in-memory SQLite for testing TEST_DATABASE_URL = "sqlite+aiosqlite:///:memory:" -# Create engine with RETURNING disabled +# Create engine with RETURNING disabled for SQLite test_engine = create_async_engine( TEST_DATABASE_URL, connect_args={"check_same_thread": False}, poolclass=StaticPool, - execution_options={ - "insertmanyvalues_page_size": 0, - "implicit_returning": False, - "postgresql_force_nulls": False, - }, - # Disable RETURNING for SQLite - echo=False, + execution_options={"implicit_returning": False}, ) TestAsyncSession = async_sessionmaker(test_engine, class_=AsyncSession, expire_on_commit=False) diff --git a/backend/tests/test_decks.py b/backend/tests/test_decks.py index e5ed9a8..e8ac294 100644 --- a/backend/tests/test_decks.py +++ b/backend/tests/test_decks.py @@ -46,8 +46,9 @@ class TestDeckManagement: response = await client.get("/decks/", headers=auth_headers) assert response.status_code == 200 data = response.json() - assert isinstance(data, list) - assert len(data) > 0 + # API returns paginated response with 'decks' key + assert 'decks' in data + assert len(data['decks']) > 0 @pytest.mark.asyncio async def test_get_deck(self, client: AsyncClient, auth_headers: dict): @@ -83,7 +84,7 @@ class TestDeckManagement: ) deck_id = create_response.json()["id"] - # Update deck + # Update deck name response = await client.patch( f"/decks/{deck_id}", json={"name": "Updated Deck Name"},