public void WillSendEmailToAllOwners()
            {
                var from    = new MailAddress("*****@*****.**", "flossy");
                var package = new PackageRegistration
                {
                    Id     = "smangit",
                    Owners = new[]
                    {
                        new User {
                            EmailAddress = "*****@*****.**", EmailAllowed = true
                        },
                        new User {
                            EmailAddress = "*****@*****.**", EmailAllowed = true
                        }
                    }
                };

                var messageService = new TestableMessageService();

                messageService.SendContactOwnersMessage(from, package, "Test message", "http://someurl/", false);
                var message = messageService.MockMailSender.Sent.Last();

                Assert.Equal("*****@*****.**", message.To[0].Address);
                Assert.Equal("*****@*****.**", message.To[1].Address);
                Assert.Equal(TestGalleryOwner, message.From);
                Assert.Equal("*****@*****.**", message.ReplyToList.Single().Address);
                Assert.Contains("[Joe Shmoe] Message for owners of the package 'smangit'", message.Subject);
                Assert.Contains("Test message", message.Body);
                Assert.Contains(
                    "User flossy <[email protected]> sends the following message to the owners of Package 'smangit'.", message.Body);
            }
            public void WillNotSendEmailToOwnerThatOptsOut()
            {
                var from    = new MailAddress("*****@*****.**", "flossy");
                var package = new PackageRegistration
                {
                    Id     = "smangit",
                    Owners = new[]
                    {
                        new User {
                            EmailAddress = "*****@*****.**", EmailAllowed = true
                        },
                        new User {
                            EmailAddress = "*****@*****.**", EmailAllowed = false
                        }
                    }
                };

                var messageService = new TestableMessageService();

                messageService.SendContactOwnersMessage(from, package, "Test message", "http://someurl/", false);
                var message = messageService.MockMailSender.Sent.Last();

                Assert.Equal("*****@*****.**", message.To[0].Address);
                Assert.Equal(1, message.To.Count);
            }
            public void WillCopySenderIfAsked()
            {
                var from    = new MailAddress("*****@*****.**", "flossy");
                var package = new PackageRegistration {
                    Id = "smangit"
                };

                package.Owners = new[]
                {
                    new User {
                        EmailAddress = "*****@*****.**", EmailAllowed = true
                    },
                    new User {
                        EmailAddress = "*****@*****.**", EmailAllowed = true
                    }
                };
                var messageService = new TestableMessageService();

                messageService.SendContactOwnersMessage(from, package, "Test message", "http://someurl/", true);

                var messages = messageService.MockMailSender.Sent;

                Assert.Equal(2, messages.Count);
                Assert.Equal(package.Owners.Count, messages[0].To.Count);
                Assert.Equal(1, messages[1].To.Count);
                Assert.Equal("*****@*****.**", messages[0].To[0].Address);
                Assert.Equal("*****@*****.**", messages[0].To[1].Address);
                Assert.Equal(messages[1].ReplyToList.Single(), messages[1].To.First());
                Assert.Equal(TestGalleryOwner, messages[0].From);
                Assert.Equal(TestGalleryOwner, messages[1].From);
                Assert.Equal("*****@*****.**", messages[0].ReplyToList.Single().Address);
                Assert.Equal("*****@*****.**", messages[1].ReplyToList.Single().Address);
            }
            public void WillNotCopySenderIfNoOwnersAllow()
            {
                var from    = new MailAddress("*****@*****.**", "flossy");
                var package = new PackageRegistration {
                    Id = "smangit"
                };

                package.Owners = new[]
                {
                    new User {
                        EmailAddress = "*****@*****.**", EmailAllowed = false
                    },
                    new User {
                        EmailAddress = "*****@*****.**", EmailAllowed = false
                    }
                };

                var messageService = new TestableMessageService();

                messageService.SendContactOwnersMessage(from, package, "Test message", "http://someurl/", false);

                Assert.Empty(messageService.MockMailSender.Sent);
            }
            public void WillNotCopySenderIfNoOwnersAllow()
            {
                var from = new MailAddress("*****@*****.**", "flossy");
                var package = new PackageRegistration { Id = "smangit" };
                package.Owners = new[]
                    {
                        new User { EmailAddress = "*****@*****.**", EmailAllowed = false },
                        new User { EmailAddress = "*****@*****.**", EmailAllowed = false }
                    };

                var messageService = new TestableMessageService();
                messageService.SendContactOwnersMessage(from, package, "Test message", "http://someurl/", false);

                Assert.Empty(messageService.MockMailSender.Sent);
            }
            public void WillNotSendEmailToOwnerThatOptsOut()
            {
                var from = new MailAddress("*****@*****.**", "flossy");
                var package = new PackageRegistration
                {
                    Id = "smangit",
                    Owners = new[]
                    {
                        new User { EmailAddress = "*****@*****.**", EmailAllowed = true },
                        new User { EmailAddress = "*****@*****.**", EmailAllowed = false }
                    }
                };

                var messageService = new TestableMessageService();
                messageService.SendContactOwnersMessage(from, package, "Test message", "http://someurl/", false);
                var message = messageService.MockMailSender.Sent.Last();

                Assert.Equal("*****@*****.**", message.To[0].Address);
                Assert.Equal(1, message.To.Count);
            }
            public void WillSendEmailToAllOwners()
            {
                var from = new MailAddress("*****@*****.**", "flossy");
                var package = new PackageRegistration
                {
                    Id = "smangit",
                    Owners = new[]
                    {
                        new User { EmailAddress = "*****@*****.**", EmailAllowed = true },
                        new User { EmailAddress = "*****@*****.**", EmailAllowed = true }
                    }
                };

                var messageService = new TestableMessageService();
                messageService.SendContactOwnersMessage(from, package, "Test message", "http://someurl/", false);
                var message = messageService.MockMailSender.Sent.Last();

                Assert.Equal("*****@*****.**", message.To[0].Address);
                Assert.Equal("*****@*****.**", message.To[1].Address);
                Assert.Equal(TestGalleryOwner, message.From);
                Assert.Equal("*****@*****.**", message.ReplyToList.Single().Address);
                Assert.Contains("[Joe Shmoe] Message for owners of the package 'smangit'", message.Subject);
                Assert.Contains("Test message", message.Body);
                Assert.Contains(
                    "User flossy <[email protected]> sends the following message to the owners of Package 'smangit'.", message.Body);
            }
            public void WillCopySenderIfAsked()
            {
                var from = new MailAddress("*****@*****.**", "flossy");
                var package = new PackageRegistration { Id = "smangit" };
                package.Owners = new[]
                    {
                        new User { EmailAddress = "*****@*****.**", EmailAllowed = true },
                        new User { EmailAddress = "*****@*****.**", EmailAllowed = true }
                    };
                var messageService = new TestableMessageService();

                messageService.SendContactOwnersMessage(from, package, "Test message", "http://someurl/", true);

                var messages = messageService.MockMailSender.Sent;
                Assert.Equal(2, messages.Count);
                Assert.Equal(package.Owners.Count, messages[0].To.Count);
                Assert.Equal(1, messages[1].To.Count);
                Assert.Equal("*****@*****.**", messages[0].To[0].Address);
                Assert.Equal("*****@*****.**", messages[0].To[1].Address);
                Assert.Equal(messages[1].ReplyToList.Single(), messages[1].To.First());
                Assert.Equal(TestGalleryOwner, messages[0].From);
                Assert.Equal(TestGalleryOwner, messages[1].From);
                Assert.Equal("*****@*****.**", messages[0].ReplyToList.Single().Address);
                Assert.Equal("*****@*****.**", messages[1].ReplyToList.Single().Address);
            }