"""Tests for label copy export logic module.""" from unittest.mock import MagicMock from oto import response from project_manager.connector import s3 from project_manager.connector import sqs from project_manager.logic import label_copy_export from project_manager.logic import project_manager from project_manager.models import label_copy_history from project_manager.util import handler_util def test_trigger_project_metadata_generation_no_headers(monkeypatch): """Test report generation successfully without headers.""" project_id = 123 header_user_id = 'alw:324354' headers = {'Orchard-User-Id': header_user_id} monkeypatch.setattr(project_manager, 'check_project_ownership', MagicMock( return_value=response.Response(status=200))) monkeypatch.setattr(label_copy_history, 'create_job', MagicMock( return_value=response.Response(status=200, message='test_record'))) put_message_to_sqs = MagicMock(return_value=response.Response(status=200)) monkeypatch.setattr(sqs, 'put_message_to_sqs', put_message_to_sqs) result = label_copy_export.trigger_project_metadata_generation( headers=headers, project_id=project_id) assert result.message == {'project_id': project_id} assert result.status == 200 assert label_copy_history.create_job.called from project_manager import config put_message_to_sqs.assert_called_with( queue_name=config.LCE_SQS_QUEUE, payload={ 'project_id': project_id, 'job_id': 'test_record'}, orchard_user_id=header_user_id) project_manager.check_project_ownership.assert_not_called() def test_trigger_project_metadata_generation_valid_headers( monkeypatch, header): """Test report generation successfully with valid headers.""" project_id = 123 monkeypatch.setattr(project_manager, 'check_project_ownership', MagicMock( return_value=response.Response(status=200))) monkeypatch.setattr(label_copy_history, 'create_job', MagicMock( return_value=response.Response(status=200))) monkeypatch.setattr(sqs, 'put_message_to_sqs', MagicMock( return_value=response.Response(status=200))) result = label_copy_export.trigger_project_metadata_generation( headers=header, project_id=project_id) assert result.message == {'project_id': project_id} assert result.status == 200 def test_trigger_project_metadata_generation_access_check_failed( monkeypatch, header): """Test report generation access check failed.""" project_id = 123 monkeypatch.setattr(handler_util, 'access_check', MagicMock( return_value=response.Response(status=403))) monkeypatch.setattr(label_copy_history, 'create_job', MagicMock( return_value=response.Response(status=200))) monkeypatch.setattr(project_manager, 'check_project_ownership', MagicMock( return_value=response.Response(status=200))) monkeypatch.setattr(sqs, 'put_message_to_sqs', MagicMock( return_value=response.Response(status=200))) result = label_copy_export.trigger_project_metadata_generation( headers=header, project_id=project_id) assert result.status == 403 project_manager.check_project_ownership.assert_not_called() sqs.put_message_to_sqs.assert_not_called() label_copy_history.create_job.assert_not_called() def test_trigger_project_metadata_generation_check_ownership_failed( monkeypatch, header): """Test report generation with failed ownership check.""" project_id = 123 monkeypatch.setattr(project_manager, 'check_project_ownership', MagicMock( return_value=response.Response(status=403))) monkeypatch.setattr(sqs, 'put_message_to_sqs', MagicMock( return_value=response.Response(status=200))) result = label_copy_export.trigger_project_metadata_generation( headers=header, project_id=project_id) assert result.status == 403 sqs.put_message_to_sqs.assert_not_called() def test_trigger_project_metadata_generation_create_job_failed( monkeypatch, header): """Test report generation create record in table failed.""" project_id = 123 monkeypatch.setattr(project_manager, 'check_project_ownership', MagicMock( return_value=response.Response(status=200))) monkeypatch.setattr(label_copy_history, 'create_job', MagicMock( return_value=response.Response(status=500))) monkeypatch.setattr(sqs, 'put_message_to_sqs', MagicMock( return_value=response.Response(status=200))) result = label_copy_export.trigger_project_metadata_generation( headers=header, project_id=project_id) assert result.status == 500 sqs.put_message_to_sqs.assert_not_called() def test_trigger_project_metadata_generation_sqs_failed(monkeypatch, header): """Test report generation with putting message into sqs failed.""" project_id = 123 monkeypatch.setattr(project_manager, 'check_project_ownership', MagicMock( return_value=response.Response(status=200))) monkeypatch.setattr(label_copy_history, 'create_job', MagicMock( return_value=response.Response(status=200))) monkeypatch.setattr(sqs, 'put_message_to_sqs', MagicMock( return_value=response.Response(status=400))) result = label_copy_export.trigger_project_metadata_generation( headers=header, project_id=project_id) assert result.status == 400 assert sqs.put_message_to_sqs.called def test_get_generated_metadata_for_project_success_no_headers( monkeypatch): """Test getting generated metadata success no headers.""" message = MagicMock() monkeypatch.setattr(project_manager, 'check_project_ownership', MagicMock( return_value=response.Response(status=200))) monkeypatch.setattr(label_copy_history, 'get_job_by_project_id', MagicMock( return_value=response.Response(status=200, message=message))) monkeypatch.setattr(s3, 'get_s3_file_url', MagicMock( return_value=response.Response(status=200))) result = label_copy_export.get_generated_metadata_for_project( project_id=1) assert result.status == 200 assert result.message project_manager.check_project_ownership.assert_not_called() def test_get_generated_metadata_for_project_success_valid_headers( monkeypatch): """Test getting generated metadata success valid headers.""" message = MagicMock() monkeypatch.setattr(project_manager, 'check_project_ownership', MagicMock( return_value=response.Response(status=200))) monkeypatch.setattr(label_copy_history, 'get_job_by_project_id', MagicMock( return_value=response.Response(status=200, message=message))) monkeypatch.setattr(s3, 'get_s3_file_url', MagicMock( return_value=response.Response(status=200))) result = label_copy_export.get_generated_metadata_for_project( project_id=1, account_id=1, account_type='subaccount') assert result.status == 200 assert result.message assert project_manager.check_project_ownership.called def test_get_generated_metadata_for_project_no_metadata( monkeypatch): """Test getting generated metadata failed no metadata found.""" monkeypatch.setattr(project_manager, 'check_project_ownership', MagicMock( return_value=response.Response(status=200))) monkeypatch.setattr(label_copy_history, 'get_job_by_project_id', MagicMock( return_value=response.Response(status=404))) monkeypatch.setattr(s3, 'get_s3_file_url', MagicMock( return_value=response.Response(status=200))) result = label_copy_export.get_generated_metadata_for_project( project_id=1) assert result.status == 404 project_manager.check_project_ownership.assert_not_called() def test_get_generated_metadata_for_project_ownership_failed( monkeypatch): """Test get report check ownership failed.""" project_id = 123 monkeypatch.setattr(label_copy_history, 'get_job_by_project_id', MagicMock( return_value=response.Response(status=200, message=MagicMock()))) monkeypatch.setattr(project_manager, 'check_project_ownership', MagicMock( return_value=response.Response(status=403))) monkeypatch.setattr(s3, 'get_s3_file_url', MagicMock( return_value=response.Response(status=200))) result = label_copy_export.get_generated_metadata_for_project( project_id=project_id, account_type='subaccount', account_id=1) assert result.status == 403 assert project_manager.check_project_ownership.called label_copy_history.get_job_by_project_id.assert_not_called() s3.get_s3_file_url.assert_not_called() def test_get_generated_metadata_for_project_s3_failed( monkeypatch): """Test get report s3 connector failed.""" project_id = 123 monkeypatch.setattr(project_manager, 'check_project_ownership', MagicMock( return_value=response.Response(status=200))) monkeypatch.setattr(label_copy_history, 'get_job_by_project_id', MagicMock( return_value=response.Response(status=200, message=MagicMock()))) monkeypatch.setattr(s3, 'get_s3_file_url', MagicMock( return_value=response.Response(status=500))) result = label_copy_export.get_generated_metadata_for_project( project_id=project_id) assert result.status == 500 project_manager.check_project_ownership.assert_not_called() assert s3.get_s3_file_url.called