"""Test for hive segment logic.""" from unittest.mock import MagicMock, patch import pytest from assets.constants import field_const from assets.constants.error import ERROR_ASSET_FINAL_NOT_FOUND from assets.exceptions import AssetFinalNotFound from assets.logic import hive_segment @patch("assets.models.asset_final.get_asset_final_by_id") @patch("assets.models.hive_segment.create_hive_segment") def test_save_hive_segment_data_success( hive_segment_mock: MagicMock, asset_final_mock: MagicMock ) -> None: """Test save_hive_segment_data method in success case.""" payload = { "asset_final_id": 555, field_const.TASK: { field_const.TASK_ID: "a22414c0-0cba-11f1-bc98-c7fc13f309f3", field_const.MODEL: "ai_music_classifier_DORIAN_2025_04_02_v00", field_const.MODEL_VERSION: 1, }, "segments": [ { "time": 5, "ai_generated_music": 0.9, "ai_generated_music_vocal": 0.77, "mubert": 0.67, "musicgen": 0.55, "riffusion": 0.33, "stable_audio": 0.89, "suno": 0.78, "udio": 0.66, } ], } asset_final_result = { "id": 136374478, "asset_upload_id": 74675060, "asset_type": "FLAC", "asset_subtype": "none", "bucket": "test_bucket", "filename": "test1.flac", "duration": 24384, } asset_final_mock.return_value = asset_final_result hive_segment.save_hive_segment_data(payload) hive_segment_mock.assert_called_once() @patch("assets.models.asset_final.get_asset_final_by_id") @patch("assets.models.hive_segment.create_hive_segment") def test_save_hive_segment_data_no_asset_final_id( hive_segment_mock: MagicMock, asset_final_mock: MagicMock ) -> None: """Test save_hive_segment_data when asset_final_id not found.""" payload = {"asset_final_id": 0, "time": 5} asset_final_mock.side_effect = AssetFinalNotFound(ERROR_ASSET_FINAL_NOT_FOUND) with pytest.raises(AssetFinalNotFound) as exc: hive_segment.save_hive_segment_data(payload) assert exc.value.description == ERROR_ASSET_FINAL_NOT_FOUND hive_segment_mock.assert_not_called() @patch("assets.models.asset_final.get_asset_final_by_id") @patch("assets.models.hive_segment.create_hive_segment") def test_save_hive_segment_data_passes_overwrite( hive_segment_mock: MagicMock, asset_final_mock: MagicMock ) -> None: """The overwrite flag is forwarded to the model layer when present.""" payload = { "asset_final_id": 555, field_const.TASK: {"task_id": "x", "model": "m", "model_version": 1}, "segments": [{"time": 5}], field_const.OVERWRITE: True, } hive_segment.save_hive_segment_data(payload) hive_segment_mock.assert_called_once_with( 555, payload["task"], payload["segments"], overwrite=True ) @patch("assets.models.asset_final.get_asset_final_by_id") @patch("assets.models.hive_segment.create_hive_segment") def test_save_hive_segment_data_defaults_overwrite_false( hive_segment_mock: MagicMock, asset_final_mock: MagicMock ) -> None: """overwrite defaults to False (first-scan-wins) when absent from the payload.""" payload = { "asset_final_id": 555, field_const.TASK: {"task_id": "x", "model": "m", "model_version": 1}, "segments": [{"time": 5}], } hive_segment.save_hive_segment_data(payload) hive_segment_mock.assert_called_once_with( 555, payload["task"], payload["segments"], overwrite=False )