Beispiel #1
0
        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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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);
        }
Beispiel #8
0
        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);
        }
Beispiel #9
0
 public async Task WhenEnactingUserIdIsNull_ItShouldThrowAnException()
 {
     await this.target.ExecuteAsync(null, TransactionReference.Random(), Now, Comment);
 }