public void AddAttachmentToCommunicationItemTest()
        {
            var client = GetRepository();


            var caseFromDb = client.Cases.Expand(c => c.CommunicationItems).FirstOrDefault();

            Assert.IsNotNull(caseFromDb);

            client.Attach(caseFromDb);


            var emailItemToAdd = new EmailItem();

            emailItemToAdd.Body = "newEmailItem";

            var phoneItemToAdd = new PhoneCallItem();

            phoneItemToAdd.Body = "newPhoneBody";

            Attachment attachToemail = new Attachment();

            attachToemail.DisplayName = "emailAttach";

            Attachment attachToPhone = new Attachment();

            attachToPhone.DisplayName = "phoneAttach";

            emailItemToAdd.Attachments.Add(attachToemail);
            phoneItemToAdd.Attachments.Add(attachToPhone);

            caseFromDb.CommunicationItems.Add(emailItemToAdd);
            caseFromDb.CommunicationItems.Add(phoneItemToAdd);

            client.UnitOfWork.Commit();


            client = GetRepository();

            var caseForCheck = client.Cases.Where(c => c.CaseId == caseFromDb.CaseId).Expand(c => c.CommunicationItems).SingleOrDefault();

            Assert.IsNotNull(caseForCheck);
            Assert.IsTrue(caseForCheck.CommunicationItems.Count >= 2);

            var emailForCheck = caseFromDb.CommunicationItems.Where(ci => ci.CommunicationItemId == emailItemToAdd.CommunicationItemId).OfType <EmailItem>()
                                .SingleOrDefault();

            Assert.IsNotNull(emailForCheck);

            var emailAttachemntForCheck = emailForCheck.Attachments.Where(at => at.AttachmentId == attachToemail.AttachmentId).SingleOrDefault();

            Assert.IsNotNull(emailAttachemntForCheck);


            var phoneForCheck = caseFromDb.CommunicationItems.Where(ci => ci.CommunicationItemId == phoneItemToAdd.CommunicationItemId)
                                .OfType <PhoneCallItem>().SingleOrDefault();

            Assert.IsNotNull(phoneForCheck);

            var phoneAttachmentForCheck = phoneForCheck.Attachments.Where(at => at.AttachmentId == attachToPhone.AttachmentId)
                                          .SingleOrDefault();

            Assert.IsNotNull(phoneAttachmentForCheck);
        }
        public void AddCommunicationItemsWithAttachmentsToExistingCase()
        {
            var client = GetRepository();

            Case caseFromDb = client.Cases
                              .Expand(c => c.Labels).Expand(c => c.Notes).Expand(c => c.CommunicationItems)
                              .FirstOrDefault();

            Assert.IsNotNull(caseFromDb);
            client.Attach(caseFromDb);

            var emailItem = new EmailItem();

            emailItem.AuthorName = "Unknown";
            emailItem.Body       = "body of emailItem";
            emailItem.From       = "*****@*****.**";
            emailItem.Subject    = "Subject";
            emailItem.Title      = "Hello!!";
            emailItem.To         = "*****@*****.**";


            var phoneItem = new PhoneCallItem();

            phoneItem.AuthorName  = "bob marley";
            phoneItem.Body        = "body of phoneitem";
            phoneItem.Direction   = "Inbound";
            phoneItem.PhoneNumber = "789465123";
            phoneItem.Title       = "Hey you!";


            var note = new Note();

            note.AuthorName = "Me";
            note.Body       = "noteBody";
            note.Title      = "note fo case";

            Attachment attach1 = new Attachment();

            attach1.DisplayName = "Attachment1";

            emailItem.Attachments.Add(attach1);

            caseFromDb.CommunicationItems.Add(emailItem);
            caseFromDb.CommunicationItems.Add(phoneItem);
            caseFromDb.Notes.Add(note);

            client.UnitOfWork.Commit();


            client = GetRepository();

            Case caseForCheck = client.Cases.Where(c => c.CaseId == caseFromDb.CaseId)
                                .Expand(c => c.Labels).Expand(c => c.Notes).Expand(c => c.CommunicationItems)
                                .SingleOrDefault();

            var phoneItemFromDb = caseForCheck.CommunicationItems.Where(ci => ci.CommunicationItemId == phoneItem.CommunicationItemId)
                                  .OfType <PhoneCallItem>().SingleOrDefault();

            var emailItemFromDb = caseForCheck.CommunicationItems.Where(ci => ci.CommunicationItemId == emailItem.CommunicationItemId)
                                  .OfType <EmailItem>().SingleOrDefault();

            var noteFromDb = caseForCheck.Notes.Where(n => n.NoteId == note.NoteId).SingleOrDefault();

            Assert.IsNotNull(caseForCheck);
            Assert.IsNotNull(phoneItemFromDb);
            Assert.IsNotNull(emailItemFromDb);
            Assert.IsNotNull(noteFromDb);
        }