From a94f3dfc344d597859027f92751337c8d246b058 Mon Sep 17 00:00:00 2001 From: Andrew Date: Mon, 17 Mar 2025 23:19:05 +0000 Subject: [PATCH] [server]: Add return_all_coordinates tests --- .../test_return_all_coordinates.py | 100 ++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 server/src/test/return_all_coordinates/test_return_all_coordinates.py diff --git a/server/src/test/return_all_coordinates/test_return_all_coordinates.py b/server/src/test/return_all_coordinates/test_return_all_coordinates.py new file mode 100644 index 0000000..25a1496 --- /dev/null +++ b/server/src/test/return_all_coordinates/test_return_all_coordinates.py @@ -0,0 +1,100 @@ +import unittest +from unittest.mock import patch, MagicMock +import json +import os +from functions.return_all_coordinates.lambda_function import lambda_handler + + +class TestReturnAllCoordinates(unittest.TestCase): + + # Mock environment variable before each test + def setUp(self): + patch.dict(os.environ, {'TABLE_NAME': 'test-table'}).start() + + # Clean up patches after each test + def tearDown(self): + patch.stopall() + + @patch('functions.return_all_coordinates.lambda_function.dynamodb.Table') + def test_lambda_handler_with_coordinates(self, mock_table): + """Test function when the database contains valid latitude and longitude values.""" + # Mock scan response with items containing latitude & longitude + mock_table.return_value.scan.return_value = { + 'Items': [ + {'latitude': 53.3498, 'longitude': -6.2603}, + {'latitude': 51.8985, 'longitude': -8.4756} + ] + } + + event = {} # No query parameters needed + result = lambda_handler(event, {}) + self.assertEqual(result['statusCode'], 200) + + # Parse result body + body = json.loads(result['body']) + self.assertIn('coordinates', body) + self.assertEqual(len(body['coordinates']), 2) + self.assertEqual(body['coordinates'][0], [53.3498, -6.2603]) + self.assertEqual(body['coordinates'][1], [51.8985, -8.4756]) + + @patch('functions.return_all_coordinates.lambda_function.dynamodb.Table') + def test_lambda_handler_with_pagination(self, mock_table): + """Test function correctly handles paginated responses from DynamoDB.""" + # Mock paginated scan responses + mock_table.return_value.scan.side_effect = [ + {'Items': [{'latitude': 53.3498, 'longitude': -6.2603}], 'LastEvaluatedKey': 'key1'}, + {'Items': [{'latitude': 51.8985, 'longitude': -8.4756}], 'LastEvaluatedKey': 'key2'}, + {'Items': [{'latitude': 54.5973, 'longitude': -5.9301}]} + ] + + event = {} + result = lambda_handler(event, {}) + self.assertEqual(result['statusCode'], 200) + + body = json.loads(result['body']) + self.assertEqual(len(body['coordinates']), 3) + self.assertEqual(body['coordinates'][0], [53.3498, -6.2603]) + self.assertEqual(body['coordinates'][1], [51.8985, -8.4756]) + self.assertEqual(body['coordinates'][2], [54.5973, -5.9301]) + + @patch('functions.return_all_coordinates.lambda_function.dynamodb.Table') + def test_lambda_handler_with_no_coordinates(self, mock_table): + """Test function when no items contain latitude or longitude.""" + mock_table.return_value.scan.return_value = { + 'Items': [ + {'objectID': '1', 'objectType': 'Bus'}, # Missing lat/lon + {'name': 'Train Station'} # Missing lat/lon + ] + } + + event = {} + result = lambda_handler(event, {}) + self.assertEqual(result['statusCode'], 200) + + body = json.loads(result['body']) + self.assertIn('coordinates', body) + self.assertEqual(len(body['coordinates']), 0) + + @patch('functions.return_all_coordinates.lambda_function.dynamodb.Table') + def test_lambda_handler_with_partial_data(self, mock_table): + """Test function when some items have lat/lon while others do not.""" + mock_table.return_value.scan.return_value = { + 'Items': [ + {'latitude': 53.3498, 'longitude': -6.2603}, + {'objectID': '1', 'objectType': 'Train'}, # No lat/lon + {'latitude': 54.5973} # Missing longitude + ] + } + + event = {} + result = lambda_handler(event, {}) + self.assertEqual(result['statusCode'], 200) + + body = json.loads(result['body']) + self.assertEqual(len(body['coordinates']), 1) + self.assertEqual(body['coordinates'][0], [53.3498, -6.2603]) + + @patch('functions.return_all_coordinates.lambda_function.dynamodb.Table') + def test_lambda_handler_error(self, mock_table): + """Test function when DynamoDB scan raises an exception.""" + mock_table.retur