45 lines
1.5 KiB
C#
45 lines
1.5 KiB
C#
using QuestionsApi.Models;
|
|
using Xunit;
|
|
|
|
namespace QuestionsApi.Tests;
|
|
|
|
public sealed class CreditEconomyTests
|
|
{
|
|
[Fact]
|
|
public void EarningPolicy_UsesTheAgreedRollingLimit()
|
|
{
|
|
Assert.Equal(20, CreditEconomy.RollingEarningLimit);
|
|
Assert.Equal(TimeSpan.FromHours(24), CreditEconomy.EarningWindow);
|
|
}
|
|
|
|
[Fact]
|
|
public void CreditStatus_DoesNotExposeUserOrOperationIdentifiers()
|
|
{
|
|
Assert.Null(typeof(CreditStatusResponse).GetProperty(nameof(UserCreditAccount.UserId)));
|
|
Assert.Null(typeof(CreditStatusResponse).GetProperty(nameof(UserCreditAccount.RecentEarnings)));
|
|
Assert.Null(typeof(CreditStatusResponse).GetProperty(nameof(UserCreditAccount.Purchases)));
|
|
Assert.Null(typeof(CreditStatusResponse).GetProperty(nameof(UserCreditAccount.AppliedOperations)));
|
|
}
|
|
|
|
[Fact]
|
|
public void CatalogHasStableCoinOnlyUtilityPrices()
|
|
{
|
|
var exam = CreditEconomy.FindProduct(CreditEconomy.ExamTokenSku);
|
|
var reset = CreditEconomy.FindProduct(CreditEconomy.QBankResetTokenSku);
|
|
|
|
Assert.NotNull(exam);
|
|
Assert.Equal(100, exam.CoinPrice);
|
|
Assert.Equal(RzStoreGrant.ExamToken, exam.Grant);
|
|
Assert.NotNull(reset);
|
|
Assert.Equal(300, reset.CoinPrice);
|
|
Assert.Equal(RzStoreGrant.QBankResetToken, reset.Grant);
|
|
Assert.Equal(2, CreditEconomy.Products.Count);
|
|
}
|
|
|
|
[Fact]
|
|
public void UnknownSkuIsRejectedByCatalog()
|
|
{
|
|
Assert.Null(CreditEconomy.FindProduct("cash_purchase"));
|
|
}
|
|
}
|