ferrero-opentext/Python-Version/tests/test-box-csvupload.py

89 lines
3.1 KiB
Python

import unittest
from unittest.mock import MagicMock, patch
import os
import sys
import csv
# Add parent directory to path
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))
# Add scripts directory to path to find shared module
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '../scripts'))
# Import the function to test (we need to import it from the script)
from scripts.a1_to_a2_box_uploader import generate_and_upload_csv
class TestBoxCSVUpload(unittest.TestCase):
def setUp(self):
self.mock_db = MagicMock()
self.mock_box = MagicMock()
self.mock_config = {
'box': {
'live_campaigns_folder_id': '123456789'
}
}
def test_generate_and_upload_csv_success(self):
# Mock DB response
self.mock_db.get_all_live_campaigns.return_value = [
{'campaign_number': 'C001', 'campaign_name': 'Campaign 1'},
{'campaign_number': 'C002', 'campaign_name': 'Campaign 2'}
]
# Mock Box upload response
self.mock_box.upload_file.return_value = {'file_id': '999', 'url': 'http://box.com/file/999'}
# Run function
result = generate_and_upload_csv(self.mock_db, self.mock_box, self.mock_config)
# Verify result
self.assertTrue(result)
# Verify DB called
self.mock_db.get_all_live_campaigns.assert_called_once()
# Verify Box upload called
self.mock_box.upload_file.assert_called_once()
# Check arguments passed to upload_file
call_args = self.mock_box.upload_file.call_args
self.assertEqual(call_args.kwargs['folder_id'], '123456789')
self.assertTrue(call_args.kwargs['target_filename'].startswith('live_campaigns_'))
self.assertTrue(call_args.kwargs['target_filename'].endswith('.csv'))
# Verify CSV content (we can't easily check the file content since it's deleted,
# but we can check if the file path passed to upload existed at some point)
file_path = call_args.kwargs['file_path']
# Note: The file is deleted by the function, so we can't check if it exists now.
def test_no_campaigns(self):
# Mock DB response empty
self.mock_db.get_all_live_campaigns.return_value = []
# Run function
result = generate_and_upload_csv(self.mock_db, self.mock_box, self.mock_config)
# Verify result False
self.assertFalse(result)
# Verify Box upload NOT called
self.mock_box.upload_file.assert_not_called()
def test_missing_config(self):
# Mock DB response
self.mock_db.get_all_live_campaigns.return_value = [{'campaign_number': 'C001', 'campaign_name': 'C1'}]
# Config missing folder ID
bad_config = {'box': {}}
# Run function
result = generate_and_upload_csv(self.mock_db, self.mock_box, bad_config)
# Verify result False
self.assertFalse(result)
# Verify Box upload NOT called
self.mock_box.upload_file.assert_not_called()
if __name__ == '__main__':
unittest.main()