public void import_should_return_errors_for_existing_emails()
        {
            var userid = Guid.NewGuid();
            var username = "******";
            var contact1 = new Contact
                               {
                                   Email = "*****@*****.**",
                                   User = new User { UserId = userid }
                               };
            var contact2 = new Contact
                               {
                                   Email = "*****@*****.**",
                                   User = new User { UserId = userid }
                               };
            var contact3 = new Contact
                               {
                                   Email = "*****@*****.**",
                                   User = new User { UserId = userid }
                               };
            var contacts = new List<Contact>
                       {
                           contact1,
                           contact2,
                           contact3
                       };

            var repository = new InMemoryContactRepository();
            repository.Add(contact2);

            var mockRunner = new Mock<IValidationRunner>();
            mockRunner.Expect(v => v.Run(contact1))
                .Returns(new List<ValidationError>());
            mockRunner.Expect(v => v.Run(contact2))
                .Returns(new List<ValidationError>());
            mockRunner.Expect(v => v.Run(contact3))
                .Returns(new List<ValidationError>());

            var service = new InMemoryContactService(
                repository,
                mockRunner.Object);

            var exception = (ValidationException)
                            Assert.Throws(typeof(ValidationException),
                                          () => service.Import(
                                              new User
                                                  {
                                                      UserId = userid,
                                                      Username = username
                                                  }, contacts));

            Assert.AreEqual(1, exception.ValidationErrors.Count);
            Assert.AreEqual(string.Format("{0} already exists",
                                          contact2.Email),
                            exception.ValidationErrors[0].ErrorMessage);
            Assert.AreEqual(1, repository.Get()
                                   .Count(c => c.Email == contact2.Email));
            mockRunner.VerifyAll();
        }
        public void import_should_set_user_object_on_each_contact()
        {
            var userid = Guid.NewGuid();
            var username = "******";
            var contact1 = new Contact
            {
            Email = "*****@*****.**"
            };
            var contact2 = new Contact
            {
            Email = "*****@*****.**"
            };
            var contact3 = new Contact
            {
            Email = "*****@*****.**"
            };
            var contacts = new List<Contact>
               {
               contact1,
               contact2,
               contact3
               };

            var repo = new InMemoryContactRepository();

            var mockRunner = new Mock<IValidationRunner>();
            mockRunner.Expect(v => v.Run(contact1))
            .Returns(new List<ValidationError>());
            mockRunner.Expect(v => v.Run(contact2))
            .Returns(new List<ValidationError>());
            mockRunner.Expect(v => v.Run(contact3))
            .Returns(new List<ValidationError>());

            var service = new InMemoryContactService(
            repo,
            mockRunner.Object);

            service.Import(new User
            {
            UserId = userid,
            Username = username
            }, contacts);

            Assert.AreEqual(3,repo.Get().Count());
            Assert.AreEqual(3, repo.Get().Count(
                           c => c.User.UserId == userid &&
                                c.User.Username == username));
            mockRunner.VerifyAll();
        }