public async Task WhenRecordsAreNotForSubscriptionPayment_ItShouldThrowAnException() { byte sequentialGuidIndex = 0; this.guidCreator.Setup(v => v.CreateSqlSequential()).Returns(() => CreateGuid(0, sequentialGuidIndex++)); var transactionReference = TransactionReference.Random(); var record = new AppendOnlyLedgerRecord( CreateGuid(0, 0), SubscriberId.Value, CreatorId.Value, Now, 100, LedgerAccountType.FifthweekCredit, LedgerTransactionType.CreditAddition, transactionReference.Value, null, "Performed by " + EnactingUserId + " - comment", null, null); this.getRecordsForTransaction.Setup(v => v.ExecuteAsync(transactionReference)) .ReturnsAsync(new List <AppendOnlyLedgerRecord> { record }); await this.target.ExecuteAsync(EnactingUserId, transactionReference, Now, Comment); }
private static TransactionReference AddCredit(FifthweekDbContext databaseContext, Random random, UserId userId, decimal amount) { var transactionReference = TransactionReference.Random(); AddAppendOnlyLedgerRecord(databaseContext, random, userId, null, -1.2m * amount, LedgerAccountType.Stripe, LedgerTransactionType.CreditAddition, transactionReference); AddAppendOnlyLedgerRecord(databaseContext, random, userId, null, amount, LedgerAccountType.FifthweekCredit, LedgerTransactionType.CreditAddition, transactionReference); AddAppendOnlyLedgerRecord(databaseContext, random, userId, null, (1.2m * amount) - amount, LedgerAccountType.SalesTax, LedgerTransactionType.CreditAddition, transactionReference); return(transactionReference); }
public async Task WhenNoRecords_ItShouldReturnNull() { var transactionReference = TransactionReference.Random(); this.getRecordsForTransaction.Setup(v => v.ExecuteAsync(transactionReference)).ReturnsAsync(new List <AppendOnlyLedgerRecord>()); var result = await this.target.ExecuteAsync(transactionReference); Assert.IsNull(result); }
public async Task WhenNoMatchingRecords_ItShouldThrowAnException() { byte sequentialGuidIndex = 0; this.guidCreator.Setup(v => v.CreateSqlSequential()).Returns(() => CreateGuid(0, sequentialGuidIndex++)); var transactionReference = TransactionReference.Random(); this.getRecordsForTransaction.Setup(v => v.ExecuteAsync(transactionReference)) .ReturnsAsync(new List <AppendOnlyLedgerRecord>()); await this.target.ExecuteAsync(EnactingUserId, transactionReference, Now, Comment); }
private static TransactionReference PayCreator( FifthweekDbContext databaseContext, Random random, UserId sourceUserId, UserId destinationUserId, decimal amount) { var transactionReference = TransactionReference.Random(); AddAppendOnlyLedgerRecord(databaseContext, random, sourceUserId, destinationUserId, -amount, LedgerAccountType.FifthweekCredit, LedgerTransactionType.SubscriptionPayment, transactionReference); AddAppendOnlyLedgerRecord(databaseContext, random, null, destinationUserId, amount, LedgerAccountType.FifthweekRevenue, LedgerTransactionType.SubscriptionPayment, transactionReference); AddAppendOnlyLedgerRecord(databaseContext, random, null, destinationUserId, -0.7m * amount, LedgerAccountType.FifthweekRevenue, LedgerTransactionType.SubscriptionPayment, transactionReference); AddAppendOnlyLedgerRecord(databaseContext, random, destinationUserId, destinationUserId, 0.7m * amount, LedgerAccountType.FifthweekRevenue, LedgerTransactionType.SubscriptionPayment, transactionReference); return(transactionReference); }
private static List <AppendOnlyLedgerRecord> AddCredit(FifthweekDbContext databaseContext, DateTime timestamp, UserId userId, decimal amount, TransactionReference transactionReference = null) { var transactionType = amount < 0 ? LedgerTransactionType.CreditRefund : LedgerTransactionType.CreditAddition; var result = new List <AppendOnlyLedgerRecord>(); if (transactionReference == null) { transactionReference = TransactionReference.Random(); } result.Add(AddAppendOnlyLedgerRecord(databaseContext, timestamp, userId, null, -1.2m * amount, LedgerAccountType.Stripe, transactionType, transactionReference)); result.Add(AddAppendOnlyLedgerRecord(databaseContext, timestamp, userId, null, amount, LedgerAccountType.FifthweekCredit, transactionType, transactionReference)); result.Add(AddAppendOnlyLedgerRecord(databaseContext, timestamp, userId, null, (1.2m * amount) - amount, LedgerAccountType.SalesTax, transactionType, transactionReference)); return(result); }
private static List <AppendOnlyLedgerRecord> PayCreator( FifthweekDbContext databaseContext, DateTime timestamp, UserId sourceUserId, UserId destinationUserId, decimal amount) { var result = new List <AppendOnlyLedgerRecord>(); var transactionReference = TransactionReference.Random(); result.Add(AddAppendOnlyLedgerRecord(databaseContext, timestamp, sourceUserId, destinationUserId, -amount, LedgerAccountType.FifthweekCredit, LedgerTransactionType.SubscriptionPayment, transactionReference)); result.Add(AddAppendOnlyLedgerRecord(databaseContext, timestamp, null, destinationUserId, amount, LedgerAccountType.FifthweekRevenue, LedgerTransactionType.SubscriptionPayment, transactionReference)); result.Add(AddAppendOnlyLedgerRecord(databaseContext, timestamp, null, destinationUserId, -0.7m * amount, LedgerAccountType.FifthweekRevenue, LedgerTransactionType.SubscriptionPayment, transactionReference)); result.Add(AddAppendOnlyLedgerRecord(databaseContext, timestamp, destinationUserId, destinationUserId, 0.7m * amount, LedgerAccountType.FifthweekRevenue, LedgerTransactionType.SubscriptionPayment, transactionReference)); return(result); }
public async Task WhenNotCreditRecord_ItThrowAnException() { var transactionReference = TransactionReference.Random(); var refundData = AddRefund(UserId, transactionReference.Value, 100); var record = CreateAppendOnlyLedgerRecord( new Random(), UserId, UserId.Random(), -100, LedgerAccountType.FifthweekCredit, LedgerTransactionType.SubscriptionPayment, transactionReference.Value); this.getRecordsForTransaction.Setup(v => v.ExecuteAsync(transactionReference)).ReturnsAsync(new List <AppendOnlyLedgerRecord> { record }); await this.target.ExecuteAsync(transactionReference); }
public async Task WhenEnactingUserIdIsNull_ItShouldThrowAnException() { await this.target.ExecuteAsync(null, TransactionReference.Random(), Now, Comment); }