public StatisticCashFlowViewModel(IPaymentRepository paymentRepository, 
     ISettingsManager settingsManager,
     IMvxMessenger messenger) 
     : base(messenger)
 {
     this.settingsManager = settingsManager;
     cashFlowDataProvider = new CashFlowDataProvider(paymentRepository);
     CashFlowModel = GetCashFlowModel();
 }
        private void UpdateMainTile()
        {
            var cashFlow =
                new CashFlowDataProvider(paymentRepository)
                    .GetCashFlow(DateTime.Today.GetFirstDayOfMonth(), DateTime.Today.GetLastDayOfMonth());

            new TileUpdateService().UpdateMainTile(cashFlow.Income.Label, cashFlow.Expense.Label,
                cashFlow.Revenue.Label);
        }
 public StatisticMonthlyCashFlowViewModel(CashFlowDataProvider monthlyExpensesDataProvider,
     ISettingsManager settingsManager,
     IMvxMessenger messenger)
     : base(DateTime.Today.AddMonths(-5), DateTime.Today.GetLastDayOfMonth(), messenger)
 {
     this.monthlyExpensesDataProvider = monthlyExpensesDataProvider;
     this.settingsManager = settingsManager;
     MonthlyExpensesModel = GetModel();
 }
        public void GetValues_SetupData_ListWithoutTransfer()
        {
            //Setup
            var paymentRepoSetup = new Mock<IPaymentRepository>();
            paymentRepoSetup.Setup(x => x.GetList(It.IsAny<Expression<Func<PaymentViewModel, bool>>>())).Returns(new List<PaymentViewModel>
            {
                new PaymentViewModel
                {
                    Id = 1,
                    Type = PaymentType.Income,
                    Date = DateTime.Today,
                    Amount = 60
                },
                new PaymentViewModel
                {
                    Id = 2,
                    Type = PaymentType.Expense,
                    Date = DateTime.Today,
                    Amount = 50
                },
                new PaymentViewModel
                {
                    Id = 3,
                    Type = PaymentType.Transfer,
                    Date = DateTime.Today,
                    Amount = 40
                }
            });

            //Excution
            var result = new CashFlowDataProvider(paymentRepoSetup.Object).GetCashFlow(DateTime.Today.AddDays(-3),
                DateTime.Today.AddDays(3));

            //Assertion
            result.Income.Value.ShouldBe(60);
            result.Expense.Value.ShouldBe(50);
            result.Revenue.Value.ShouldBe(10);
        }
        public void GetValues_SetupData_CalculatedCorrectTimeRange()
        {
            var paymentList = new List<PaymentViewModel>
            {
                new PaymentViewModel
                {
                    Id = 1,
                    Type = (int) PaymentType.Expense,
                    Date = DateTime.Today,
                    Amount = 60
                },
                new PaymentViewModel
                {
                    Id = 2,
                    Type = (int) PaymentType.Expense,
                    Date = DateTime.Today.AddDays(5),
                    Amount = 50
                },
                new PaymentViewModel
                {
                    Id = 3,
                    Type = (int) PaymentType.Expense,
                    Date = DateTime.Today.AddDays(-5),
                    Amount = 40
                }
            };

            //Setup
            var paymentRepoSetup = new Mock<IPaymentRepository>();
            paymentRepoSetup.Setup(x => x.GetList(It.IsAny<Expression<Func<PaymentViewModel, bool>>>()))
                .Returns((Expression<Func<PaymentViewModel, bool>> filter) => paymentList.Where(filter.Compile()).ToList());

            //Excution
            var result = new CashFlowDataProvider(paymentRepoSetup.Object).GetCashFlow(DateTime.Today.AddDays(-3),
                DateTime.Today.AddDays(3));

            //Assertion
            result.Income.Value.ShouldBe(0);
            result.Expense.Value.ShouldBe(60);
            result.Revenue.Value.ShouldBe(-60);
        }