#!/bin/python 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