sem8-iot-test/hub/tests/test_store_api_adapter.py

73 lines
2.9 KiB
Python
Raw Normal View History

2024-02-12 18:18:38 +02:00
import requests
import unittest
from unittest.mock import Mock, patch
from app.adapters.store_api_adapter import StoreApiAdapter
from app.entities.agent_data import AccelerometerData, AgentData, GpsData
from app.entities.processed_agent_data import ProcessedAgentData
class TestStoreApiAdapter(unittest.TestCase):
def setUp(self):
# Create the StoreApiAdapter instance
self.store_api_adapter = StoreApiAdapter(api_base_url="http://test-api.com")
@patch.object(requests, "post")
def test_save_data_success(self, mock_post):
# Test successful saving of data to the Store API
# Sample processed road data
agent_data = AgentData(
user_id=1,
accelerometer=AccelerometerData(
x=0.1,
y=0.2,
z=0.3,
),
gps=GpsData(
latitude=10.123,
longitude=20.456,
),
timestamp="2023-07-21T12:34:56Z",
)
processed_data = ProcessedAgentData(road_state="normal", agent_data=agent_data)
# Mock the response from the Store API
mock_response = Mock(status_code=201) # 201 indicates successful creation
mock_post.return_value = mock_response
# Call the save_data method
result = self.store_api_adapter.save_data(processed_data)
# Ensure that the post method of the mock is called with the correct arguments
mock_post.assert_called_once_with(
"http://test-api.com/agent_data", json=processed_data.model_dump()
)
# Ensure that the result is True, indicating successful saving
self.assertTrue(result)
@patch.object(requests, "post")
def test_save_data_failure(self, mock_post):
# Test failure to save data to the Store API
# Sample processed road data
agent_data = AgentData(
user_id=1,
accelerometer=AccelerometerData(
x=0.1,
y=0.2,
z=0.3,
),
gps=GpsData(
latitude=10.123,
longitude=20.456,
),
timestamp="2023-07-21T12:34:56Z",
)
processed_data = ProcessedAgentData(road_state="normal", agent_data=agent_data)
# Mock the response from the Store API
mock_response = Mock(status_code=400) # 400 indicates a client error
mock_post.return_value = mock_response
# Call the save_data method
result = self.store_api_adapter.save_data(processed_data)
# Ensure that the post method of the mock is called with the correct arguments
mock_post.assert_called_once_with(
"http://test-api.com/agent_data", json=processed_data.model_dump()
)
# Ensure that the result is False, indicating failure to save
self.assertFalse(result)
if __name__ == "__main__":
unittest.main()