// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: MIT-0 using System.Text; using Amazon.DynamoDBv2.DataModel; using Amazon.Lambda.APIGatewayEvents; using Amazon.Lambda.Core; using Amazon.Lambda.Serialization.SystemTextJson; using Amazon.Lambda.TestUtilities; namespace Unicorn.Web.SearchService.Tests; public class TestAsyncSearch : AsyncSearch { private readonly List _remainingList; public TestAsyncSearch(IEnumerable records) { _remainingList = new List(); _remainingList.AddRange(records); } public override Task> GetRemainingAsync(CancellationToken cancellationToken = new()) { return Task.FromResult(_remainingList); } } public static class TestHelpers { public static APIGatewayProxyRequest LoadApiGatewayProxyRequest(string filename) { var serializer = Activator.CreateInstance(typeof(DefaultLambdaJsonSerializer)) as ILambdaSerializer; APIGatewayProxyRequest request = null!; using var fileStream = LoadJsonTestFile(filename); if (serializer != null) request = serializer.Deserialize(fileStream); return request; } // This utility method takes care of removing the BOM that System.Text.Json doesn't like. private static MemoryStream LoadJsonTestFile(string filename) { var json = File.ReadAllText(filename); return new MemoryStream(Encoding.UTF8.GetBytes(json)); } /// /// Creates new Lambda context /// /// TestLambdaContext public static TestLambdaContext NewLambdaContext() { return new TestLambdaContext { FunctionName = Guid.NewGuid().ToString("D"), FunctionVersion = "1", MemoryLimitInMB = 215, AwsRequestId = Guid.NewGuid().ToString("D") }; } public static void SetEnvironmentVariables() { Environment.SetEnvironmentVariable("DYNAMODB_TABLE", Guid.NewGuid().ToString("D")); Environment.SetEnvironmentVariable("EVENT_BUS", Guid.NewGuid().ToString("D")); Environment.SetEnvironmentVariable("SERVICE_NAMESPACE", Guid.NewGuid().ToString("D")); Environment.SetEnvironmentVariable("POWERTOOLS_SERVICE_NAME", Guid.NewGuid().ToString("D")); Environment.SetEnvironmentVariable("POWERTOOLS_TRACE_DISABLED", "true"); Environment.SetEnvironmentVariable("POWERTOOLS_LOGGER_LOG_EVENT", "false"); Environment.SetEnvironmentVariable("POWERTOOLS_METRICS_NAMESPACE", Guid.NewGuid().ToString("D")); Environment.SetEnvironmentVariable("POWERTOOLS_LOG_LEVEL", "INFO"); } public static AsyncSearch NewDynamoDBSearchResult(IEnumerable records) { return new TestAsyncSearch(records); } }