"""Tests for asset_access_log model.""" from typing import Any import pytest from flexmock import flexmock from sqlalchemy.exc import SQLAlchemyError from assets.connectors import mysql from assets.models import asset_access_log from tests.unit.models import au_operations @pytest.fixture def valid_asset_access_log_data() -> dict[str, Any]: """Fixture for valid data for create_asset_access_log.""" return { "orchard_user_id": "alw:123", "track_id": 1, "activity_type": "streaming", "ip_address": "0.0.0.0", } @pytest.fixture def asset_access_log_data() -> list[dict[str, Any]]: """Fixture for asset_access_log table.""" return [ { "orchard_user_id": "alw:123", "track_id": 2, "activity_type": "streaming", "ip_address": "0.0.0.0", }, { "orchard_user_id": "alw:456", "track_id": 3, "activity_type": "streaming", "ip_address": "1.1.1.1", }, ] @pytest.fixture def db_fixture(asset_access_log_data: list[dict[str, Any]]) -> None: """Set up the asset_access_log table.""" au_operations.truncate_tables() au_operations.seed_asset_access_log_table(asset_access_log_data) def test_create_asset_access_log( db_fixture: None, valid_asset_access_log_data: dict[str, Any] ) -> None: """Test creating a new asset final.""" response = asset_access_log.create_asset_access_log(valid_asset_access_log_data) assert response["orchard_user_id"] == valid_asset_access_log_data["orchard_user_id"] assert response["track_id"] == valid_asset_access_log_data["track_id"] assert response["activity_type"] == valid_asset_access_log_data["activity_type"] assert response["ip_address"] == valid_asset_access_log_data["ip_address"] def test_create_asset_access_log_error( db_fixture: None, valid_asset_access_log_data: dict[str, Any] ) -> None: """Test creating a new asset final with sql error.""" error_message = "Query error" ( flexmock(mysql) .should_receive("au_db_session") .and_raise(SQLAlchemyError(error_message)) ) with pytest.raises(SQLAlchemyError) as exc: asset_access_log.create_asset_access_log(valid_asset_access_log_data) assert str(exc.value) == error_message