"""Tests for asset_status logic module.""" import json import flexmock from oto import response import pytest from assets.logic import asset_status from assets.models import asset_upload as asset_upload_model from assets.models import asset_status as asset_status_model from assets.models import ows_product @pytest.fixture def asset_upload_data(): """Fixture for asset_upload model data.""" return { 'id': 1, 'product_id': 123 } @pytest.fixture def status_data(): """Fixture for status data.""" return { 'filename': 'filename.ext', 'status': 'success', 'description': '', 'message': { 'function': 'some_function', 'status': 'success', 'input': { 'key': 'filename.ext' } } } def test_create_status(asset_upload_data, status_data): """Test for creating asset status.""" (flexmock(asset_upload_model) .should_receive('get_asset_upload') .with_args(status_data['filename']) .and_return(response.Response(asset_upload_data))) (flexmock(asset_status_model) .should_receive('create_asset_status') .with_args( asset_upload_data['id'], status_data['status'], status_data['description'], json.dumps(status_data['message'])) .and_return(response.Response())) result = asset_status.create_status(**status_data) assert result def test_create_status_with_nonexistent_asset(status_data): """Test for creating asset status for nonexistent asset.""" (flexmock(asset_upload_model) .should_receive('get_asset_upload') .with_args(status_data['filename']) .and_return(response.create_not_found_response('message'))) result = asset_status.create_status(**status_data) assert result.status == 404 def test_create_status_with_asset_upload_error(status_data): """Test for creating asset status with error in asset_upload model.""" (flexmock(asset_upload_model) .should_receive('get_asset_upload') .with_args(status_data['filename']) .and_return(response.create_fatal_response('message'))) result = asset_status.create_status(**status_data) assert result.status == 500 def test_create_status_with_asset_status_error( asset_upload_data, status_data): """Test for creating asset status with error in asset_status model.""" (flexmock(asset_upload_model) .should_receive('get_asset_upload') .with_args(status_data['filename']) .and_return(response.Response(asset_upload_data))) (flexmock(asset_status_model) .should_receive('create_asset_status') .with_args( asset_upload_data['id'], status_data['status'], status_data['description'], json.dumps(status_data['message'])) .and_return(response.create_fatal_response('message'))) result = asset_status.create_status(**status_data) assert result.status == 500 def test_get_current_status(asset_upload_data, status_data): """Test for getting asset status.""" (flexmock(asset_upload_model) .should_receive('get_asset_upload') .with_args(status_data['filename']) .and_return(response.Response(asset_upload_data))) (flexmock(asset_status_model) .should_receive('get_last_asset_status') .with_args(asset_upload_data['id']) .and_return(response.Response(status_data))) result = asset_status.get_current_status(status_data['filename']) assert result assert result.message == status_data def test_get_current_status_with_ownership_check( asset_upload_data, status_data): """Test for getting asset status with ownership check.""" (flexmock(asset_upload_model) .should_receive('get_asset_upload') .with_args(status_data['filename']) .and_return(response.Response(asset_upload_data))) (flexmock(ows_product) .should_receive('check_ownership') .and_return(response.Response()) .once()) (flexmock(asset_status_model) .should_receive('get_last_asset_status') .with_args(asset_upload_data['id']) .and_return(response.Response(status_data))) result = asset_status.get_current_status( status_data['filename'], 'vendor', 123) assert result assert result.message == status_data def test_get_current_status_with_ownership_check_failure( asset_upload_data, status_data): """Test for getting asset status with ownership check failure.""" (flexmock(asset_upload_model) .should_receive('get_asset_upload') .with_args(status_data['filename']) .and_return(response.Response(asset_upload_data))) (flexmock(ows_product) .should_receive('check_ownership') .and_return(response.create_error_response( 'not_owned', 'not_owned_message', 403))) (flexmock(asset_status_model) .should_receive('get_last_asset_status') .with_args(asset_upload_data['id']) .and_return(response.Response(status_data))) result = asset_status.get_current_status( status_data['filename'], 'vendor', 123) assert result.status == 403 def test_get_current_status_with_nonexistent_asset(status_data): """Test for getting asset status for nonexistent asset.""" (flexmock(asset_upload_model) .should_receive('get_asset_upload') .with_args(status_data['filename']) .and_return(response.create_not_found_response('message'))) result = asset_status.get_current_status(status_data['filename']) assert result.status == 404 def test_get_current_status_with_asset_upload_error(status_data): """Test for getting asset status with error in asset_upload model.""" (flexmock(asset_upload_model) .should_receive('get_asset_upload') .with_args(status_data['filename']) .and_return(response.create_fatal_response('message'))) result = asset_status.get_current_status(status_data['filename']) assert result.status == 500 def test_get_current_status_with_asset_status_error( asset_upload_data, status_data): """Test for getting asset status with error in asset_status model.""" (flexmock(asset_upload_model) .should_receive('get_asset_upload') .with_args(status_data['filename']) .and_return(response.Response(asset_upload_data))) (flexmock(asset_status_model) .should_receive('get_last_asset_status') .with_args(asset_upload_data['id']) .and_return(response.create_fatal_response('message'))) result = asset_status.get_current_status(status_data['filename']) assert result.status == 500