public void Initialize()
        {
            this.guidCreator = new Mock <IGuidCreator>(MockBehavior.Strict);

            this.target = new SaveCustomerCreditToLedgerDbStatement(
                this.guidCreator.Object,
                new Mock <IFifthweekDbConnectionFactory>(MockBehavior.Strict).Object);
        }
        public async Task WhenTotalAmountEqualsCreditAmount_ItShouldStoreLedgerRecords()
        {
            await this.DatabaseTestAsync(async testDatabase =>
            {
                byte sequentialGuidIndex = 0;
                this.guidCreator.Setup(v => v.CreateSqlSequential()).Returns(() => this.CreateGuid(sequentialGuidIndex++));

                this.target = new SaveCustomerCreditToLedgerDbStatement(this.guidCreator.Object, testDatabase);
                await testDatabase.TakeSnapshotAsync();

                await this.target.ExecuteAsync(
                    UserId,
                    Timestamp,
                    CreditAmount,
                    CreditAmount,
                    TransactionReference,
                    StripeChargeId,
                    TaxamoTransactionKey);

                return(new ExpectedSideEffects
                {
                    Inserts = new List <IIdentityEquatable>
                    {
                        new AppendOnlyLedgerRecord(
                            this.CreateGuid(0),
                            UserId.Value,
                            null,
                            Timestamp,
                            -CreditAmount.Value,
                            LedgerAccountType.Stripe,
                            LedgerTransactionType.CreditAddition,
                            TransactionReference.Value,
                            null,
                            null,
                            StripeChargeId,
                            TaxamoTransactionKey),
                        new AppendOnlyLedgerRecord(
                            this.CreateGuid(1),
                            UserId.Value,
                            null,
                            Timestamp,
                            CreditAmount.Value,
                            LedgerAccountType.FifthweekCredit,
                            LedgerTransactionType.CreditAddition,
                            TransactionReference.Value,
                            null,
                            null,
                            StripeChargeId,
                            TaxamoTransactionKey),
                    }
                });
            });
        }