public async Task AddPayeeAsync_adds_payee_then_saves()
        {
            // Arrange
            var payee = new Payee {
                Name = "Test"
            };
            var sequence = new MockSequence();

            _mockRepo.Setup(m => m.GetPayees(It.IsAny <bool>(), It.IsAny <bool>(), It.IsAny <bool>())).Returns(new List <Payee>().AsQueryable());
            _mockRepo.InSequence(sequence).Setup(m => m.AddPayee(It.IsAny <Payee>()));
            _mockRepo.InSequence(sequence).Setup(m => m.SaveChangesAsync()).ReturnsAsync(1);

            // Act
            await _testService.AddPayeeAsync(payee);

            // Assert
            _mockRepo.Verify(m => m.AddPayee(payee), Times.Once());
            _mockRepo.Verify(m => m.SaveChangesAsync(), Times.Once());
        }
        /// <summary>
        /// The default constructor
        /// </summary>
        /// <param name="service">The service to use in the controller</param>
        public PayeeController(IPayeeManagerService service) : base(
                singleAdder: payee => service.AddPayeeAsync(payee),
                singleEditor: payee => service.UpdatePayeeAsync(payee),
                existanceChecker: payee => service.PayeeExists(payee.NavId),
                singleDeleter: id => service.RemovePayeeAsync(id)
                )
        {
            // Setup category name collection
            _allCategoryNames = service.GetCategories().Select(c => c.Name).ToList();

            // Setup CRUDController functions
            CollectionGetter   = () => GetViewModelCollection(service);
            ViewModelCreator   = id => GetViewModel(id, service);
            FailedPostRebinder = payee => payee.CategoryOptions = _allCategoryNames;

            // Setup error handling
            ExceptionHandling = new Dictionary <Type, Func <Exception, IActionResult> > {
                { typeof(ExpenseTrackerException), ex => NotFound() },
                { typeof(NullModelException), ex => {
                      ModelState.AddModelError("", ex.Message);
                      return(null);
                  } }
            };
        }