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
28 changes: 24 additions & 4 deletions Core/Resgrid.Config/PaymentProviderConfig.cs
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
using System;
using System.Text.RegularExpressions;

namespace Resgrid.Config
{
public static class PaymentProviderConfig
{
private static readonly Regex PaddleClientTokenRegex = new Regex("^(test|live)_[a-zA-Z0-9]{27}$", RegexOptions.Compiled | RegexOptions.CultureInvariant);

#if DEBUG
public static bool IsTestMode = true;
#else
Expand Down Expand Up @@ -139,17 +142,34 @@ public static string GetPaddlePTT10UserAddonPackageId()
public static string GetPaddleEnvironment()
{
if (IsTestMode)
return PaddleTestEnvironment;
return NormalizeConfigValue(PaddleTestEnvironment).ToLowerInvariant();
else
return PaddleProductionEnvironment;
return NormalizeConfigValue(PaddleProductionEnvironment).ToLowerInvariant();
}

public static string GetPaddleClientToken()
{
if (IsTestMode)
return PaddleTestClientToken;
return NormalizeConfigValue(PaddleTestClientToken);
else
return PaddleProductionClientToken;
return NormalizeConfigValue(PaddleProductionClientToken);
}

public static bool IsValidPaddleEnvironment(string environment)
{
var normalizedEnvironment = NormalizeConfigValue(environment).ToLowerInvariant();
return normalizedEnvironment == "sandbox" || normalizedEnvironment == "production";
}

public static bool IsValidPaddleClientToken(string token)
{
var normalizedToken = NormalizeConfigValue(token);
return !string.IsNullOrWhiteSpace(normalizedToken) && PaddleClientTokenRegex.IsMatch(normalizedToken);
}

private static string NormalizeConfigValue(string value)
{
return string.IsNullOrWhiteSpace(value) ? string.Empty : value.Trim();
}
}
}
62 changes: 62 additions & 0 deletions Tests/Resgrid.Tests/Config/PaymentProviderConfigTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
using FluentAssertions;
using NUnit.Framework;
using Resgrid.Config;

namespace Resgrid.Tests.Config
{
[TestFixture]
public class PaymentProviderConfigTests
{
[Test]
public void should_trim_and_normalize_paddle_environment()
{
var originalIsTestMode = PaymentProviderConfig.IsTestMode;
var originalProductionEnvironment = PaymentProviderConfig.PaddleProductionEnvironment;

try
{
PaymentProviderConfig.IsTestMode = false;
PaymentProviderConfig.PaddleProductionEnvironment = " Production ";

PaymentProviderConfig.GetPaddleEnvironment().Should().Be("production");
PaymentProviderConfig.IsValidPaddleEnvironment(" sandbox ").Should().BeTrue();
PaymentProviderConfig.IsValidPaddleEnvironment("invalid").Should().BeFalse();
}
finally
{
PaymentProviderConfig.IsTestMode = originalIsTestMode;
PaymentProviderConfig.PaddleProductionEnvironment = originalProductionEnvironment;
}
}

[Test]
public void should_trim_paddle_client_token()
{
var originalIsTestMode = PaymentProviderConfig.IsTestMode;
var originalProductionClientToken = PaymentProviderConfig.PaddleProductionClientToken;

try
{
PaymentProviderConfig.IsTestMode = false;
PaymentProviderConfig.PaddleProductionClientToken = " live_7d279f61a3499fed520f7cd8c08 ";

PaymentProviderConfig.GetPaddleClientToken().Should().Be("live_7d279f61a3499fed520f7cd8c08");
}
finally
{
PaymentProviderConfig.IsTestMode = originalIsTestMode;
PaymentProviderConfig.PaddleProductionClientToken = originalProductionClientToken;
}
}

[TestCase("live_7d279f61a3499fed520f7cd8c08", true)]
[TestCase("test_4s7gd50ap72ms92nnsa20ma61lt", true)]
[TestCase(" paddletoken_live_1940dc25e601d953fce733eeddfAty ", false)]
[TestCase("live_7d279f61a3499fed520f7cd8c08/", false)]
[TestCase("", false)]
public void should_validate_documented_paddle_client_token_format(string token, bool expectedResult)
{
PaymentProviderConfig.IsValidPaddleClientToken(token).Should().Be(expectedResult);
}
}
}
Loading
Loading