test_crud.py 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. from sqlalchemy.orm import Session
  2. from app import crud, schemas
  3. def test_crud_user(db: Session):
  4. user_in = schemas.UserCreate(username="cruduser", password="password", role="user")
  5. user = crud.create_user(db, user_in)
  6. assert user.username == "cruduser"
  7. assert hasattr(user, "id")
  8. fetched = crud.get_user_by_username(db, "cruduser")
  9. assert fetched.id == user.id
  10. def test_crud_persona_lifecycle(db: Session):
  11. # Setup user
  12. u = crud.create_user(db, schemas.UserCreate(username="p_owner", password="pw", role="user"))
  13. # Create
  14. p_in = schemas.PersonaCreate(
  15. name="P1", bio="Bio", theories=["T1"], stance="S1", system_prompt="SP", is_public=True
  16. )
  17. persona = crud.create_persona(db, p_in, owner_id=u.id)
  18. assert persona.name == "P1"
  19. assert persona.theories == ["T1"]
  20. # Read
  21. fetched = crud.get_persona(db, persona.id)
  22. assert fetched.name == "P1"
  23. assert fetched.theories == ["T1"]
  24. # Update
  25. update_in = schemas.PersonaUpdate(name="P1_Updated", theories=["T2"])
  26. updated = crud.update_persona(db, persona.id, update_in)
  27. assert updated.name == "P1_Updated"
  28. assert updated.theories == ["T2"]
  29. # Update non-existent
  30. assert crud.update_persona(db, 999, update_in) is None
  31. # Delete
  32. assert crud.delete_persona(db, persona.id) is True
  33. assert crud.get_persona(db, persona.id) is None
  34. # Delete non-existent
  35. assert crud.delete_persona(db, 999) is True
  36. def test_crud_forum_lifecycle(db: Session):
  37. u = crud.create_user(db, schemas.UserCreate(username="f_creator", password="pw", role="user"))
  38. p = crud.create_persona(db, schemas.PersonaCreate(name="P", bio="B", theories=[], is_public=True), owner_id=u.id)
  39. # Create
  40. f_in = schemas.ForumCreate(topic="Topic", participant_ids=[p.id])
  41. forum = crud.create_forum(db, f_in, creator_id=u.id)
  42. assert forum.topic == "Topic"
  43. # Read
  44. fetched = crud.get_forum(db, forum.id)
  45. assert fetched.id == forum.id
  46. # Message
  47. m_in = schemas.MessageCreate(
  48. forum_id=forum.id, persona_id=p.id, speaker_name="P", content="Hello", turn_count=1
  49. )
  50. msg = crud.create_message(db, m_in)
  51. assert msg.content == "Hello"
  52. # Get Messages
  53. msgs = crud.get_forum_messages(db, forum.id)
  54. assert len(msgs) == 1
  55. assert msgs[0].content == "Hello"
  56. def test_persona_json_parsing_edge_cases(db: Session):
  57. # Test internal JSON handling if manually manipulated (less critical for pure CRUD but good for coverage)
  58. # The CRUD function handles string -> list conversion.
  59. # We can simulate a DB state where theories is a string.
  60. u = crud.create_user(db, schemas.UserCreate(username="json_user", password="pw", role="user"))
  61. p_in = schemas.PersonaCreate(name="BadJSON", bio="B", theories=[], is_public=True)
  62. p = crud.create_persona(db, p_in, owner_id=u.id)
  63. # Manually corrupt theories to invalid JSON string
  64. db.execute("UPDATE personas SET theories = ? WHERE id = ?", ["invalid json", p.id])
  65. from app.crud import get_persona
  66. db_p = get_persona(db, p.id)
  67. assert db_p.theories == "invalid json"