public void Test_AddNewExpense_Fail()
        {
            var expenseService = new BudgetExpensesServices(_expenseRepository.Object);

            Assert.ThrowsAsync <ArgumentException>(() => expenseService.AddNewExpense(null));

            _expenseRepository.Verify(e => e.AddNewExpense(It.IsAny <BudgetExpenses>()), Times.Never);
        }
        public void Test_UpsertExpenses_Fail_NullServiceParameter()
        {
            var expenseService = new BudgetExpensesServices(_expenseRepository.Object);

            Assert.ThrowsAsync <NullReferenceException>(() => expenseService.UpsertExpenses(null));

            _expenseRepository.Verify(e => e.UpsertExpenses(It.IsAny <List <BudgetExpenses> >()), Times.Never);
        }
        public void Test_GetExpensesByUserId_Fail()
        {
            _expenseRepository.Setup(e => e.GetAllExpensesByUserId(It.IsAny <long>()));

            var expenseServices = new BudgetExpensesServices(_expenseRepository.Object);

            Assert.ThrowsAsync <Exception>(() => expenseServices.GetExpensesByUserId(0));

            _expenseRepository.Verify(e => e.GetAllExpensesByUserId(It.IsAny <long>()), Times.Once);
        }
        public async Task Test_GetExpensesByUserId_Success()
        {
            _expenseRepository.Setup(e => e.GetAllExpensesByUserId(It.IsAny <long>()))
            .ReturnsAsync(new List <BudgetExpenses>());

            var expenseServices = new BudgetExpensesServices(_expenseRepository.Object);

            await expenseServices.GetExpensesByUserId(1);

            _expenseRepository.Verify(e => e.GetAllExpensesByUserId(It.IsAny <long>()), Times.Once);
        }
        public void Test_UpsertExpenses_Fail_EmptyList()
        {
            _expenseRepository.Setup(e => e.UpsertExpenses(It.IsAny <List <BudgetExpenses> >()))
            .Returns(Task.CompletedTask);

            var expenseService = new BudgetExpensesServices(_expenseRepository.Object);

            Assert.ThrowsAsync <ArgumentException>(() => expenseService.UpsertExpenses(new List <BudgetExpensesModel>()));

            _expenseRepository.Verify(e => e.UpsertExpenses(It.IsAny <List <BudgetExpenses> >()), Times.Never);
        }
        public void Test_UpdateExpense_Fail()
        {
            _expenseRepository.Setup(e => e.GetExpenseByExpenseId(It.IsAny <long>()));
            _expenseRepository.Setup(e => e.UpdateExpense(It.IsAny <long>(), It.IsAny <decimal>()));

            var expenseServices = new BudgetExpensesServices(_expenseRepository.Object);

            Assert.ThrowsAsync <Exception>(() => expenseServices.UpdateExpense(1, 2));

            _expenseRepository.Verify(e => e.UpdateExpense(It.IsAny <long>(), It.IsAny <decimal>()), Times.Never);
        }
        public async Task Test_UpdateExpense_Success()
        {
            _expenseRepository.Setup(e => e.GetExpenseByExpenseId(It.IsAny <long>()))
            .ReturnsAsync(new BudgetExpenses());
            _expenseRepository.Setup(e => e.UpdateExpense(It.IsAny <long>(), It.IsAny <decimal>()))
            .Returns(Task.CompletedTask);

            var expenseServices = new BudgetExpensesServices(_expenseRepository.Object);
            await expenseServices.UpdateExpense(1, 4);

            _expenseRepository.Verify(e => e.UpdateExpense(It.IsAny <long>(), It.IsAny <decimal>()), Times.Once);
        }
        public async Task Test_AddNewExpense_Success()
        {
            _expenseRepository.Setup(e => e.AddNewExpense(It.IsAny <BudgetExpenses>()))
            .Returns(Task.CompletedTask);

            var expenseService = new BudgetExpensesServices(_expenseRepository.Object);

            await expenseService.AddNewExpense(new BudgetExpensesModel()
            {
                UserId        = 1,
                ExpenseAmount = 50,
                ExpenseType   = "Groceries"
            });

            _expenseRepository.Verify(e => e.AddNewExpense(It.IsAny <BudgetExpenses>()), Times.Once);
        }
        public async Task Test_UpsertExpenses_Success()
        {
            _expenseRepository.Setup(e => e.UpsertExpenses(It.IsAny <List <BudgetExpenses> >()))
            .Returns(Task.CompletedTask);

            var expenseService = new BudgetExpensesServices(_expenseRepository.Object);
            await expenseService.UpsertExpenses(new List <BudgetExpensesModel>()
            {
                new BudgetExpensesModel {
                    UserId = 1, ExpenseAmount = 300, ExpenseType = "Groceries"
                },
                new BudgetExpensesModel {
                    UserId = 1, ExpenseAmount = 300, ExpenseType = "Fines"
                }
            });

            _expenseRepository.Verify(e => e.UpsertExpenses(It.IsAny <List <BudgetExpenses> >()), Times.Once);
        }