// TODO: add functionality based on user settings // TODO: add multiple ways to distribute funds public static bool PeriodPay(User user) { var subscriptionInfo = UserSubscriptionInfoRepository.FindOrCreate(user); var paydayTime = subscriptionInfo.last_paid.AddMonths(1); if (DateTime.Now < paydayTime) { return(false); } var currency = subscriptionInfo.selected_currency; var balance = UserBalanceRepository.FindOrCreate(user, currency); decimal amount = 0; amount = balance.balance < subscriptionInfo.selected_amount ? balance.balance : subscriptionInfo.selected_amount; var randomProjectsToFund = 4; // TODO: get from user settings var amountToFundRandomProjects = amount / randomProjectsToFund; for (int i = 1; i <= randomProjectsToFund; i++) { var randomProject = ProjectRepository.FindRandom(); SubscriptionFundingUtils.FundEntity( user, randomProject.id, EntityType.Project, amountToFundRandomProjects, currency ); } return(true); }
public void FindOrCreate_DataCorrect_InfoCreated() { var user = UserFaker.Create(); Assert.IsNull(UserSubscriptionInfoRepository.Find(user)); UserSubscriptionInfoRepository.FindOrCreate(user); Assert.NotNull(UserSubscriptionInfoRepository.Find(user)); }
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); }