# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: Apache-2.0 import os from unittest import TestCase from unittest.mock import patch, MagicMock with patch("boto3.client") as boto_resource_mock: from functions.gamesaving.GeneratePreSignedGetURL import index from functionsTests.helpers.sample_lambda_events import http_event # Patch Lambda environment variables: @patch.dict(os.environ, { 'GAMESAVES_BUCKET_NAME': 'gamekit-dev-123456789012-foogamename-player-gamesaves', }) class TestIndex(TestCase): def setUp(self): index.s3_client = MagicMock() def test_can_generate_presigned_url_with_default_parameters(self): # Arrange event = self.get_lambda_event() context = None self.set_presigned_url('foo_url', index.s3_client) # Act result = index.lambda_handler(event, context) # Assert self.assertEqual(200, result['statusCode']) def test_can_generate_presigned_url_with_overridden_parameters(self): # Arrange event = self.get_lambda_event() event['queryStringParameters'] = { 'time_to_live': '600' } context = None self.set_presigned_url('foo_url', index.s3_client) # Act result = index.lambda_handler(event, context) # Assert self.assertEqual(200, result['statusCode']) def test_lambda_returns_a_401_error_code_when_player_id_is_missing_from_the_request_context(self): # Arrange event = self.get_lambda_event() event['requestContext']['authorizer']['claims'].pop('custom:gk_user_id') context = None # Act result = index.lambda_handler(event, context) # Assert self.assertEqual(401, result['statusCode']) def test_lambda_returns_a_400_error_code_when_slot_name_is_malformed(self): # Arrange event = self.get_lambda_event() event['pathParameters']['slot_name'] = '$om3 ma!f*rm#d slot name%^z__09' context = None # Act result = index.lambda_handler(event, context) # Assert self.assertEqual(400, result['statusCode']) @staticmethod def get_lambda_event() -> dict: """Get a sample Lambda event with none of the optional parameters included.""" return http_event( path_parameters={ 'slot_name': 'foo_slot_name' } ) @staticmethod def set_presigned_url(url: str, mock_boto3_client: MagicMock) -> None: """Set the URL value that will be generated by boto.""" mock_boto3_client.generate_presigned_url.return_value = url