public void ThrowsExceptionWhenAddingTheSameEmailUpdatesExistingDataWithNewDataAndOnRetryFails()
        {
            var leadRepository = new Mock <LocalRepository <Contact> > {
                CallBase = true
            };
            var serverTime        = new Mock <IServerTime>();
            var emailLead         = ModelHelper.EmailLead;
            var xDataProvider     = new Mock <IExternalDataProvider>();
            var contactAutoRating = new Mock <IContactAutoRating>();

            leadRepository.Setup(er => er.SaveChanges()).Throws(new Exception());
            leadRepository.Object.Add(emailLead);

            var clientRepository = new LocalRepository <Client>();
            var client           = ModelHelper.TestClient1AllDataNoReferences;

            clientRepository.Add(client);

            var contactService = new Mock <IContactService>();

            var emailController = new WebhookController(leadRepository.Object, clientRepository, contactService.Object, serverTime.Object, xDataProvider.Object, contactAutoRating.Object);

            emailController.MandrillContentWebhook(new MadrillContentPost {
                id = "1", html = "<p>Very New Sample Text</p>", text = "Very New Sample Text", to = "*****@*****.**"
            });

            Assert.AreEqual(0, leadRepository.Object.Where(er => er.Property.Any(lp => lp.Type == "Html" && lp.Value == "<p>Very New Sample Text</p>")).Count());
            Assert.AreEqual(0, leadRepository.Object.Where(er => er.Property.Any(lp => lp.Type == "Text" && lp.Value == "Very New Sample Text")).Count());
            Assert.AreEqual(1, leadRepository.Object.Where(er => er.Property.Any(lp => lp.Type == "Text" && lp.Value == "New Sample Text")).Count());
            contactAutoRating.Verify(ar => ar.SetAutoRating(It.IsAny <Contact>()), Times.Exactly(2));

            contactService.Verify(cs => cs.NotifyClientsForNewContactWithEmail(It.IsAny <int>()), Times.Never);
            contactService.Verify(cs => cs.NotifyClientsForNewContactWithPhoneNotification(It.IsAny <int>()), Times.Never);
            contactService.Verify(cs => cs.NotifyClientsForNewContactWithSmsNotification(It.IsAny <int>()), Times.Never);
        }
        public void MandrillContentWebhookDoesntHaveEmailInRepository()
        {
            var leadRepository = new LocalRepository <Contact>();

            var emailLead = ModelHelper.EmailLead;

            leadRepository.Add(emailLead);
            var serverTime       = new Mock <IServerTime>();
            var clientRepository = new LocalRepository <Client>();

            clientRepository.Add(ModelHelper.TestClient1AllDataNoReferences);
            var xDataProvider     = new Mock <IExternalDataProvider>();
            var contactAutoRating = new Mock <IContactAutoRating>();

            var contactService = new Mock <IContactService>();

            serverTime.Setup(st => st.RequestStarted).Returns(new DateTime(2013, 01, 01, 9, 0, 0));
            var emailController = new WebhookController(leadRepository, clientRepository, contactService.Object, serverTime.Object, xDataProvider.Object, contactAutoRating.Object);

            emailController.MandrillContentWebhook(new MadrillContentPost {
                id = "2", html = "<p>New Sample Text</p>", text = "New Sample Text", to = "*****@*****.**"
            });
            Assert.AreEqual(2, leadRepository.All().Count());
            Assert.AreEqual("New Sample Text", leadRepository.Where(e => e.Property.Any(lp => lp.Type == "MandrillId" && lp.Value == "2")).First().Property.First(lp => lp.Type == "Text").Value);
            Assert.AreEqual("<p>New Sample Text</p>", leadRepository.Where(e => e.Property.Any(lp => lp.Type == "MandrillId" && lp.Value == "2")).First().Property.First(lp => lp.Type == "Html").Value);
            contactAutoRating.Verify(ar => ar.SetAutoRating(It.IsAny <Contact>()), Times.Once());

            contactService.Verify(cs => cs.NotifyClientsForNewContactWithEmail(It.IsAny <int>()), Times.Once());
            contactService.Verify(cs => cs.NotifyClientsForNewContactWithPhoneNotification(It.IsAny <int>()), Times.Once());
            contactService.Verify(cs => cs.NotifyClientsForNewContactWithSmsNotification(It.IsAny <int>()), Times.Once());
        }