public void Save_EmptyName_CorrectDefault()
        {
            var testList = new List<Account>();
            const string nameInput = "";

            var accountDataAccessSetup = new Mock<IDataAccess<Account>>();
            accountDataAccessSetup.Setup(x => x.SaveItem(It.IsAny<Account>()))
                .Callback((Account acc) => testList.Add(acc));

            accountDataAccessSetup.Setup(x => x.LoadList(null)).Returns(new List<Account>());

            var accountRepository = new AccountRepository(accountDataAccessSetup.Object,
                new Mock<INotificationService>().Object);

            var account = new Account
            {
                Name = nameInput,
                CurrentBalance = 6034
            };

            accountRepository.Save(account);

            Assert.AreSame(testList[0], account);
            Assert.AreSame(testList[0].Name, account.Name);
        }
        public void CheckRecurringPayments_Daily_CorrectPaymentsCreated()
        {
            //Setup
            var sqliteConnector = new SqliteConnectionCreator(new WindowsSqliteConnectionFactory(), 
                new MvxWindowsCommonFileStore());

            var accountRepo = new AccountRepository(new AccountDataAccess(sqliteConnector));

            var paymentRepo = new PaymentRepository(new PaymentDataAccess(sqliteConnector),
                new RecurringPaymentDataAccess(sqliteConnector),
                accountRepo,
                new CategoryRepository(new CategoryDataAccess(sqliteConnector)));

            var account = new Account
            {
                Name = "test1",
                CurrentBalance = 100
            };

            accountRepo.Save(account);

            var payment = new Payment
            {
                ChargedAccount = account,
                Amount = 10,
                Date = DateTime.Today.AddDays(-1),
                IsRecurring = true
            };

            payment.RecurringPayment =
                RecurringPaymentHelper.
                    GetRecurringFromPayment(payment,
                        true,
                        (int) PaymentRecurrence.Daily,
                        DateTime.Now.AddYears(1));

            paymentRepo.Save(payment);

            //Execution
            new RecurringPaymentManager(paymentRepo, accountRepo).CheckRecurringPayments();

            //Assert
            Assert.AreEqual(90, account.CurrentBalance);
            Assert.AreEqual(90, accountRepo.Data[0].CurrentBalance);

            Assert.AreEqual(2, paymentRepo.Data.Count);

            Assert.IsTrue(paymentRepo.Data[0].IsCleared);
            Assert.IsTrue(paymentRepo.Data[1].IsCleared);

            Assert.IsTrue(paymentRepo.Data[0].IsRecurring);
            Assert.IsTrue(paymentRepo.Data[1].IsRecurring);

            Assert.AreNotEqual(0, paymentRepo.Data[0].RecurringPaymentId);
            Assert.AreNotEqual(0, paymentRepo.Data[1].RecurringPaymentId);

            Assert.IsNotNull(paymentRepo.Data[0].RecurringPayment);
            Assert.IsNotNull(paymentRepo.Data[1].RecurringPayment);
        }
        public ClearPaymentBackgroundTask()
        {
#if !DEBUG
            HockeyClient.Current.Configure(ServiceConstants.HOCKEY_APP_WINDOWS_ID);
#endif

            HockeyClient.Current.TrackEvent("BackgroundTask");

            var sqliteConnectionCreator = new DatabaseManager(new WindowsSqliteConnectionFactory(),
                new MvxWindowsCommonFileStore());
            var notificationService = new NotificationService();

            var accountRepository = new AccountRepository(new AccountDataAccess(sqliteConnectionCreator),
                notificationService);

            paymentManager = new PaymentManager(
                new PaymentRepository(new PaymentDataAccess(sqliteConnectionCreator),
                    new RecurringPaymentDataAccess(sqliteConnectionCreator),
                    accountRepository,
                    new CategoryRepository(new CategoryDataAccess(sqliteConnectionCreator), notificationService),
                    notificationService),
                accountRepository,
                null);
        }
        public void GoToAddPayment_Expense_CorrectPreparation()
        {
            Setup();
            // for navigation parsing
            Ioc.RegisterSingleton<IMvxStringToTypeParser>(new MvxStringToTypeParser());

            var dbHelper = new Mock<IDatabaseManager>().Object;
            var accountRepository = new AccountRepository(new AccountDataAccess(dbHelper),
                new Mock<INotificationService>().Object);
            var paymentRepository = new PaymentRepository(new PaymentDataAccess(dbHelper),
                new RecurringPaymentDataAccess(dbHelper),
                accountRepository,
                new CategoryRepository(new CategoryDataAccess(dbHelper),
                    new Mock<INotificationService>().Object),
                new Mock<INotificationService>().Object);
            var paymentManager = new PaymentManager(paymentRepository, accountRepository,
                new Mock<IDialogService>().Object);

            var defaultManager = new DefaultManager(accountRepository);

            var modifyPaymentViewModel =
                new ModifyPaymentViewModel(paymentRepository,
                    accountRepository,
                    new Mock<IDialogService>().Object,
                    paymentManager,
                    defaultManager);

            var mainViewModel = new MainViewModel();

            mainViewModel.GoToAddPaymentCommand.Execute(PaymentType.Expense.ToString());

            modifyPaymentViewModel.IsEdit.ShouldBeFalse();
            modifyPaymentViewModel.IsEndless.ShouldBeTrue();
            modifyPaymentViewModel.IsTransfer.ShouldBeFalse();
            modifyPaymentViewModel.SelectedPayment.Type.ShouldBe((int) PaymentType.Expense);
        }
        public void Delete_None_AccountDeleted()
        {
            var testList = new List<Account>();

            var accountDataAccessSetup = new Mock<IDataAccess<Account>>();
            accountDataAccessSetup.Setup(x => x.SaveItem(It.IsAny<Account>()))
                .Callback((Account acc) => testList.Add(acc));

            var account = new Account
            {
                Name = "Sparkonto",
                CurrentBalance = 6034
            };

            accountDataAccessSetup.Setup(x => x.LoadList(null)).Returns(new List<Account>
            {
                account
            });

            var repository = new AccountRepository(accountDataAccessSetup.Object,
                new Mock<INotificationService>().Object);

            repository.Delete(account);

            Assert.IsFalse(testList.Any());
            Assert.IsFalse(repository.Data.Any());
        }
        public void Load_AccountDataAccess_DataInitialized()
        {
            var accountDataAccessSetup = new Mock<IDataAccess<Account>>();
            accountDataAccessSetup.Setup(x => x.LoadList(null)).Returns(new List<Account>
            {
                new Account {Id = 10},
                new Account {Id = 15}
            });

            var accountRepository = new AccountRepository(accountDataAccessSetup.Object,
                new Mock<INotificationService>().Object);
            accountRepository.Load();

            Assert.IsTrue(accountRepository.Data.Any(x => x.Id == 10));
            Assert.IsTrue(accountRepository.Data.Any(x => x.Id == 15));
        }