68 lines
2.4 KiB
C#
68 lines
2.4 KiB
C#
using QuestionsApi.Models;
|
|
using Xunit;
|
|
|
|
namespace QuestionsApi.Tests;
|
|
|
|
public sealed class CreditEconomyTests
|
|
{
|
|
[Fact]
|
|
public void EarningPolicy_UsesTheAgreedRollingLimit()
|
|
{
|
|
Assert.Equal(30, CreditEconomy.RollingEarningLimit);
|
|
Assert.Equal(TimeSpan.FromHours(24), CreditEconomy.EarningWindow);
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData(1, 1)]
|
|
[InlineData(3, 1)]
|
|
[InlineData(4, 2)]
|
|
[InlineData(5, 3)]
|
|
public void FirstCorrectAwardsScaleWithStoredDifficulty(int difficulty, int expected) =>
|
|
Assert.Equal(expected, CreditEconomy.FirstCorrectAmount(difficulty));
|
|
|
|
[Fact]
|
|
public void DelayedRecoveryReplacesTheNormalReviewAward()
|
|
{
|
|
Assert.Equal(1, CreditEconomy.ReviewAmount(false));
|
|
Assert.Equal(3, CreditEconomy.ReviewAmount(true));
|
|
}
|
|
|
|
[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 PublicLedgerEntry_DoesNotExposeUserOrOperationIdentifiers()
|
|
{
|
|
Assert.Null(typeof(CreditLedgerEntryResponse).GetProperty(nameof(CreditLedgerEntry.UserId)));
|
|
Assert.Null(typeof(CreditLedgerEntryResponse).GetProperty(nameof(CreditLedgerEntry.OperationId)));
|
|
Assert.Null(typeof(CreditLedgerEntryResponse).GetProperty(nameof(CreditLedgerEntry.SourceId)));
|
|
}
|
|
|
|
[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"));
|
|
}
|
|
}
|