"""Unit tests for OWS request wrapper functions.""" from unittest.mock import Mock, patch import pytest from file_upload_complete.connectors import requests class TestRequestWrappers: """Tests for OWS request wrapper functions.""" @patch('file_upload_complete.connectors.requests.ows_client') def test_get_request(self, mock_ows_client): """Test GET request wrapper.""" service = 'test-service' path = '/test/endpoint' mock_response = Mock() mock_response.json.return_value = {'data': 'test'} mock_ows_client.get.return_value = mock_response result = requests.get(service, path) assert result == mock_response mock_ows_client.get.assert_called_once_with(path=path, service_name=service) @patch('file_upload_complete.connectors.requests.ows_client') def test_get_request_with_options(self, mock_ows_client): """Test GET request with additional options.""" service = 'test-service' path = '/test/endpoint' mock_response = Mock() mock_ows_client.get.return_value = mock_response extra_options = {'timeout': 30, 'headers': {'X-Custom': 'value'}} result = requests.get(service, path, **extra_options) assert result == mock_response mock_ows_client.get.assert_called_once_with( path=path, service_name=service, **extra_options ) @patch('file_upload_complete.connectors.requests.ows_client') def test_post_request_without_body(self, mock_ows_client): """Test POST request without body.""" service = 'test-service' path = '/test/endpoint' mock_response = Mock() mock_ows_client.post.return_value = mock_response result = requests.post(service, path, body=None) assert result == mock_response mock_ows_client.post.assert_called_once_with( path=path, service_name=service, json=None ) @patch('file_upload_complete.connectors.requests.ows_client') def test_post_request_with_body(self, mock_ows_client): """Test POST request with JSON body.""" service = 'test-service' path = '/test/endpoint' body = {'key': 'value', 'number': 42} mock_response = Mock() mock_ows_client.post.return_value = mock_response result = requests.post(service, path, body=body) assert result == mock_response mock_ows_client.post.assert_called_once_with( path=path, service_name=service, json=body ) @patch('file_upload_complete.connectors.requests.ows_client') def test_post_request_with_options(self, mock_ows_client): """Test POST request with additional options.""" service = 'test-service' path = '/test/endpoint' body = {'data': 'test'} mock_response = Mock() mock_ows_client.post.return_value = mock_response extra_options = {'timeout': 60, 'headers': {'Authorization': 'Bearer token'}} result = requests.post(service, path, body=body, **extra_options) assert result == mock_response mock_ows_client.post.assert_called_once_with( path=path, service_name=service, json=body, **extra_options ) @patch('file_upload_complete.connectors.requests.ows_client') def test_put_request(self, mock_ows_client): """Test PUT request wrapper.""" service = 'test-service' path = '/test/endpoint/123' body = {'updated': 'data'} mock_response = Mock() mock_ows_client.put.return_value = mock_response result = requests.put(service, path, body) assert result == mock_response mock_ows_client.put.assert_called_once_with( path=path, service_name=service, json=body ) @patch('file_upload_complete.connectors.requests.ows_client') def test_put_request_with_options(self, mock_ows_client): """Test PUT request with additional options.""" service = 'test-service' path = '/test/endpoint/123' body = {'updated': 'data'} mock_response = Mock() mock_ows_client.put.return_value = mock_response extra_options = {'headers': {'If-Match': 'etag'}} result = requests.put(service, path, body, **extra_options) assert result == mock_response mock_ows_client.put.assert_called_once_with( path=path, service_name=service, json=body, **extra_options ) @patch('file_upload_complete.connectors.requests.ows_client') def test_delete_request(self, mock_ows_client): """Test DELETE request wrapper.""" service = 'test-service' path = '/test/endpoint/123' body = {'reason': 'test'} mock_response = Mock() mock_ows_client.delete.return_value = mock_response result = requests.delete(service, path, body) assert result == mock_response mock_ows_client.delete.assert_called_once_with( path=path, service_name=service, json=body ) @patch('file_upload_complete.connectors.requests.ows_client') def test_delete_request_with_options(self, mock_ows_client): """Test DELETE request with additional options.""" service = 'test-service' path = '/test/endpoint/123' body = {'reason': 'test'} mock_response = Mock() mock_ows_client.delete.return_value = mock_response extra_options = {'timeout': 30} result = requests.delete(service, path, body, **extra_options) assert result == mock_response mock_ows_client.delete.assert_called_once_with( path=path, service_name=service, json=body, **extra_options ) class TestModuleInitialization: """Tests for module-level initialization.""" @patch('file_upload_complete.connectors.requests.ENVIRONMENT', 'dev') @patch('file_upload_complete.connectors.requests.LambdaSecretsManager') @patch('file_upload_complete.connectors.requests.M2MTokenManager') @patch('file_upload_complete.connectors.requests.OwsClient') def test_ows_client_initialization_dev( self, mock_ows_client_cls, mock_m2m_manager_cls, mock_secrets_manager_cls ): """Test OWS client initialization in dev environment.""" # Note: This test verifies the module initialization logic # In dev environment, m2m_token_manager should be None pass @patch('file_upload_complete.connectors.requests.ENVIRONMENT', 'prod') def test_module_constants(self): """Test module-level constants are properly set.""" from file_upload_complete.connectors import requests as req_module assert hasattr(req_module, 'secrets_manager') assert hasattr(req_module, 'm2m_token_manager') assert hasattr(req_module, 'ows_client')