Beispiel #1
0
        private void Seed()
        {
            _factory.CreateClient();

            using var scope = _factory.Services.CreateScope();

            var context = scope.ServiceProvider.GetService <InvoiceDbContext>();

            context.Invoices.RemoveRange(context.Invoices);

            context.Invoices.Add(InvoiceFaker.Create(1, "Joao"));
            context.Invoices.Add(InvoiceFaker.Create(2, "Joao"));
            context.Invoices.Add(InvoiceFaker.Create(3, "Joao", status: Status.Cancelled));
            context.Invoices.Add(InvoiceFaker.Create(4, "Maria"));
            context.Invoices.Add(InvoiceFaker.Create(5, "Maria", status: Status.Cancelled));
            context.Invoices.Add(InvoiceFaker.Create(6, "Maria", status: Status.Submitted));
            context.Invoices.Add(InvoiceFaker.Create(7, "Jose"));
            context.Invoices.Add(InvoiceFaker.Create(8, "Jose", status: Status.Cancelled));
            context.Invoices.Add(InvoiceFaker.Create(9, "Jose", status: Status.Submitted));
            context.Invoices.Add(InvoiceFaker.Create(10, "Pedro"));
            context.Invoices.Add(InvoiceFaker.Create(11, "Pedro", status: Status.Cancelled));
            context.Invoices.Add(InvoiceFaker.Create(12, "Pedro", status: Status.Submitted));

            context.SaveChanges();
        }
Beispiel #2
0
        public void Create_DataCorrect_BalanceAndTransactionCreated()
        {
            var invoice = InvoiceFaker.Create();

            var balance = FundingBalanceRepository.Create(
                invoice.entity_id, invoice.entity_type, invoice.currency_type
                );

            FundingBalanceRepository.AddFunds(balance, invoice);

            Assert.NotNull(balance);

            var txs = FundingTransactionRepository.Get(invoice.entity_id, invoice.entity_type, invoice.currency_type);

            Assert.AreEqual(1, txs.Length);

            var transaction = txs[0];

            balance = balance.Refresh();

            Assert.AreEqual(invoice.amount, balance.balance);

            Assert.AreEqual(balance.entity_id, transaction.entity_id);
            Assert.AreEqual(balance.entity_type, transaction.entity_type);
            Assert.AreEqual(balance.currency_type, transaction.currency_type);
        }
Beispiel #3
0
        public void UpdateStatus_DataCorrect_StatusUpdated()
        {
            var invoice = InvoiceFaker.Create();

            Assert.AreEqual(InvoiceStatus.Created, invoice.status);

            InvoiceRepository.UpdateStatus(invoice, InvoiceStatus.RequiresConfirmation);

            Assert.AreEqual(InvoiceStatus.RequiresConfirmation, invoice.Refresh().status);
        }
Beispiel #4
0
        public void Deposit_InvoiceExists_ThrowsException()
        {
            var user    = UserFaker.Create();
            var invoice = InvoiceFaker.Create(user, user.id, EntityType.UserBalance);

            Assert.IsNull(FundingTransactionRepository.Find(user, invoice, user.id, EntityType.UserBalance));

            FundingTransactionRepository.CreateDeposit(user, invoice);

            Assert.Throws <Exception>(
                () => { UserBalanceUtils.Deposit(user, invoice); });
        }
        public void Create_DataCorrect_GotTransaction()
        {
            var user = UserFaker.Create();

            var project = ProjectFaker.Create(user);

            var invoice = InvoiceFaker.Create(user, project.id);

            var tx = FundingTransactionRepository.Create(
                user, project.id, EntityType.Project, invoice, 0.05M, CurrencyType.BitCoin
                );

            Assert.True(tx.id > 0);
        }
Beispiel #6
0
        public void GetActive_DataCorrect_GotInvoices()
        {
            var user = UserFaker.Create();

            InvoiceFaker.Create(user);

            var result = new Browser(new DefaultNancyBootstrapper())
                         .Get("/api/v1/me/invoices/active", with => {
                with.HttpRequest();
                with.Query("api_token", Jwt.FromUserId(user.id));
            }).Result;

            Assert.AreEqual(1, global::App.DL.Model.Funding.Invoice.GetActiveForUser(user).Length);
            Assert.AreEqual(HttpStatusCode.OK, result.StatusCode);
        }
Beispiel #7
0
        public void Edit_ChangingStatusOfOtherUsersInvoice_Forbidden()
        {
            var user = UserFaker.Create();

            var invoice = InvoiceFaker.Create();

            Assert.AreEqual(InvoiceStatus.Created, invoice.status);

            var result = new Browser(new DefaultNancyBootstrapper())
                         .Patch("/api/v1/me/invoice/status/update", with => {
                with.HttpRequest();
                with.Query("api_token", Jwt.FromUserId(user.id));
                with.Query("invoice_guid", invoice.guid);
                with.Query("status", InvoiceStatus.RequiresConfirmation.ToString());
            }).Result;

            Assert.AreEqual(HttpStatusCode.Forbidden, result.StatusCode);
            Assert.AreEqual(InvoiceStatus.Created, invoice.Refresh().status);
        }
Beispiel #8
0
        public void Deposit_DataCorrect_BalanceIncreasedAndTxCreated()
        {
            var user    = UserFaker.Create();
            var invoice = InvoiceFaker.Create(user, user.id, EntityType.UserBalance);

            Assert.IsNull(FundingTransactionRepository.Find(user, invoice, user.id, EntityType.UserBalance));

            var balance = UserBalanceUtils.Deposit(user, invoice);

            var tx = FundingTransactionRepository.Find(user, invoice, user.id, EntityType.UserBalance);

            Assert.IsNotNull(tx);

            Assert.AreEqual(user.id, tx.entity_id);
            Assert.AreEqual(user.id, tx.from_user_id);
            Assert.AreEqual(EntityType.UserBalance, tx.entity_type);

            Assert.AreEqual(invoice.amount, balance.balance);
        }
        public void ProcessConfirmedInvoice_DataCorrect_InvoiceProcessed()
        {
            var user = UserFaker.Create();

            var balance = UserBalanceRepository.FindOrCreate(user, CurrencyType.BitCoin);

            var invoice = InvoiceFaker.Create(user, balance.id, EntityType.UserBalance);

            invoice = invoice.UpdateStatus(InvoiceStatus.Confirmed).Refresh();

            invoice = InvoiceUtils.ProcessConfirmedInvoice(invoice).Refresh();

            balance = balance.Refresh();

            Assert.NotNull(balance);

            Assert.AreEqual(InvoiceStatus.Done, invoice.status);
            Assert.AreEqual(invoice.amount, balance.balance);
        }
Beispiel #10
0
        public void Deposit_2Deposits_SumCorrect()
        {
            var user    = UserFaker.Create();
            var invoice = InvoiceFaker.Create(user, user.id, EntityType.UserBalance);

            Assert.IsNull(FundingTransactionRepository.Find(user, invoice, user.id, EntityType.UserBalance));

            var balance = UserBalanceUtils.Deposit(user, invoice);

            var tx = FundingTransactionRepository.Find(user, invoice, user.id, EntityType.UserBalance);

            Assert.IsNotNull(tx);

            Assert.AreEqual(invoice.amount, balance.balance);

            var invoice2 = InvoiceFaker.Create(user, user.id, EntityType.UserBalance);

            balance = UserBalanceUtils.Deposit(user, invoice2);

            Assert.AreEqual(invoice.amount + invoice2.amount, balance.balance);
        }
Beispiel #11
0
        public void AddFunds_DataCorrect_AddFunds()
        {
            var user    = UserFaker.Create();
            var invoice = InvoiceFaker.Create(user);

            var balance = FundingBalanceRepository.Create(
                invoice.entity_id, invoice.entity_type, invoice.currency_type
                );

            FundingBalanceRepository.AddFunds(balance, invoice);

            Assert.NotNull(balance);

            balance = balance.Refresh();

            Assert.AreEqual(invoice.amount, balance.balance);

            var newInvoice = InvoiceFaker.Create(user, invoice.entity_id);

            balance = FundingBalanceRepository.AddFunds(balance, newInvoice).Refresh();

            Assert.AreEqual(invoice.amount + newInvoice.amount, balance.balance);
        }