Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 48 additions & 0 deletions tests/InvestProvider.Backend.Tests/EnvironmentVariableScope.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
using System;
using System.Collections.Generic;

namespace InvestProvider.Backend.Tests;

public sealed class EnvironmentVariableScope : IDisposable
{
private readonly IReadOnlyList<string> _keys;
private readonly string?[] _values;

private EnvironmentVariableScope(IReadOnlyList<string> keys, string?[] values)
{
_keys = keys;
_values = values;
}

public static EnvironmentVariableScope Set(string key, string? value)
{
var previousValue = Environment.GetEnvironmentVariable(key);
Environment.SetEnvironmentVariable(key, value);
return new EnvironmentVariableScope([key], [previousValue]);
}

public static EnvironmentVariableScope Set(IDictionary<string, string?> variables)
{
var keys = new List<string>(variables.Count);
var values = new string?[variables.Count];
var index = 0;

foreach (var (key, value) in variables)
{
keys.Add(key);
values[index] = Environment.GetEnvironmentVariable(key);
Environment.SetEnvironmentVariable(key, value);
index++;
}

return new EnvironmentVariableScope(keys, values);
}

public void Dispose()
{
for (var i = 0; i < _keys.Count; i++)
{
Environment.SetEnvironmentVariable(_keys[i], _values[i]);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
using InvestProvider.Backend.Services.Web3.Contracts;
using InvestProvider.Backend.Services.Handlers.AdminCreatePoolzBackId;
using InvestProvider.Backend.Services.Handlers.AdminCreatePoolzBackId.Models;
using System.Collections.Generic;

namespace InvestProvider.Backend.Tests.Handlers;

Expand All @@ -23,7 +24,11 @@ public class AdminCreatePoolzBackIdHandlerTests
[Fact]
public async Task Handle_SavesItem_AndReturnsResponse()
{
Environment.SetEnvironmentVariable("AWS_REGION", "us-east-1");
using var _ = EnvironmentVariableScope.Set(new Dictionary<string, string?>
{
["AWS_REGION"] = "us-east-1",
["BASE_URL_OF_RPC"] = "http://rpc",
});

var phase = TestHelpers.CreatePhase("1", DateTime.UtcNow, DateTime.UtcNow.AddHours(1), 0m);
var projectInfo = TestHelpers.CreateProjectInfo(1, phase);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
using poolz.finance.csharp.contracts.InvestProvider.ContractDefinition;
using InvestProvider.Backend.Services.Handlers.GenerateSignature;
using InvestProvider.Backend.Services.Handlers.GenerateSignature.Models;
using System.Collections.Generic;

namespace InvestProvider.Backend.Tests.Handlers;

Expand Down Expand Up @@ -58,14 +59,15 @@ private static void SetupCommonMocks(Mock<ILockDealNFTService<ContractType>> loc
[Fact]
public async Task Validate_Succeeds_ForWhitelistPhase()
{
using var _ = EnvironmentVariableScope.Set("AWS_REGION", "us-east-1");

var phase = TestHelpers.CreatePhase("1", DateTime.UtcNow, DateTime.UtcNow.AddHours(1), 0m);
var projectInfo = TestHelpers.CreateProjectInfo(1, phase);

var strapi = new Mock<IStrapiClient>();
strapi.Setup(x => x.ReceiveProjectInfoAsync("pid", It.IsAny<bool>())).ReturnsAsync(projectInfo);

var dynamoDb = new Mock<IDynamoDBContext>();
Environment.SetEnvironmentVariable("AWS_REGION", "us-east-1");
var start = (DateTime)((dynamic)phase).Start;
dynamoDb.Setup(x => x.LoadAsync<ProjectsInformation>("pid", It.IsAny<CancellationToken>()))
.ReturnsAsync(new ProjectsInformation { ProjectId = "pid", PoolzBackId = 5 });
Expand All @@ -87,6 +89,8 @@ public async Task Validate_Succeeds_ForWhitelistPhase()
[Fact]
public async Task Validate_Throws_WhenAmountLessThanMinimum()
{
using var _ = EnvironmentVariableScope.Set("AWS_REGION", "us-east-1");

var phase = TestHelpers.CreatePhase("1", DateTime.UtcNow, DateTime.UtcNow.AddHours(1), 0m);
var projectInfo = TestHelpers.CreateProjectInfo(1, phase);

Expand All @@ -97,7 +101,6 @@ public async Task Validate_Throws_WhenAmountLessThanMinimum()
var start = (DateTime)((dynamic)phase).Start;
dynamoDb.Setup(x => x.LoadAsync<ProjectsInformation>("pid", It.IsAny<CancellationToken>()))
.ReturnsAsync(new ProjectsInformation { ProjectId = "pid", PoolzBackId = 5 });
Environment.SetEnvironmentVariable("AWS_REGION", "us-east-1");
dynamoDb.Setup(x => x.LoadAsync<WhiteList>(WhiteList.CalculateHashId("pid", start), "0x0000000000000000000000000000000000000123", It.IsAny<CancellationToken>()))
.ReturnsAsync(new WhiteList("pid", start, new EthereumAddress("0x0000000000000000000000000000000000000123"), 10));

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
using System;
using Moq;
using SecretsManager;
using Xunit;
using InvestProvider.Backend.Services.Web3;
using System.Collections.Generic;

namespace InvestProvider.Backend.Tests.Services;

Expand All @@ -14,8 +14,11 @@ public void GetSigner_ReturnsKey_FromSecretsManager()
var secretId = "sid";
var secretKey = "skey";
var privateKey = "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef";
Environment.SetEnvironmentVariable("SECRET_ID_OF_SIGN_ACCOUNT", secretId);
Environment.SetEnvironmentVariable("SECRET_KEY_OF_SIGN_ACCOUNT", secretKey);
using var _ = EnvironmentVariableScope.Set(new Dictionary<string, string?>
{
["SECRET_ID_OF_SIGN_ACCOUNT"] = secretId,
["SECRET_KEY_OF_SIGN_ACCOUNT"] = secretKey,
});

var secrets = new Mock<SecretManager>();
secrets.Setup(x => x.GetSecretValue(secretId, secretKey)).Returns(privateKey);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ private static void SetClient(StrapiClient client, GraphQLHttpClient http)
[Fact]
public async Task ReceiveOnChainInfoAsync_ReturnsInfo()
{
Environment.SetEnvironmentVariable("STRAPI_GRAPHQL_URL", "http://localhost");
using var _ = EnvironmentVariableScope.Set("STRAPI_GRAPHQL_URL", "http://localhost");

var chain = new Chain
{
Expand Down Expand Up @@ -90,7 +90,8 @@ public async Task ReceiveOnChainInfoAsync_ReturnsInfo()
[Fact]
public async Task ReceiveOnChainInfoAsync_Throws_WhenChainMissing()
{
Environment.SetEnvironmentVariable("STRAPI_GRAPHQL_URL", "http://localhost");
using var _ = EnvironmentVariableScope.Set("STRAPI_GRAPHQL_URL", "http://localhost");

var gqlResponse = new GraphQLResponse<OnChainInfoResponse> { Data = new OnChainInfoResponse(Array.Empty<Chain>()) };
var handler = new StubMessageHandler(gqlResponse);
var stub = new GraphQLHttpClient(new GraphQLHttpClientOptions { EndPoint = new Uri("http://localhost") }, new NewtonsoftJsonSerializer(), new HttpClient(handler));
Expand All @@ -103,7 +104,7 @@ public async Task ReceiveOnChainInfoAsync_Throws_WhenChainMissing()
[Fact]
public async Task ReceiveProjectInfoAsync_ReturnsInfo()
{
Environment.SetEnvironmentVariable("STRAPI_GRAPHQL_URL", "http://localhost");
using var _ = EnvironmentVariableScope.Set("STRAPI_GRAPHQL_URL", "http://localhost");

var phaseType = Type.GetType("Poolz.Finance.CSharp.Strapi.ComponentPhaseStartEndAmount, Poolz.Finance.CSharp.Strapi")!;
var phase = Activator.CreateInstance(phaseType)!;
Expand Down Expand Up @@ -139,7 +140,8 @@ public async Task ReceiveProjectInfoAsync_ReturnsInfo()
[Fact]
public async Task ReceiveProjectInfoAsync_Throws_WhenProjectMissing()
{
Environment.SetEnvironmentVariable("STRAPI_GRAPHQL_URL", "http://localhost");
using var _ = EnvironmentVariableScope.Set("STRAPI_GRAPHQL_URL", "http://localhost");

var gqlResponse = new GraphQLResponse<ProjectInfoResponse> { Data = new ProjectInfoResponse(null!) };
var handler = new StubMessageHandler(gqlResponse);
var stub = new GraphQLHttpClient(new GraphQLHttpClientOptions { EndPoint = new Uri("http://localhost") }, new NewtonsoftJsonSerializer(), new HttpClient(handler));
Expand All @@ -152,7 +154,7 @@ public async Task ReceiveProjectInfoAsync_Throws_WhenProjectMissing()
[Fact]
public void SendQuery_Throws_OnGraphQlErrors()
{
Environment.SetEnvironmentVariable("STRAPI_GRAPHQL_URL", "http://localhost");
using var _ = EnvironmentVariableScope.Set("STRAPI_GRAPHQL_URL", "http://localhost");

var errorResp = new GraphQLResponse<OnChainInfoResponse>
{
Expand Down
Loading