public async void Create()
        {
            var mock  = new ServiceMockFacade <IEmailAddressRepository>();
            var model = new ApiEmailAddressRequestModel();

            mock.RepositoryMock.Setup(x => x.Create(It.IsAny <EmailAddress>())).Returns(Task.FromResult(new EmailAddress()));
            var service = new EmailAddressService(mock.LoggerMock.Object,
                                                  mock.RepositoryMock.Object,
                                                  mock.ModelValidatorMockFactory.EmailAddressModelValidatorMock.Object,
                                                  mock.BOLMapperMockFactory.BOLEmailAddressMapperMock,
                                                  mock.DALMapperMockFactory.DALEmailAddressMapperMock);

            CreateResponse <ApiEmailAddressResponseModel> response = await service.Create(model);

            response.Should().NotBeNull();
            mock.ModelValidatorMockFactory.EmailAddressModelValidatorMock.Verify(x => x.ValidateCreateAsync(It.IsAny <ApiEmailAddressRequestModel>()));
            mock.RepositoryMock.Verify(x => x.Create(It.IsAny <EmailAddress>()));
        }
        public async Task TestCreate_CheckProperties()
        {
            using (ShimsContext.Create())
            {
                System.Data.Entity.Fakes.ShimDbContext.AllInstances.SetOf1 <Person>((c) =>
                {
                    return(context.People);
                });
                var              personId         = 1;
                Person           person           = null;
                EmailAddressType emailAddressType = new EmailAddressType
                {
                    EmailAddressTypeId   = EmailAddressType.Home.Id,
                    EmailAddressTypeName = EmailAddressType.Home.Value
                };
                context.SetupActions.Add(() =>
                {
                    person = new Person
                    {
                        PersonId = personId,
                        FullName = "full name"
                    };
                    context.EmailAddressTypes.Add(emailAddressType);
                    context.People.Add(person);
                });
                var    user  = new User(1);
                var    email = "*****@*****.**";
                var    emailAddressTypeId = emailAddressType.EmailAddressTypeId;
                var    isPrimary          = true;
                var    newEmail           = new NewPersonEmailAddress(user, emailAddressTypeId, email, isPrimary, personId);
                Action beforeTester       = () =>
                {
                    Assert.AreEqual(1, context.People.Count());
                    Assert.AreEqual(0, context.EmailAddresses.Count());
                };
                Action afterTester = () =>
                {
                    Assert.AreEqual(1, context.People.Count());
                    var firstPerson = context.People.First();
                    Assert.AreEqual(1, firstPerson.EmailAddresses.Count);
                    var firstEmail = firstPerson.EmailAddresses.First();
                    Assert.AreEqual(email, firstEmail.Address);
                    Assert.AreEqual(emailAddressTypeId, firstEmail.EmailAddressTypeId);
                    Assert.AreEqual(isPrimary, firstEmail.IsPrimary);

                    Assert.AreEqual(user.Id, firstEmail.History.CreatedBy);
                    Assert.AreEqual(user.Id, firstEmail.History.RevisedBy);
                    DateTimeOffset.Now.Should().BeCloseTo(firstEmail.History.CreatedOn, 20000);
                    DateTimeOffset.Now.Should().BeCloseTo(firstEmail.History.RevisedOn, 20000);
                };
                context.Revert();
                beforeTester();
                service.Create(newEmail);
                afterTester();

                context.Revert();
                beforeTester();
                await service.CreateAsync(newEmail);

                afterTester();
            }
        }