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); }
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())); }); }
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); }
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()); }
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); }
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); }