Exemple #1
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);
        }
 public static FundingTransaction Create(int entityId = 0, EntityType entityType = EntityType.Project)
 {
     return(FundingTransactionRepository.Create(
                UserFaker.Create(),
                entityId == 0 ? Rand.Int() : entityId,
                entityType,
                InvoiceFaker.Create(),
                0.01M * Rand.SmallInt(),
                CurrencyType.Ethereum
                ));
 }
        public void Create_WithoutInvoice_TransactionCreated()
        {
            var user = UserFaker.Create();

            var project = ProjectFaker.Create(user);

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

            Assert.True(tx.id > 0);
        }
Exemple #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);
        }
        public RegisterBonus()
        {
            Post("/api/v1/schedule/user/register_bonus/start", _ => {
                var task = Task.Run(() => {
                    int tokenBonus = Convert.ToInt32(
                        AppConfig.GetConfiguration("user:registration:token_bonus")
                        );
                    if (tokenBonus <= 0)
                    {
                        return;
                    }

                    int pageIndex = 1;
                    var users     = DL.Model.User.User.Paginate(pageIndex, 100);
                    while (users.Length > 0)
                    {
                        foreach (var user in users)
                        {
                            try {
                                if (
                                    !user.EmailConfirmed() || FundingTransactionRepository.Get(user).Length > 0
                                    )
                                {
                                    continue;
                                }
                                var balance = UserBalanceRepository.FindOrCreate(user, CurrencyType.GitComToken);
                                balance.UpdateBalance(balance.balance + tokenBonus);
                                FundingTransactionRepository.Create(
                                    user, user.id, EntityType.UserBalance, 2M, CurrencyType.GitComToken,
                                    "Registration bonus"
                                    );
                            }
                            catch (Exception e) {
                                SentrySdk.CaptureException(e);
                            }
                        }

                        ++pageIndex;
                        users = DL.Model.User.User.Paginate(pageIndex, 100);
                    }
                });
                JobsPool.Get().Push(task);
                return(HttpResponse.Data(new JObject()));
            });
        }
Exemple #7
0
        public void FundEntity_DataCorrect_EntityFundedTxCreated()
        {
            var user = UserFaker.Create();

            var project = ProjectFaker.Create();

            var amount = Rand.SmallDecimal();

            var balance =
                SubscriptionFundingUtils.FundEntity(user, project.id, EntityType.Project, amount, CurrencyType.BitCoin);

            Assert.AreEqual(amount, balance.balance);

            var txs = FundingTransactionRepository.Get(project.id, EntityType.Project, CurrencyType.BitCoin);

            Assert.AreEqual(1, txs.Length);
            Assert.AreEqual(amount, txs[0].amount);
        }
Exemple #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 static UserBalance Deposit(User user, Invoice invoice)
        {
            if (invoice.entity_type != EntityType.UserBalance)
            {
                throw new Exception("Deposit can be done only for UserBalance");
            }

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

            var balance = UserBalanceRepository.FindOrCreate(invoice);

            if (existingTx != null)
            {
                throw new Exception("Transaction for specified invoice already exists");
            }

            FundingTransactionUtils.CreateTxFromInvoice(invoice);
            UserBalanceRepository.UpdateBalance(balance, balance.balance + invoice.amount);

            return(balance.Refresh());
        }
Exemple #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);
        }
Exemple #11
0
        public void RegisterBonus_Ok()
        {
            var user = UserFaker.Create();

            var browser = new Browser(new DefaultNancyBootstrapper());
            var result  = browser
                          .Post("/api/v1/schedule/user/register_bonus/start", with => {
                with.HttpRequest();
                with.Query("schedule_token", AppConfig.GetConfiguration("auth:schedule:token"));
            }).Result;

            Assert.Zero(FundingTransactionRepository.Get(user).Length);

            JobsPool.Get().WaitAll();

            Assert.True(FundingTransactionRepository.Get(user).Length == 1);
            var balance    = UserBalanceRepository.Find(user, CurrencyType.GitComToken);
            var tokenBonus = System.Convert.ToInt32(AppConfig.GetConfiguration("user:registration:token_bonus"));

            Assert.AreEqual(tokenBonus, balance.balance);
        }
        public void FundEntity_DataCorrect_EntityFunded()
        {
            var user = UserFaker.Create();

            var amount = Rand.SmallDecimal();

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

            balance.UpdateBalance(amount);

            var info = UserSubscriptionInfoRepository.FindOrCreate(user);

            info.UpdateSelectedAmount(amount).Refresh();

            ProjectFaker.Create();

            SubscriptionUtils.PeriodPay(user);

            var txs = FundingTransactionRepository.Get(user);

            Assert.True(txs.Length > 0);
            Assert.True(txs[0].amount > 0);
        }