Example #1
0
        public DataTable GetExpenses(string pos, string id)
        {
            ExpenseRepository dataAccess = new ExpenseRepository();
            DataTable         datatable  = dataAccess.GetExpenses(pos, id);

            return(datatable);
        }
Example #2
0
        public void FillCurrency()
        {
            var repo = new ExpenseRepository();
            var List = repo.FillCurrency();

            ViewBag.Currency = new SelectList(List, "Id", "Name");
        }
Example #3
0
        public ActionResult Delete(int Id)
        {
            ViewBag.Title = "Delete";

            var result1 = new ExpenseRepository().CHECK(Id);

            if (result1 > 0)
            {
                TempData["error"]         = "Sorry!!..Already Used!!";
                TempData["SupplyOrderNo"] = null;
                return(RedirectToAction("Edit", new { id = Id }));
            }

            else
            {
                var result2 = new ExpenseRepository().DeleteExpenseBillDT(Id);
                var result3 = new ExpenseRepository().DeleteExpenseBillHD(Id);

                if (Id > 0)
                {
                    TempData["Success"] = "Deleted Successfully!";
                    //return RedirectToAction("PreviousList");
                    return(RedirectToAction("Create"));
                }

                else
                {
                    TempData["error"]         = "Oops!!..Something Went Wrong!!";
                    TempData["SupplyOrderNo"] = null;
                    return(RedirectToAction("Edit", new { id = Id }));
                }
            }
        }
Example #4
0
        public Expense GetExpenseById(int expenseId)
        {
            ExpenseRepository dataAccess = new ExpenseRepository();
            Expense           datatable  = dataAccess.GetExpenseById(expenseId);

            return(datatable);
        }
Example #5
0
        private BudgetSummaryModel AddBudgetSummaryModelSettings(BudgetSummaryModel model, long accountId, bool sharedAccount)
        {
            var categories = CategoryHelper.GetCategories();
            var expenses   = ExpenseRepository.GetAccountExpenses(accountId);
            var settings   = SettingsHelper.GetCategorySettings(accountId);

            foreach (var setting in settings.Settings)
            {
                if (!setting.Data.IsActive)
                {
                    continue;
                }
                if (setting.Data.Unlimited)
                {
                    continue;
                }
                if (setting.Data.Amount <= 0)
                {
                    continue;
                }

                model.AddCategoryTable(setting.Data.Duration, categories.Single(c => c.CategoryId == long.Parse(setting.ContextValue)), setting.Data.Amount, expenses, sharedAccount);
            }

            return(model);
        }
        public void GetAllExpensesForApproval()
        {
            var expected = new Model.Expense
            {
                Id                  = Guid.NewGuid(),
                Date                = new DateTime(1900, 01, 01),
                Title               = "Title",
                Description         = "Description",
                Total               = 1.0,
                ReimbursementMethod = ReimbursementMethod.DirectDeposit,
                CostCenter          = "CostCenter",
                Approved            = true,
                User                = new User {
                    UserName = "******"
                },
                ApproverName = "approverName"
            };

            var anotherExpense = new Model.Expense
            {
                Id                  = Guid.NewGuid(),
                Date                = new DateTime(1900, 01, 01),
                Title               = "Title",
                Description         = "Description",
                Total               = 1.0,
                ReimbursementMethod = ReimbursementMethod.DirectDeposit,
                CostCenter          = "CostCenter",
                Approved            = true,
                User                = new User {
                    UserName = "******"
                },
                ApproverName = "approverName"
            };

            var notForMeExpense = new Model.Expense
            {
                Id                  = Guid.NewGuid(),
                Date                = new DateTime(1900, 01, 01),
                Title               = "Title",
                Description         = "Description",
                Total               = 1.0,
                ReimbursementMethod = ReimbursementMethod.DirectDeposit,
                CostCenter          = "CostCenter",
                Approved            = true,
                User                = new User {
                    UserName = "******"
                },
                ApproverName = "Another approverName"
            };

            util.DatabaseHelper.CreateExpense(TestDatabaseConnectionString, expected);
            util.DatabaseHelper.CreateExpense(TestDatabaseConnectionString, anotherExpense);
            util.DatabaseHelper.CreateExpense(TestDatabaseConnectionString, notForMeExpense);

            var repository = new ExpenseRepository(TestDatabaseConnectionString);
            var expenses   = repository.GetExpensesForApproval("approverName");

            Assert.IsNotNull(expenses);
            Assert.AreEqual(2, expenses.Count());
        }
Example #7
0
        public void FillJC()
        {
            ExpenseRepository repo = new ExpenseRepository();
            List <Dropdown>   list = new DropdownRepository().JobCardDropdown(OrganizationId);

            ViewBag.JC = new SelectList(list, "Id", "Name");
        }
Example #8
0
        public ExpenseViewModel()
        {
            expenseRep   = new ExpenseRepository();
            catRep       = new CategoryRepository();
            CategoryList = new ObservableCollection <Category>();

            var iList = catRep.GetCategoriesAsync();

            foreach (Category i in iList.Result)
            {
                CategoryList.Add(i);
            }

            SaveExpenseCommand = new Command(async() =>
            {
                var expense         = new Expense();
                TheDate            += TheTime;
                expense.Description = TheDescription;
                expense.Value       = Convert.ToDouble(TheValue);
                expense.Date        = TheDate;
                expense.CategoryId  = CategoryId + 1;
                await expenseRep.SaveExpenseAsync(expense);
                TheDescription = string.Empty;
                TheValue       = "0";
                CategoryId     = -1;
            });
        }
        public void CanGetExpenseForApprovalFromCache()
        { 

            Guid expenseIdToSave = Guid.NewGuid();
            Assert.IsNull(util.DatabaseHelper.GetExpenseById(TestDatabaseConnectionString, expenseIdToSave));
            var stubUser = new User { UserName = "******" };
            var stubManager = "the manager";
            var expenseToSave = new Model.Expense
                                    {
                                        Id = expenseIdToSave,
                                        Date = new DateTime(1900, 01, 01),
                                        Title = "Title",
                                        Description = "Description",
                                        Total = 1.0,
                                        ReimbursementMethod = ReimbursementMethod.DirectDeposit,
                                        CostCenter = "CostCenter",
                                        Approved = false,
                                        User = stubUser,
                                      
                                        ApproverName = stubManager
                                    };

            var repository = new ExpenseRepository(TestDatabaseConnectionString, TimeSpan.MaxValue);
            repository.SaveExpense(expenseToSave);

            var expToApprove = repository.GetExpensesForApproval(stubManager);

            DatabaseHelper.BypassRepositoryAndDeleteExpense(TestDatabaseConnectionString, expenseToSave.Id);

            expToApprove = repository.GetExpensesForApproval(stubManager);

            Assert.AreEqual(1, expToApprove.Count());

            Assert.AreEqual(expenseIdToSave, expToApprove.First().Id);
        }
        public void ShouldGetZeroExpensesFromNonExistingUser()
        {
            var expected = new AExpense.Model.Expense
            {
                Id                  = Guid.NewGuid(),
                Date                = new DateTime(1900, 01, 01),
                Title               = "Title",
                Description         = "Description",
                Total               = 1.0,
                ReimbursementMethod = ReimbursementMethod.DirectDeposit,
                CostCenter          = "CostCenter",
                Approved            = true,
                User                = new User {
                    UserName = "******"
                },
                ApproverName = "approver name"
            };

            var repository = new ExpenseRepository(dataContext);

            repository.SaveExpense(expected);

            var expenses = repository.GetExpensesByUser("no existing user name");

            Assert.AreEqual(0, expenses.Count());
        }
 public async Task AddExpense(string name)
 {
     try
     {
         await ThreadPool.RunAsync((workItem) =>
         {
             try
             {
                 var expense = ExpenseRepository.Factory(name);
                 var vm      = new ExpenseViewModel(expense);
                 Vehicle.Expenses.Add(expense);
                 Expenses.Add(vm);
                 SelectedExpense = vm;
             }
             catch (Exception ex)
             {
                 App.Telemetry.TrackException(ex);
                 SelectedExpense = null;
             }
             finally
             {
                 Vehicle.Expenses.OrderBy(x => x.Name);
                 Expenses.OrderBy(x => x.Expense.Name);
             }
         });
     }
     catch (Exception ex)
     {
         App.Telemetry.TrackException(ex);
     }
 }
Example #12
0
        public void GetAllExpensesForApprovalLogsActivity()
        {
            using (var subscription = obsListener.LogToSqlDatabase("Activity", TracingDatabaseConnectionString))
            {
                var repository = new ExpenseRepository(TestDatabaseConnectionString, TimeSpan.MinValue);
                repository.GetExpensesForApproval("ApproverUser");

                subscription.Sink.FlushAsync().Wait();

                var logEntries = DatabaseHelper.GetAllLogEntries(TracingDatabaseConnectionString);

                Assert.AreEqual(6, logEntries.Count());

                var GetExpensesForApprovalStartedEntry = logEntries.SingleOrDefault(e => e.EventId == 320);
                Assert.IsNotNull(GetExpensesForApprovalStartedEntry);
                StringAssert.Contains(GetExpensesForApprovalStartedEntry.Payload, "ApproverUser");

                var GetExpensesForApprovalQueryStartedEntry = logEntries.SingleOrDefault(e => e.EventId == 327);
                Assert.IsNotNull(GetExpensesForApprovalQueryStartedEntry);
                StringAssert.Contains(GetExpensesForApprovalQueryStartedEntry.Payload, "ApproverUser");

                var GetExpensesForApprovalQueryFinishedEntry = logEntries.SingleOrDefault(e => e.EventId == 324);
                Assert.IsNotNull(GetExpensesForApprovalQueryFinishedEntry);
                StringAssert.Contains(GetExpensesForApprovalQueryFinishedEntry.Payload, "ApproverUser");

                var GetExpensesForApprovalCacheUpdateEntry = logEntries.SingleOrDefault(e => e.EventId == 326);
                Assert.IsNotNull(GetExpensesForApprovalCacheUpdateEntry);
                StringAssert.Contains(GetExpensesForApprovalCacheUpdateEntry.Payload, "ApproverUser");

                var GetExpensesForApprovalFinishedEntry = logEntries.SingleOrDefault(e => e.EventId == 321);
                Assert.IsNotNull(GetExpensesForApprovalFinishedEntry);
                StringAssert.Contains(GetExpensesForApprovalFinishedEntry.Payload, "ApproverUser");
            }
        }
        public void CanInterceptAndTraceWithValidApprover()
        {
            var newExpense = new Model.Expense();

            newExpense.Id                  = testGuid;
            newExpense.Title               = "testing title";
            newExpense.CostCenter          = "testing cost center";
            newExpense.ReimbursementMethod = ReimbursementMethod.DirectDeposit;
            newExpense.User                = new Model.User()
            {
                FullName = "test user", UserName = "******"
            };
            newExpense.Date         = System.DateTime.Today;
            newExpense.ApproverName = "ADATUM\\mary";
            newExpense.Details.Add(new Model.ExpenseItem()
            {
                Description = "test item", Amount = 10, Id = Guid.NewGuid()
            });

            var repository = new ExpenseRepository(TestDatabaseConnectionString);

            repository.SaveExpense(newExpense);

            var events = listener.EventsWritten;

            Assert.IsNotNull(events);
            Assert.AreEqual(6, events.Count);
        }
        public void ApproveExpense()
        {
            var expected = new Model.Expense
            {
                Id                  = Guid.NewGuid(),
                Date                = new DateTime(1900, 01, 01),
                Title               = "Title",
                Description         = "Description",
                Total               = 1.0,
                ReimbursementMethod = ReimbursementMethod.DirectDeposit,
                CostCenter          = "CostCenter",
                Approved            = false,
                User                = new User {
                    UserName = "******"
                },
                ApproverName = "approver name"
            };

            util.DatabaseHelper.CreateExpense(TestDatabaseConnectionString, expected);

            var repository = new ExpenseRepository(TestDatabaseConnectionString);

            Thread.CurrentPrincipal = new ClaimsPrincipal(new ClaimsIdentity(Thread.CurrentPrincipal.Identity, new Claim[] { new Claim(ClaimTypes.Role, "Manager") }));
            repository.UpdateApproved(expected);

            var actual = util.DatabaseHelper.GetExpenseById(TestDatabaseConnectionString, expected.Id);

            Assert.IsNotNull(actual);
            Assert.AreEqual(expected.Approved, actual.Approved);
        }
        private void SaveExpense()
        {
            // TODO: add check for CSRF attacks (set ViewStateUserKey = Session.SessionID)
            var user = (User)this.Session["LoggedUser"];

            var newExpense = new Expense
            {
                Id                  = Guid.NewGuid(),
                Title               = this.ExpenseTitle.Text,
                Description         = this.ExpenseDescription.Text,
                CostCenter          = user.CostCenter,
                Amount              = Convert.ToDecimal(this.ExpenseAmount.Text, CultureInfo.CurrentUICulture),
                Approved            = false,
                ReimbursementMethod = (ReimbursementMethod)Enum.Parse(typeof(ReimbursementMethod), this.ExpenseReimbursementMethod.SelectedItem.Value),
                User                = user,
                Date                = DateTime.Parse(this.ExpenseDate.Text, CultureInfo.CurrentUICulture)
            };

            var expenseRepository = new ExpenseRepository();

            expenseRepository.SaveExpense(newExpense);

            user.PreferredReimbursementMethod = (ReimbursementMethod)Enum.Parse(typeof(ReimbursementMethod), this.ExpenseReimbursementMethod.SelectedValue);
            var userRepository = new UserRepository();

            userRepository.UpdateUserPreferredReimbursementMethod(user);
        }
        public void FillSI()
        {
            ExpenseRepository repo = new ExpenseRepository();
            List <Dropdown>   list = repo.FillSI();

            ViewBag.SI = new SelectList(list, "Id", "Name");
        }
Example #17
0
        public DataSet GetStatus()
        {
            ExpenseRepository dataAccess = new ExpenseRepository();
            DataSet           dataSet    = dataAccess.GetStatus();

            return(dataSet);
        }
Example #18
0
        private void SaveExpense()
        {
            var userRepository = new UserRepository();
            var user           = userRepository.GetUser(this.User.Identity.Name);

            var approverName = this.Approver.Text;

            if (string.IsNullOrEmpty(approverName))
            {
                throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, "The approver {0} does not exists", this.Approver.Text));
            }

            var newExpense = new Expense
            {
                Id                  = StorageKey.Now.InvertedTicks,
                Title               = this.ExpenseTitle.Text,
                CostCenter          = user.CostCenter,
                Approved            = false,
                ReimbursementMethod = (ReimbursementMethod)Enum.Parse(typeof(ReimbursementMethod), this.ExpenseReimbursementMethod.SelectedItem.Value),
                UserName            = user.UserName,
                Date                = DateTime.Parse(this.ExpenseDate.Text, CultureInfo.CurrentUICulture),
                ApproverName        = approverName
            };

            this.ExpenseItems.ForEach(ei => newExpense.Details.Add(ei));

            var expenseRepository = new ExpenseRepository();

            expenseRepository.SaveExpense(newExpense);

            user.PreferredReimbursementMethod = (ReimbursementMethod)Enum.Parse(typeof(ReimbursementMethod), this.ExpenseReimbursementMethod.SelectedValue);
            userRepository.UpdateUserPreferredReimbursementMethod(user);
        }
Example #19
0
 public BudgetController(BudgetRepository budgetRepo, ExpenseRepository expenseRepo, BudgetConceptRepository conceptRepo, ExpenseGroupRepository groupRepo)
 {
     this.budgetRepo  = budgetRepo;
     this.expenseRepo = expenseRepo;
     this.conceptRepo = conceptRepo;
     this.groupRepo   = groupRepo;
 }
        public void EnterExpense()
        {
            var db = new InMemoryDB();
            var personRepository  = new PersonRepository(db);
            var expenseRepository = new ExpenseRepository(db);
            var tripRepository    = new TripRepository(db);

            var personService = new PersonService(personRepository);

            var expenseTracking = new ExpenseTracking(personRepository,
                                                      tripRepository,
                                                      expenseRepository
                                                      );

            var expenseService = new ExpenseService(expenseRepository);

            expenseService.CreateExpense("Lunch", "Lunch");

            var Personlist = personService.CreatePerson(new string[] { "Suresh", "Sakthivel", "Saravanan" });

            var trip = expenseTracking.CreateTrip("trip1", Personlist.Select(p => p.ID));

            expenseTracking.EnterExpense(trip.TripID, 1, new int[] { 2, 3 }, "Lunch", 100);

            var payer = Personlist.Where(p => p.ID == 1).FirstOrDefault();

            var payee = Personlist.Where(p => p.ID != 1).FirstOrDefault();

            Assert.AreEqual(100, payer.AmountToGet());
            Assert.AreEqual(50, payee.AmountToGive());
        }
        public void ApproveExpense()
        {
            var expected = new AExpense.Model.Expense
            {
                Id                  = Guid.NewGuid(),
                Date                = new DateTime(1900, 01, 01),
                Title               = "Title",
                Description         = "Description",
                Total               = 1.0,
                ReimbursementMethod = ReimbursementMethod.DirectDeposit,
                CostCenter          = "CostCenter",
                Approved            = false,
                User                = new User {
                    UserName = "******"
                },
                ApproverName = "approver name"
            };

            var repository = new ExpenseRepository(dataContext);

            repository.SaveExpense(expected);

            Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity("test"), new string[] { "Manager" });
            repository.UpdateApproved(expected);

            var actual = repository.GetExpenseById(expected.Id);

            Assert.IsNotNull(actual);
            Assert.AreEqual(expected.Approved, actual.Approved);
        }
Example #22
0
        private decimal GetOweAmount(long accountId, long sharedAccountId, DateTime month)
        {
            var expenses = ExpenseRepository.GetAccountExpenses(sharedAccountId);

            expenses = expenses.Where(e => e.SpentDate.Year == month.Year && e.SpentDate.Month == month.Month).ToList();

            var transfers = SharedAccountRepository.GetSharedAccountMoneyTransfer(sharedAccountId);

            transfers = transfers.Where(t => t.ForYear == month.Year && t.ForMonth == month.Month).ToList();

            var yourIncomeTotal    = IncomeRepository.GetAccountIncome(accountId).Where(i => i.IncomeDate.Year == month.Year && i.IncomeDate.Month == month.Month).Sum(i => i.Amount);
            var partnerIncomeTotal = IncomeRepository.GetPartnerIncome(accountId).Where(i => i.IncomeDate.Year == month.Year && i.IncomeDate.Month == month.Month).Sum(i => i.Amount);
            var yourPercentage     = yourIncomeTotal + partnerIncomeTotal == 0 ? 0 : yourIncomeTotal / (yourIncomeTotal + partnerIncomeTotal);

            var sharedSpentTotal     = expenses.Sum(e => e.Amount);
            var yourSharedSpentTotal = expenses.Where(e => e.SpentAccountId == accountId).Sum(e => e.Amount);
            var yourIdealSpentTotal  = yourPercentage * sharedSpentTotal;

            var youPayed    = transfers.Where(t => t.PayerAccountId == accountId).Sum(t => t.Amount);
            var youRecieved = transfers.Where(t => t.PayedAccountId == accountId).Sum(t => t.Amount);

            var finalAmount = Math.Round(yourIdealSpentTotal - yourSharedSpentTotal, 2);

            finalAmount = finalAmount - youPayed + youRecieved;

            return(finalAmount);
        }
        public InputCategoryWindow(MainWindow _mainWindow, ExpensePage _expensePage, DateTime _date)
        {
            InitializeComponent();
            dbContext   = new MonnyDbContext();
            controller  = _mainWindow;
            expensePage = _expensePage;
            date        = _date;

            // Set ComboBox list Item with user's custom categories
            ExpenseRepository repository = new ExpenseRepository();
            // List where used custom categories ids are being saved
            List <int> usedId = new List <int>();

            foreach (Expense e in repository.GetItems())
            {
                // Checks if e is current user expense
                // e.CategoryId > 7 because custom categories have id greater than 7
                if (e.UserId == controller.user.Id && e.CategoryId > 7)
                {
                    // Check if category hasn't been used already
                    if (!usedId.Exists(i => i == e.CategoryId))
                    {
                        CategoryRepository categories = new CategoryRepository();
                        // Add category to ComboBox Items
                        customCategories.Items.Add(categories.GetItem(e.CategoryId).Name);

                        usedId.Add(e.CategoryId);
                    }
                }
            }
        }
Example #24
0
        public void CanDeliverASingleExpeseRecord(string recordId)
        {
            var subject = new ExpenseRepository();

            subject
            .FindById(Guid.Parse(recordId))
            .Should().NotBeNull();
        }
Example #25
0
        public async Task DetailAsyncTest()
        {
            var repository = new ExpenseRepository(GetContext());

            var expense = await repository.DetailAsync(1);

            Assert.Equal("Alice", expense.Recipient);
        }
Example #26
0
        public ActionResult EditExpense(int id)
        {
            var expenseRepository = new ExpenseRepository();
            var expenseItem       = expenseRepository.FindExpense(id);
            var viewModel         = new ExpenseManagingViewModel(expenseItem);

            return(View(viewModel));
        }
Example #27
0
        public ActionResult DeleteExpense(string id)
        {
            var expenseRepository = new ExpenseRepository();

            expenseRepository.DeleteExpense(Convert.ToInt32(id));

            return(RedirectToAction("ExpenseManager"));
        }
Example #28
0
        public ActionResult ExpenseManager()
        {
            ViewData["Message"] = "Your expense manager page.";
            var expenseRepository = new ExpenseRepository();
            var expenses          = expenseRepository.GetExpenses();

            return(View(expenses));
        }
        /// <summary>
        /// Get Expenses
        /// </summary>
        /// <returns></returns>
        // GET: api/Expense
        public IHttpActionResult Get(string filter)
        {
            ExpenseRepository ExpenseRepository = new ExpenseRepository(Convert.ToInt32(Request.Headers.GetValues("CurrentUserID").First()));

            List <Expense> ExpenseList = ExpenseRepository.GetExpensesByFilter(filter);

            return(Json(new { Expenses = ExpenseList }));
        }
Example #30
0
        public void DoesNotFailIfRecordDoesNotExist()
        {
            var subject = new ExpenseRepository();

            subject
            .Invoking(x => x.FindById(Guid.Parse("00000000-0000-0000-0000-000000000000")))
            .ShouldNotThrow();
        }
        /// <summary>
        /// Save Expenses
        /// </summary>
        /// <param name="ExpenseList"></param>
        /// <returns></returns>
        // POST: api/Expense
        public IHttpActionResult Post([FromBody] List <Expense> ExpenseList, string filter)
        {
            ExpenseRepository ExpenseRepository = new ExpenseRepository(Convert.ToInt32(Request.Headers.GetValues("CurrentUserID").First()));

            ExpenseRepository.SaveExpenses(ExpenseList, filter);

            return(Json(new { count = ExpenseList.Count.ToString() }));
        }
        public void GetAllExpensesLogsActivity()
        {
            using (var subscription = obsListener.LogToSqlDatabase("Activity", TracingDatabaseConnectionString))
            {
                var repository = new ExpenseRepository(TestDatabaseConnectionString, TimeSpan.MinValue);
                repository.GetAllExpenses();

                subscription.Sink.FlushAsync().Wait();

                var logEntries = DatabaseHelper.GetAllLogEntries(TracingDatabaseConnectionString);

                Assert.AreEqual(3, logEntries.Count());

                var GetAllExpensesStartedEntry = logEntries.SingleOrDefault(e => e.EventId == 300);
                Assert.IsNotNull(GetAllExpensesStartedEntry);

                var GetAllExpensesFinishedEntry = logEntries.SingleOrDefault(e => e.EventId == 301);
                Assert.IsNotNull(GetAllExpensesFinishedEntry);
                
            }
        }
        public void CanInterceptAndTraceWithValidApprover()
        {
            var newExpense = new Model.Expense();
            newExpense.Id = testGuid;
            newExpense.Title = "testing title";
            newExpense.CostCenter = "testing cost center";
            newExpense.ReimbursementMethod = ReimbursementMethod.DirectDeposit;
            newExpense.User = new Model.User() { FullName = "test user", UserName = "******" };
            newExpense.Date = System.DateTime.Today;
            newExpense.ApproverName = "ADATUM\\mary";
            newExpense.Details.Add(new Model.ExpenseItem() { Description = "test item", Amount = 10, Id = Guid.NewGuid() });

            var repository = new ExpenseRepository(TestDatabaseConnectionString);

            repository.SaveExpense(newExpense);

            var events = listener.EventsWritten;

            Assert.IsNotNull(events);
            Assert.AreEqual(6, events.Count);
        }
        public void SaveExpense()
        {
            Guid expenseIdToSave = Guid.Empty;

            var stubUser = new User { UserName = "******" };
            var stubManager = "the manager";
            var expenseToSave = new AExpense.Model.Expense
            {
                Id = expenseIdToSave,
                Date = new DateTime(1900, 01, 01),
                Title = "Title",
                Description = "Description",
                Total = 1.0,
                ReimbursementMethod = ReimbursementMethod.DirectDeposit,
                CostCenter = "CostCenter",
                Approved = true,
                User = stubUser,
                ApproverName = stubManager
            };

            var repository = new ExpenseRepository(dataContext);
            repository.SaveExpense(expenseToSave);

            var expenseEntity = repository.GetExpenseById(expenseIdToSave);

            Assert.IsNotNull(expenseEntity);
            Assert.AreEqual(expenseToSave.Approved, expenseEntity.Approved);
            Assert.AreEqual(expenseToSave.CostCenter, expenseEntity.CostCenter);
            Assert.AreEqual(expenseToSave.Date, expenseEntity.Date);
            Assert.AreEqual(expenseToSave.Description, expenseEntity.Description);
            Assert.AreEqual(expenseToSave.Id, expenseEntity.Id);
            Assert.AreEqual(expenseToSave.ReimbursementMethod, expenseEntity.ReimbursementMethod);
            Assert.AreEqual(expenseToSave.Title, expenseEntity.Title);
            Assert.AreEqual(expenseToSave.User.UserName, expenseEntity.User.UserName);
            Assert.AreEqual(expenseToSave.ApproverName, expenseEntity.ApproverName);

        }
        public void SaveExpense()
        {
            Guid expenseIdToSave = Guid.Empty;
            Assert.IsNull(util.DatabaseHelper.GetExpenseById(TestDatabaseConnectionString, expenseIdToSave));
            var stubUser = new User { UserName = "******" };
            var stubManager = "the manager";
            var expenseToSave = new Model.Expense
                                    {
                                        Id = expenseIdToSave,
                                        Date = new DateTime(1900, 01, 01),
                                        Title = "Title",
                                        Description = "Description",
                                        Total = 1.0,
                                        ReimbursementMethod = ReimbursementMethod.DirectDeposit,
                                        CostCenter = "CostCenter",
                                        Approved = true,
                                        User = stubUser,
                                        ApproverName = stubManager
                                    };

            var repository = new ExpenseRepository(TestDatabaseConnectionString);
            repository.SaveExpense(expenseToSave);

            var expenseEntity = util.DatabaseHelper.GetExpenseById(TestDatabaseConnectionString, expenseIdToSave);
            Assert.IsNotNull(expenseEntity);
            Assert.AreEqual(expenseToSave.Total, Convert.ToDouble(expenseEntity.Amount));
            Assert.AreEqual(expenseToSave.Approved, expenseEntity.Approved);
            Assert.AreEqual(expenseToSave.CostCenter, expenseEntity.CostCenter);
            Assert.AreEqual(expenseToSave.Date, expenseEntity.Date);
            Assert.AreEqual(expenseToSave.Description, expenseEntity.Description);
            Assert.AreEqual(expenseToSave.Id, expenseEntity.Id);
            Assert.AreEqual(expenseToSave.ReimbursementMethod, Enum.Parse(typeof(ReimbursementMethod), expenseEntity.ReimbursementMethod));
            Assert.AreEqual(expenseToSave.Title, expenseEntity.Title);
            Assert.AreEqual(expenseToSave.User.UserName, expenseEntity.UserName);
            Assert.AreEqual(expenseToSave.ApproverName, expenseEntity.Approver);
        }
        public void GetAllExpensesForApproval()
        {
            var expected = new AExpense.Model.Expense
            {
                Id = Guid.NewGuid(),
                Date = new DateTime(1900, 01, 01),
                Title = "Title",
                Description = "Description",
                Total = 1.0,
                ReimbursementMethod = ReimbursementMethod.DirectDeposit,
                CostCenter = "CostCenter",
                Approved = true,
                User = new User { UserName = "******" },
                ApproverName = "approverName"
            };

            var anotherExpense = new AExpense.Model.Expense
            {
                Id = Guid.NewGuid(),
                Date = new DateTime(1900, 01, 01),
                Title = "Title",
                Description = "Description",
                Total = 1.0,
                ReimbursementMethod = ReimbursementMethod.DirectDeposit,
                CostCenter = "CostCenter",
                Approved = true,
                User = new User { UserName = "******" },
                ApproverName = "approverName"
            };

            var notForMeExpense = new AExpense.Model.Expense
            {
                Id = Guid.NewGuid(),
                Date = new DateTime(1900, 01, 01),
                Title = "Title",
                Description = "Description",
                Total = 1.0,
                ReimbursementMethod = ReimbursementMethod.DirectDeposit,
                CostCenter = "CostCenter",
                Approved = true,
                User = new User { UserName = "******" },
                ApproverName = "Another approverName"
            };

            var repository = new ExpenseRepository(dataContext);

            repository.SaveExpense(expected);
            repository.SaveExpense(anotherExpense);
            repository.SaveExpense(notForMeExpense);

            var expenses = repository.GetExpensesForApproval("approverName");

            Assert.IsNotNull(expenses);
            Assert.AreEqual(2, expenses.Count());
        }
        public void ApproveExpense()
        {
            var expected = new Model.Expense
                               {
                                   Id = Guid.NewGuid(),
                                   Date = new DateTime(1900, 01, 01),
                                   Title = "Title",
                                   Description = "Description",
                                   Total = 1.0,
                                   ReimbursementMethod = ReimbursementMethod.DirectDeposit,
                                   CostCenter = "CostCenter",
                                   Approved = false,
                                   User = new User { UserName = "******" },
                                   ApproverName = "approver name"
                               };
            util.DatabaseHelper.CreateExpense(TestDatabaseConnectionString, expected);

            var repository = new ExpenseRepository(TestDatabaseConnectionString);

            Thread.CurrentPrincipal = new ClaimsPrincipal(new ClaimsIdentity(Thread.CurrentPrincipal.Identity, new Claim[] { new Claim(ClaimTypes.Role, "Manager") }));
            repository.UpdateApproved(expected);

            var actual = util.DatabaseHelper.GetExpenseById(TestDatabaseConnectionString, expected.Id);

            Assert.IsNotNull(actual);
            Assert.AreEqual(expected.Approved, actual.Approved);
        }
        public void ShouldGetZeroExpensesFromNonExistingUser()
        {
            var expected = new AExpense.Model.Expense
            {
                Id = Guid.NewGuid(),
                Date = new DateTime(1900, 01, 01),
                Title = "Title",
                Description = "Description",
                Total = 1.0,
                ReimbursementMethod = ReimbursementMethod.DirectDeposit,
                CostCenter = "CostCenter",
                Approved = true,
                User = new User { UserName = "******" },
                ApproverName = "approver name"
            };

            var repository = new ExpenseRepository(dataContext);
            repository.SaveExpense(expected);

            var expenses = repository.GetExpensesByUser("no existing user name");

            Assert.AreEqual(0, expenses.Count());
        }
        public void UpdatingAnExpenseUpdatesTheCache()
        {
            //Creation of expense
            Guid expenseIdToSave = Guid.NewGuid();
            Assert.IsNull(util.DatabaseHelper.GetExpenseById(TestDatabaseConnectionString, expenseIdToSave));
            var stubUser = new User { UserName = "******" };
            var stubManager = "the manager";
            var expenseToSave = new Model.Expense
            {
                Id = expenseIdToSave,
                Date = new DateTime(1900, 01, 01),
                Title = "Title",
                Description = "Description",
                Total = 1.0,
                ReimbursementMethod = ReimbursementMethod.DirectDeposit,
                CostCenter = "CostCenter",
                Approved = false,
                User = stubUser,

                ApproverName = stubManager
            };

            //Get the repository with the highest cache expiration
            var repository = new ExpenseRepository(TestDatabaseConnectionString, TimeSpan.MaxValue);

            //Save expense
            repository.SaveExpense(expenseToSave);

            //Get expense (it also caches the expense)
            var savedExpense = repository.GetExpenseById(expenseIdToSave);

            //basic Assertion
            Assert.IsNotNull(savedExpense);
            
            //Approve the expense
            savedExpense.Approved = true;

            Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity("test"), new string[] { "Manager" });
            repository.UpdateApproved(savedExpense);

            //Delete expense in db so we make sure we will get expense from cache.
            DatabaseHelper.BypassRepositoryAndDeleteExpense(TestDatabaseConnectionString, savedExpense.Id);

            //Get expense (from cache) and verify new description
            var cachedExpense = repository.GetExpenseById(expenseIdToSave);

            //Assert
            Assert.IsNotNull(cachedExpense);
            Assert.IsTrue(cachedExpense.Approved);
        }
        public void GetExpenseByIdIsGoneAfterCacheExpires()
        {

            Guid expenseIdToSave = Guid.NewGuid();
            Assert.IsNull(util.DatabaseHelper.GetExpenseById(TestDatabaseConnectionString, expenseIdToSave));
            var stubUser = new User { UserName = "******" };
            var stubManager = "the manager";
            var expenseToSave = new Model.Expense
            {
                Id = expenseIdToSave,
                Date = new DateTime(1900, 01, 01),
                Title = "Title",
                Description = "Description",
                Total = 1.0,
                ReimbursementMethod = ReimbursementMethod.DirectDeposit,
                CostCenter = "CostCenter",
                Approved = true,
                User = stubUser,

                ApproverName = stubManager
            };

            var repository = new ExpenseRepository(TestDatabaseConnectionString, new TimeSpan(0, 0, 2));
            repository.SaveExpense(expenseToSave);

            var expense = repository.GetExpenseById(expenseToSave.Id);

            DatabaseHelper.BypassRepositoryAndDeleteExpense(TestDatabaseConnectionString, expenseToSave.Id);

            Thread.Sleep(3000);

            expense = repository.GetExpenseById(expenseToSave.Id);

            Assert.IsNull(expense);

        }
        public void ApproveExpense()
        {
            var expected = new AExpense.Model.Expense
            {
                Id = Guid.NewGuid(),
                Date = new DateTime(1900, 01, 01),
                Title = "Title",
                Description = "Description",
                Total = 1.0,
                ReimbursementMethod = ReimbursementMethod.DirectDeposit,
                CostCenter = "CostCenter",
                Approved = false,
                User = new User { UserName = "******" },
                ApproverName = "approver name"
            };
           
            var repository = new ExpenseRepository(dataContext);
            repository.SaveExpense(expected);

            Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity("test"), new string[] { "Manager" });
            repository.UpdateApproved(expected);

            var actual = repository.GetExpenseById(expected.Id);

            Assert.IsNotNull(actual);
            Assert.AreEqual(expected.Approved, actual.Approved);
        }
        public void AddExpenseLogsActivity()
        {
            using(var subscription = obsListener.LogToSqlDatabase("Activity", TracingDatabaseConnectionString))
            {
                var repository = new ExpenseRepository(TestDatabaseConnectionString, TimeSpan.MinValue);

                Guid expenseIdToSave = Guid.NewGuid();
                Assert.IsNull(DatabaseHelper.GetExpenseById(TestDatabaseConnectionString, expenseIdToSave));
                var stubUser = new User { UserName = "******" };
                var stubManager = "the manager";
                var expenseToSave = new Model.Expense
                                        {
                                            Id = expenseIdToSave,
                                            Date = new DateTime(1900, 01, 01),
                                            Title = "Title",
                                            Description = "Description",
                                            Total = 1.0,
                                            ReimbursementMethod = ReimbursementMethod.DirectDeposit,
                                            CostCenter = "CostCenter",
                                            Approved = false,
                                            User = stubUser,
                                      
                                            ApproverName = stubManager
                                        };

                repository.SaveExpense(expenseToSave);
                subscription.Sink.FlushAsync().Wait();

                var logEntries = DatabaseHelper.GetAllLogEntries(TracingDatabaseConnectionString);

                Assert.AreEqual(6, logEntries.Count());
                
                var SaveExpenseStartedEntry = logEntries.SingleOrDefault(e=> e.EventId == 290);
                Assert.IsNotNull(SaveExpenseStartedEntry);
                StringAssert.Contains(SaveExpenseStartedEntry.Payload, expenseToSave.Id.ToString());

                var SaveExpenseInsertStartedEntry = logEntries.SingleOrDefault(e=> e.EventId == 295);
                Assert.IsNotNull(SaveExpenseInsertStartedEntry);
                StringAssert.Contains(SaveExpenseInsertStartedEntry.Payload, expenseToSave.Id.ToString());

                var SaveExpenseInsertFinishedEntry = logEntries.SingleOrDefault(e=> e.EventId == 294);
                Assert.IsNotNull(SaveExpenseInsertFinishedEntry);
                StringAssert.Contains(SaveExpenseInsertFinishedEntry.Payload, expenseToSave.Id.ToString());

                var SaveExpenseCacheUpdatedEntry = logEntries.SingleOrDefault(e=> e.EventId == 292);
                Assert.IsNotNull(SaveExpenseCacheUpdatedEntry);

                var SaveExpenseFinishedEntry = logEntries.SingleOrDefault(e => e.EventId == 291);
                Assert.IsNotNull(SaveExpenseFinishedEntry);
                StringAssert.Contains(SaveExpenseFinishedEntry.Payload, expenseToSave.Id.ToString());
            }
        }
        public void GetAllExpenses()
        {
            var expected = new AExpense.Model.Expense
            {
                Id = Guid.NewGuid(),
                Date = new DateTime(1900, 01, 01),
                Title = "Title",
                Description = "Description",
                Total = 1.0,
                ReimbursementMethod = ReimbursementMethod.DirectDeposit,
                CostCenter = "CostCenter",
                Approved = true,
                User = new User { UserName = "******" },
                ApproverName = "approver name"
            };

            var repository = new ExpenseRepository(dataContext);
            repository.SaveExpense(expected);
            var expenses = repository.GetAllExpenses();

            Assert.IsNotNull(expenses);
            var actual = expenses.ToList().Where(e => e.Id == expected.Id).FirstOrDefault();
            Assert.IsNotNull(actual);
            Assert.AreEqual(expected.Total, actual.Total);
            Assert.AreEqual(expected.Approved, actual.Approved);
            Assert.AreEqual(expected.CostCenter, actual.CostCenter);
            Assert.AreEqual(expected.Date, actual.Date);
            Assert.AreEqual(expected.Description, actual.Description);
            Assert.AreEqual(expected.Id, actual.Id);
            Assert.AreEqual(expected.ReimbursementMethod, actual.ReimbursementMethod);
            Assert.AreEqual(expected.Title, actual.Title);
            Assert.AreEqual(expected.User.UserName, actual.User.UserName);
        }
        public void GetAllExpensesForApprovalLogsActivity()
        {
            using (var subscription = obsListener.LogToSqlDatabase("Activity", TracingDatabaseConnectionString))
            {
                var repository = new ExpenseRepository(TestDatabaseConnectionString, TimeSpan.MinValue);
                repository.GetExpensesForApproval("ApproverUser");

                subscription.Sink.FlushAsync().Wait();

                var logEntries = DatabaseHelper.GetAllLogEntries(TracingDatabaseConnectionString);

                Assert.AreEqual(6, logEntries.Count());

                var GetExpensesForApprovalStartedEntry = logEntries.SingleOrDefault(e => e.EventId == 320);
                Assert.IsNotNull(GetExpensesForApprovalStartedEntry);
                StringAssert.Contains(GetExpensesForApprovalStartedEntry.Payload, "ApproverUser");

                var GetExpensesForApprovalQueryStartedEntry = logEntries.SingleOrDefault(e => e.EventId == 327);
                Assert.IsNotNull(GetExpensesForApprovalQueryStartedEntry);
                StringAssert.Contains(GetExpensesForApprovalQueryStartedEntry.Payload, "ApproverUser");

                var GetExpensesForApprovalQueryFinishedEntry = logEntries.SingleOrDefault(e => e.EventId == 324);
                Assert.IsNotNull(GetExpensesForApprovalQueryFinishedEntry);
                StringAssert.Contains(GetExpensesForApprovalQueryFinishedEntry.Payload, "ApproverUser");

                var GetExpensesForApprovalCacheUpdateEntry = logEntries.SingleOrDefault(e => e.EventId == 326);
                Assert.IsNotNull(GetExpensesForApprovalCacheUpdateEntry);
                StringAssert.Contains(GetExpensesForApprovalCacheUpdateEntry.Payload, "ApproverUser");

                var GetExpensesForApprovalFinishedEntry = logEntries.SingleOrDefault(e => e.EventId == 321);
                Assert.IsNotNull(GetExpensesForApprovalFinishedEntry);
                StringAssert.Contains(GetExpensesForApprovalFinishedEntry.Payload, "ApproverUser");
            }
        }