"""Test product video.""" from sqlalchemy import func, select from video.connectors import mysql from video.constants.approval import FINAL_APPROVAL_TYPE, REJECTION_TYPE from video.models.sql.classes import approval as approval_model from tests.unit import ar_db_utils @ar_db_utils.test_schema def test_get() -> None: """Test get.""" with mysql.ar_db_session(turn_off_foreign_key_constraint=True) as session: approval_model.upsert(1, "oa:12", "release", True, session=session) approval_data = approval_model.get(1) assert approval_data["release_id"] == 1 assert approval_data["release_approved"] is True assert approval_data["release_approved_by"] == "oa:12" assert approval_data["content_approved"] is False assert approval_data["content_approved_by"] is None @ar_db_utils.test_schema def test_upsert() -> None: """Test upsert creates.""" with mysql.ar_db_session(turn_off_foreign_key_constraint=True) as session: approval = approval_model.upsert(1, "oa:12", "release", True, session=session) assert approval["release_id"] == 1 assert approval["content_approved"] is False assert approval["release_approved"] is True with mysql.ar_db_session(turn_off_foreign_key_constraint=True) as session: approval_record = ( session.execute(select(approval_model.Approval)).scalars().first() ) assert approval_record is not None assert approval_record.release_approved_by == "oa:12" assert approval_record.release_approved_at is not None @ar_db_utils.test_schema def test_upsert_content() -> None: """Test upsert creates.""" with mysql.ar_db_session(turn_off_foreign_key_constraint=True) as session: approval = approval_model.upsert(1, "oa:12", "content", True, session=session) assert approval["release_id"] == 1 assert approval["content_approved"] is True assert approval["release_approved"] is False with mysql.ar_db_session(turn_off_foreign_key_constraint=True) as session: approval_record = ( session.execute(select(approval_model.Approval)).scalars().first() ) assert approval_record is not None assert approval_record.content_approved_by == "oa:12" assert approval_record.content_approved_at is not None @ar_db_utils.test_schema def test_upsert_rejection() -> None: """Test upsert creates.""" with mysql.ar_db_session(turn_off_foreign_key_constraint=True) as session: approval = approval_model.upsert( 1, "oa:12", REJECTION_TYPE, "hot potato", session=session ) assert approval["release_id"] == 1 assert approval["rejection_reason"] == "hot potato" with mysql.ar_db_session(turn_off_foreign_key_constraint=True) as session: approval_record = ( session.execute(select(approval_model.Approval)).scalars().first() ) assert approval_record is not None assert approval_record.rejection_by == "oa:12" assert approval_record.rejection_at is not None @ar_db_utils.test_schema def test_upsert_final_approval_creates() -> None: """Test upsert creates a row with final approval when no row exists.""" with mysql.ar_db_session(turn_off_foreign_key_constraint=True) as session: approval_model.upsert(1, "oa:12", FINAL_APPROVAL_TYPE, True, session=session) with mysql.ar_db_session(turn_off_foreign_key_constraint=True) as session: approval_record = ( session.execute(select(approval_model.Approval)).scalars().first() ) assert approval_record is not None assert approval_record.final_approved_by == "oa:12" assert approval_record.final_approved_at is not None @ar_db_utils.test_schema def test_upsert_updates() -> None: """Test upsert updates.""" with mysql.ar_db_session(turn_off_foreign_key_constraint=True) as session: approval_model.upsert(1, "oa:12", "content", True, session=session) approval = approval_model.upsert(1, "oa:12", "content", False, session=session) assert approval["content_approved"] is False with mysql.ar_db_session(turn_off_foreign_key_constraint=True) as session: count = session.execute( select(func.count()).select_from(approval_model.Approval) ).scalar() assert count == 1 @ar_db_utils.test_schema def test_delete_approvals() -> None: """Test delete approval.""" with mysql.ar_db_session(turn_off_foreign_key_constraint=True) as session: approval_model.upsert(1, "oa:12", "release", True, session=session) approval_model.delete_approval(1, session=session) with mysql.ar_db_session(turn_off_foreign_key_constraint=True) as session: count = session.execute( select(func.count()).select_from(approval_model.Approval) ).scalar() assert count == 0