/// <summary>
        /// Method used for demonstrate interaction testing
        /// </summary>
        public Customer Create(CustomerCreate data)
        {
            _authService.Authorize(this.UserName, "customer_create");

            if (data.Email == "invalid")
                throw new InvalidOperationException();

            if (_db.Customers.Any(x => x.Email == data.Email))
                throw new EmailAlreadyExistsException();

            var e = AutoMapper.Mapper.Map<Entities.Customer>(data);

            _db.Customers.Add(e);

            _customerLogManager.LogCreate(e);

            _db.SaveChanges();

            _mailer.Send(data.Email, "Welcome");

            return e;
        }
        public void Create_ExistingEmail_Exception(
            IDataContextWrapper db,
            CustomerCreate data,
            CustomerManager sut)
        {
            data.Email = db.Set<Customer>().Select(x => x.Email).First();

            Assert.Throws<CustomerManager.EmailAlreadyExistsException>(() =>
                sut.Create(data));
        }
        public void Create_InvalidEmail_InvalidOp(
            CustomerCreate data,
            [Frozen] Mock<IAuthService> authService,
            [Frozen] Mock<IMailer> mailer,
            CustomerManager sut)
        {
            data.Email = "invalid";

            Assert.Throws<InvalidOperationException>(() =>
                sut.Create(data)
            );

            mailer.Verify(x => x.Send(data.Email, It.IsAny<string>()), Times.Never);
        }