import decimal from unittest.mock import MagicMock from unittest.mock import patch from ows_accounting.models import attachment @patch('ows_accounting.models.attachment.dynamodb') def test_get_attachments_month(mock_dynamodb, mock_attachments_month): """Test get_attachments_by_label_id_periods with month ids list.""" mock_table = MagicMock() mock_dynamodb.query_items.return_value = mock_attachments_month mock_dynamodb.get_table.return_value = mock_table result = attachment.get_attachments( 'L', '10303', [217]) assert result.message == mock_attachments_month assert result.status == 200 mock_dynamodb.query_items.assert_any_call( mock_table, 'label_type_id_period_id', 'L10303_217') @patch('ows_accounting.models.attachment.dynamodb') def test_get_attachments_month_error( mock_dynamodb): """Test get_attachments_by_label_id_periods with month ids list.""" mock_table = MagicMock() mock_dynamodb.query_items.return_value = [] mock_dynamodb.get_table.return_value = mock_table result = attachment.get_attachments( 'L', '10303', [218]) assert result.status == 400 mock_dynamodb.query_items.assert_any_call( mock_table, 'label_type_id_period_id', 'L10303_218') @patch('ows_accounting.models.attachment.dynamodb') def test_get_attachments_quarter(mock_dynamodb, mock_attachments_quarter): """Test get_attachments_by_label_id_periods with quarter ids list.""" mock_table = MagicMock() mock_dynamodb.query_items.return_value = mock_attachments_quarter mock_dynamodb.get_table.return_value = mock_table result = attachment.get_attachments( 'L', '10303', [223, 224, 225]) assert result.message == mock_attachments_quarter assert result.status == 200 mock_dynamodb.query_items.assert_any_call( mock_table, 'label_type_id_period_id', 'L10303_223_224_225') @patch('ows_accounting.models.attachment.dynamodb') def test_get_attachments_quarter_error( mock_dynamodb): """Test get_attachments_by_label_id_periods with quarter ids list.""" mock_table = MagicMock() mock_dynamodb.query_items.return_value = [] mock_dynamodb.get_table.return_value = mock_table result = attachment.get_attachments( 'L', '10303', [223, 224, 225]) assert result.status == 400 mock_dynamodb.query_items.assert_any_call( mock_table, 'label_type_id_period_id', 'L10303_223_224_225') @patch('ows_accounting.models.attachment.dynamodb') def test_get_attachment_month(mock_dynamodb, mock_attachments_month): """Test get_attachments_by_label_id_periods with month ids list.""" mock_table = MagicMock() mock_attachment_month = mock_attachments_month[0] mock_dynamodb.query_items.return_value = [mock_attachment_month] mock_dynamodb.get_table.return_value = mock_table result = attachment.get_attachment( 'L', '10303', [217], 'attachment_doc.pdf') assert result.message == mock_attachment_month assert result.status == 200 mock_dynamodb.query_items.assert_any_call( mock_table, 'label_type_id_period_id', 'L10303_217', 'file_name', 'attachment_doc.pdf') @patch('ows_accounting.models.attachment.dynamodb') def test_get_attachment_month_error( mock_dynamodb): """Test get_attachments_by_label_id_periods with month ids list.""" mock_table = MagicMock() mock_dynamodb.query_items.return_value = [] mock_dynamodb.get_table.return_value = mock_table result = attachment.get_attachment( 'L', '10303', [218], 'attachment_doc.pdf') assert result.status == 400 mock_dynamodb.query_items.assert_any_call( mock_table, 'label_type_id_period_id', 'L10303_218', 'file_name', 'attachment_doc.pdf') @patch('ows_accounting.models.attachment.dynamodb') def test_get_attachment_quarter(mock_dynamodb, mock_attachments_quarter): """Test get_attachments_by_label_id_periods with quarter ids list.""" mock_table = MagicMock() mock_attachment_quarter = mock_attachments_quarter[0] mock_dynamodb.query_items.return_value = [mock_attachment_quarter] mock_dynamodb.get_table.return_value = mock_table result = attachment.get_attachment( 'L', '10303', [223, 224, 225], 'attachment_doc.pdf') assert result.message == mock_attachment_quarter assert result.status == 200 mock_dynamodb.query_items.assert_any_call( mock_table, 'label_type_id_period_id', 'L10303_223_224_225', 'file_name', 'attachment_doc.pdf') @patch('ows_accounting.models.attachment.dynamodb') def test_get_attachment_quarter_error( mock_dynamodb): """Test get_attachments_by_label_id_periods with quarter ids list.""" mock_table = MagicMock() mock_dynamodb.query_items.return_value = [] mock_dynamodb.get_table.return_value = mock_table result = attachment.get_attachment( 'L', '10303', [223, 224, 225], 'attachment_doc.pdf') assert result.status == 400 mock_dynamodb.query_items.assert_any_call( mock_table, 'label_type_id_period_id', 'L10303_223_224_225', 'file_name', 'attachment_doc.pdf') def test_prepare_attachment_item(): """Test _prepare_attachment_item utility function.""" expected_size = 1234 item = { 'file_size': decimal.Decimal(str(expected_size)) } result = attachment._prepare_attachment_item(item) assert result['file_size'] == expected_size