Skip to content

Commit c9f23cc

Browse files
committed
- Updated package version
- Updated unit test cases - Fixed pipeline
1 parent 3f2fcf5 commit c9f23cc

File tree

4 files changed

+119
-79
lines changed

4 files changed

+119
-79
lines changed

.github/workflows/unit_tests.yaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@ jobs:
1616
with:
1717
fetch-depth: 0
1818

19-
- name: Setup Virtual Environment
20-
run: |
21-
python3.10 -m venv .venv
22-
source .venv/bin/activate
19+
- name: Set up Python
20+
uses: actions/setup-python@v2
21+
with:
22+
python-version: '3.10'
2323

2424
- name: Install Dependencies
2525
run: |

requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@ pydantic==1.10.4
33
html_testRunner==1.2.1
44
uvicorn==0.20.0
55
python-ms-core==0.0.22
6-
tcat-gtfs-csv-validator~=0.0.39
6+
tcat-gtfs-csv-validator~=0.0.40

tests/unit_tests/test_file_upload_msg.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import json
33
import unittest
44
from src.models.file_upload_msg import FileUploadMsg
5+
56
# from src.gtfx_flex_validator import GTFSFlexValidator
67

78
current_dir = os.path.dirname(os.path.abspath(os.path.join(__file__, '../')))
@@ -11,18 +12,22 @@
1112
TEST_FILE = open(TEST_JSON_FILE)
1213
TEST_DATA = json.loads(TEST_FILE.read())
1314

15+
1416
class TestFileUploadMsg(unittest.TestCase):
1517
def setUp(self):
1618
data = TEST_DATA
1719
self.upload = FileUploadMsg.from_dict(data=data)
18-
20+
1921
def test_message_type(self):
20-
self.assertEqual(self.upload.messageType,"workflow_identifier")
22+
self.assertEqual(self.upload.messageType, "workflow_identifier")
23+
2124
def test_message_id(self):
2225
self.upload.messageId = "abc"
23-
self.assertEqual(self.upload.messageId,"abc")
26+
self.assertEqual(self.upload.messageId, "abc")
27+
2428
def test_file_upload_path(self):
25-
self.assertEqual(self.upload.data.file_upload_path,'https://tdeisamplestorage.blob.core.windows.net/gtfsflex/tests/success_1_all_attrs.zip')
29+
self.assertEqual(self.upload.data.file_upload_path,
30+
'https://tdeisamplestorage.blob.core.windows.net/gtfsflex/tests/success_1_all_attrs.zip')
2631

2732

2833
if __name__ == '__main__':

tests/unit_tests/test_gtfx_flex_validator.py

Lines changed: 105 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -5,96 +5,131 @@
55

66
class TestGTFSFlexValidator(unittest.TestCase):
77

8-
def setUp(self):
9-
with patch.object(GTFSFlexValidator, '__init__', return_value=None):
10-
self.validator = GTFSFlexValidator()
11-
self.validator._subscription_name = MagicMock()
12-
self.validator.request_topic = MagicMock()
13-
self.validator.response_topic = MagicMock()
14-
self.validator.logger = MagicMock()
15-
self.validator.storage_client = MagicMock()
16-
17-
@patch.object(GTFSFlexValidator, 'subscribe')
18-
def test_subscribe(self, mock_subscribe):
8+
@patch('src.gtfx_flex_validator.Settings')
9+
@patch('src.gtfx_flex_validator.Core')
10+
def setUp(self, mock_core, mock_settings):
11+
mock_settings.return_value.request_subscription = 'test_subscription'
12+
mock_settings.return_value.request_topic_name = 'test_request_topic'
13+
mock_settings.return_value.response_topic_name = 'test_response_topic'
14+
mock_settings.return_value.max_concurrent_messages = 10
15+
mock_settings.return_value.get_unique_id.return_value = '123'
16+
mock_settings.return_value.container_name = 'test_container'
17+
18+
# Mock Core
19+
mock_core.return_value.get_topic.return_value = MagicMock()
20+
mock_core.return_value.get_storage_client.return_value = MagicMock()
21+
22+
# Initialize GTFSFlexValidator with mocked dependencies
23+
self.validator = GTFSFlexValidator()
24+
self.validator.storage_client = MagicMock()
25+
self.validator.container_name = 'test_container'
26+
self.sample_message = {
27+
'messageId': '1234',
28+
'data': {
29+
'file_upload_path': 'https://tdeisamplestorage.blob.core.windows.net/gtfsflex/tests/success_1_all_attrs.zip',
30+
'user_id': 'c59d29b6-a063-4249-943f-d320d15ac9ab',
31+
'tdei_project_group_id': '0b41ebc5-350c-42d3-90af-3af4ad3628fb'
32+
}
33+
}
34+
35+
@patch('src.gtfx_flex_validator.QueueMessage')
36+
@patch('src.gtfx_flex_validator.FileUploadMsg')
37+
def test_subscribe_with_valid_message(self, mock_request_message, mock_queue_message):
38+
# Arrange
39+
mock_message = MagicMock()
40+
mock_queue_message.to_dict.return_value = self.sample_message
41+
mock_request_message.from_dict.return_value = mock_request_message
42+
self.validator.process_message = MagicMock()
43+
1944
# Act
2045
self.validator.subscribe()
46+
callback = self.validator.request_topic.subscribe.call_args[1]['callback']
47+
callback(mock_message)
2148

2249
# Assert
23-
mock_subscribe.assert_called_once()
24-
25-
@patch.object(GTFSFlexValidator, 'send_status') # Mock the send_status method
26-
def test_valid_send_status(self, mock_send_status):
27-
upload_message_data = MagicMock()
28-
upload_message_data.stage = 'flex-validation' # Set the stage attribute
29-
30-
# Create a mock meta object
31-
mock_meta = MagicMock()
32-
mock_meta.isValid = True
33-
mock_meta.validationMessage = 'Validation successful'
50+
self.validator.process_message.assert_called_once_with(mock_request_message)
3451

35-
upload_message_data.meta = mock_meta
3652

37-
# Create a mock response object
38-
mock_response = MagicMock()
39-
mock_response.success = True
40-
mock_response.message = 'Validation successful'
53+
@patch('src.gtfx_flex_validator.GTFSFlexValidation')
54+
def test_process_message_with_valid_file_path(self, mock_gtfs_flex_validation):
55+
# Arrange
56+
mock_request_message = MagicMock()
57+
mock_request_message.data.file_upload_path = 'test_dataset_url'
58+
mock_request_message.data.user_id = 'user_id'
59+
mock_request_message.data.tdei_project_group_id = 'tdei_project_group_id'
60+
mock_gtfs_flex_validation_instance = mock_gtfs_flex_validation.return_value
61+
mock_gtfs_flex_validation_instance.validate.return_value = True, 'Validation successful'
4162

42-
upload_message_data.response = mock_response
63+
self.validator.send_status = MagicMock()
4364

44-
# Create a mock upload_message object
45-
upload_message = MagicMock()
46-
upload_message.message = 'Test message'
47-
upload_message.data = upload_message_data
65+
# Act
66+
self.validator.process_message(mock_request_message)
4867

49-
# Call the send_status method
50-
self.validator.send_status(valid=True, upload_message=upload_message)
68+
# Assert
5169

52-
# Add assertions for the expected behavior
53-
self.assertEqual(upload_message_data.stage, 'flex-validation')
54-
self.assertTrue(upload_message_data.meta.isValid)
55-
self.assertEqual(upload_message_data.meta.validationMessage, 'Validation successful')
56-
self.assertTrue(upload_message_data.response.success)
57-
self.assertEqual(upload_message_data.response.message, 'Validation successful')
70+
self.validator.send_status.assert_called_once_with(valid=True, upload_message=mock_request_message,
71+
validation_message='Validation successful')
5872

59-
# Assert that the send_status method was called once with the expected arguments
60-
mock_send_status.assert_called_once_with(valid=True, upload_message=upload_message)
73+
@patch('src.gtfx_flex_validator.GTFSFlexValidation')
74+
def test_process_message_when_file_path_is_none_and_valid_is_false(self, mock_gtfs_flex_validation):
75+
# Arrange
76+
mock_request_message = MagicMock()
77+
mock_request_message.data.file_upload_path = 'test_dataset_url'
78+
mock_request_message.data.user_id = 'user_id'
79+
mock_request_message.data.tdei_project_group_id = 'tdei_project_group_id'
80+
mock_gtfs_flex_validation.return_value.validate.return_value = False, 'Validation error'
81+
self.validator.send_status = MagicMock()
6182

62-
@patch.object(GTFSFlexValidator, 'send_status') # Mock the send_status method
63-
def test_invalid_send_status(self, mock_send_status):
64-
upload_message_data = MagicMock()
65-
upload_message_data.stage = 'flex-validation' # Set the stage attribute
83+
# Act
84+
self.validator.process_message(mock_request_message)
6685

67-
# Create a mock meta object
68-
mock_meta = MagicMock()
69-
mock_meta.isValid = False
70-
mock_meta.validationMessage = 'Validation failed'
86+
self.validator.send_status.assert_called_once_with(
87+
valid=False,
88+
upload_message=mock_request_message,
89+
validation_message='Validation error'
90+
)
7191

72-
upload_message_data.meta = mock_meta
7392

74-
# Create a mock response object
75-
mock_response = MagicMock()
76-
mock_response.success = False
77-
mock_response.message = 'Validation failed'
93+
@patch('src.gtfx_flex_validator.GTFSFlexValidation')
94+
def test_process_message_when_exception_is_raised(self, mock_gtfs_flex_validation):
95+
# Arrange
96+
mock_request_message = MagicMock()
97+
mock_request_message.data.file_upload_path = 'test_dataset_url'
98+
mock_request_message.data.user_id = 'user_id'
99+
mock_request_message.data.tdei_project_group_id = 'tdei_project_group_id'
100+
self.validator.send_status = MagicMock()
78101

79-
upload_message_data.response = mock_response
102+
# Mock Inclination to raise an exception
103+
mock_gtfs_flex_validation.side_effect = Exception('Some error occurred')
80104

81-
# Create a mock upload_message object
82-
upload_message = MagicMock()
83-
upload_message.message = 'Test message'
84-
upload_message.data = upload_message_data
105+
# Act
106+
self.validator.process_message(mock_request_message)
85107

86-
# Call the send_status method
87-
self.validator.send_status(valid=False, upload_message=upload_message)
108+
# Assert
109+
self.validator.send_status.assert_called_once_with(
110+
valid=False,
111+
upload_message=mock_request_message,
112+
validation_message='Some error occurred'
113+
)
114+
115+
@patch('src.gtfx_flex_validator.QueueMessage')
116+
def test_send_status_success(self, mock_queue_message):
117+
# Arrange
118+
mock_request_message = MagicMock()
119+
mock_response_topic = self.validator.core.get_topic.return_value
120+
mock_data = {'messageId': '1234', 'messageType': 'test', 'data': {'success': True}}
121+
mock_queue_message.data_from.return_value = mock_data
88122

89-
# Add assertions for the expected behavior
90-
self.assertEqual(upload_message_data.stage, 'flex-validation')
91-
self.assertFalse(upload_message_data.meta.isValid)
92-
self.assertEqual(upload_message_data.meta.validationMessage, 'Validation failed')
93-
self.assertFalse(upload_message_data.response.success)
94-
self.assertEqual(upload_message_data.response.message, 'Validation failed')
123+
# Act
124+
self.validator.send_status(
125+
valid=True,
126+
upload_message=mock_request_message,
127+
validation_message='Validation successful'
128+
)
95129

96-
# Assert that the send_status method was called once with the expected arguments
97-
mock_send_status.assert_called_once_with(valid=False, upload_message=upload_message)
130+
# Assert
131+
mock_queue_message.data_from.assert_called_once()
132+
mock_response_topic.publish.assert_called_once_with(data=mock_data)
98133

99134

100135
if __name__ == '__main__':

0 commit comments

Comments
 (0)