from sqlalchemy import select from sqlalchemy.orm import Session from src.helper_db import upsert_category from src.models import Category from src.models_db import CategoryDb def test_upsert_category_returns_orm_object(db_session: Session): result = upsert_category( db_session, Category.from_str("dummy_parent_1:dummy_parent_2:dummy"), do_commit=False, ) assert result assert isinstance(result, CategoryDb) assert str(result.name) == "dummy" assert str(result.parent.name) == "dummy_parent_2" assert str(result.parent.parent.name) == "dummy_parent_1" def test_upsert_category_writes_new_to_db(db_session: Session): upsert_category( db_session, Category.from_str("grand_father:father:new_category"), do_commit=True, ) result = db_session.execute( select(CategoryDb).filter_by(name="new_category") ).scalar_one() assert result assert str(result.name) == "new_category" assert str(result.parent.name) == "father" assert str(result.parent.parent.name) == "grand_father" def test_upsert_category_skips_existing(db_session: Session): for _ in range(3): upsert_category( db_session, Category.from_str("grand_father:father:try_again_and_again"), do_commit=True, ) result = db_session.execute( select(CategoryDb).filter_by(name="try_again_and_again") ).all() assert len(result) == 1