"""Unit tests for AssetStatus model.""" import datetime from oto import status import pytest from asset_transcoder.connectors import mysql from asset_transcoder.constants import asset_status as asset_status_const from asset_transcoder.models import asset_status as asset_status_model from asset_transcoder.utils.exceptions import OwsError def test_create_asset_status_without_session(db_fixture): """Test asset status is created without session passed to model.""" payload = dict( asset_upload_id=1, status=asset_status_const.PROCESSING_VALID_STATUSES[0], created_date=datetime.datetime.now(), errors=None ) result = asset_status_model.create_asset_status(**payload) assert result['asset_upload_id'] == payload['asset_upload_id'] assert isinstance(result['id'], int) def test_create_asset_status_with_session(db_fixture): """Test asset status is created with session passed to model.""" payload = dict( asset_upload_id=1, status=asset_status_const.PROCESSING_VALID_STATUSES[0], created_date=datetime.datetime.now(), errors=None ) with mysql.transcoder_db_session() as session: payload['session'] = session result = asset_status_model.create_asset_status(**payload) assert result['asset_upload_id'] == payload['asset_upload_id'] assert isinstance(result['id'], int) def test_asset_status(db_fixture): """Test asset status.""" payload = dict( asset_upload_id=3, status=asset_status_const.PROCESSING_VALID_STATUSES[0], created_date=datetime.datetime.now(), errors=None ) result = asset_status_model.get_last_asset_status(3) assert result['status'] == asset_status_const.STATUS_ENCODING_COMPLETED asset_status_model.create_asset_status(**payload) result = asset_status_model.get_last_asset_status(3) assert result['status'] == payload['status'] assert payload['status'] != asset_status_const.STATUS_ENCODING_COMPLETED def test_asset_status_not_found(db_fixture, asset_status_fixture): """Test asset status not found.""" with pytest.raises(OwsError) as err: asset_status_model.get_last_asset_status('non_existant') assert err.value.status == status.NOT_FOUND def test_asset_status_by_ids(db_fixture): """Test get last statuses for given asset_upload ids.""" upload_ids_without_finals = [1, 5, 6] upload_ids_with_finals = [3] asset_status_payload = { 'asset_upload_id': 1, 'status': asset_status_const.STATUS_ACKNOWLEDGE_COMPLETE, 'errors': None, 'created_date': datetime.datetime.now() } asset_status_model.create_asset_status(**asset_status_payload) asset_status_payload['status'] = asset_status_const.STATUS_ENCODING_PROCESSING asset_status_model.create_asset_status(**asset_status_payload) with mysql.transcoder_db_session() as session: status_response = asset_status_model.get_last_status_by_ids( upload_ids_with_finals + upload_ids_without_finals, session ) assert len(status_response['items']) == 4 for item in status_response['items']: if item['id'] == 3: assert item['status'] == asset_status_const.STATUS_ENCODING_COMPLETED if item['id'] == 4: assert item['status'] == asset_status_const.STATUS_ENCODING_ERROR if item['id'] == 5: assert item['status'] == asset_status_const.STATUS_VALIDATION_ERROR if item['id'] == 6: assert item['status'] == asset_status_const.STATUS_ENCODING_PROCESSING