/// <summary> /// Initialize the temp folder with every attachments copies /// </summary> public void CreateAttachmentsCopies() { IList <Log> logs = repo.GetAll(); IMvxFileStore fileStore = Mvx.Resolve <IMvxFileStore>(); string tempDirPath = @"./TempAttachments"; // Create/Clear temp dir if (fileStore.FolderExists(tempDirPath)) { fileStore.DeleteFolder(tempDirPath, true); } fileStore.EnsureFolderExists(tempDirPath); foreach (Log log in logs) { IList <string> attachmentsNames = repo.GetAttachmentNames(log.Id); if (attachmentsNames.Count > 0) { fileStore.EnsureFolderExists(tempDirPath + "/" + log.Id); } foreach (string attachmentName in attachmentsNames) { Stream stream = repo.GetAttachment(log.Id, attachmentName); stream.Seek(0, SeekOrigin.Begin); StreamReader sr = new StreamReader(stream); //fileStore.WriteFile(tempDirPath + "/" + log.Id + "/" + attachmentName, sr.ReadToEnd()); int b = stream.ReadByte(); Stream tempFile = fileStore.OpenWrite(tempDirPath + "/" + log.Id + "/" + attachmentName); while (b != -1) { tempFile.WriteByte((byte)b); b = stream.ReadByte(); } } } }
public virtual void Attachments() { // Prepare test testContext.DeployFile(@"Ressources\Images\TN_15.jpg", @"Images"); testContext.DeployFile(@"Ressources\Images\RoNEX_brochure.pdf", @"Images"); entityRepo.TruncateCollection(); string attach1FilePath = "Images/TN_15.jpg"; string attach1FileName = "IDFile_1"; string attach2FilePath = "Images/RoNEX_brochure.pdf"; string attach2FileName = "IDFile_2"; TestEntity entity1; // // Test add of attachements on a First entity // { entity1 = TestHelper.GetEntity1(); entityRepo.InsertOne(entity1, InsertMode.erase_existing); Assert.IsFalse(string.IsNullOrEmpty(entity1.Id), "Id has been defined during insert"); using (var fileStream = File.Open(getFullpath(attach1FilePath), FileMode.Open)) { entityRepo.AddAttachment(entity1.Id, fileStream, "image/jpg", attach1FileName); } using (var fileStream = File.Open(getFullpath(attach2FilePath), FileMode.Open)) { entityRepo.AddAttachment(entity1.Id, fileStream, "application/pdf", attach2FileName); } // Try to get the list of attachments var attachNames = entityRepo.GetAttachmentNames(entity1.Id); Assert.AreEqual(2, attachNames.Count(), "Invalid number of attachments names found"); // Attachment detail 1 : Assert.IsTrue(attachNames.Contains(attach1FileName), "First attachment not found in the list"); var attachmentDetail = entityRepo.GetAttachmentDetail(entity1.Id, attach1FileName); Assert.AreEqual(attach1FileName, attachmentDetail.FileName); Assert.AreEqual("image/jpg", attachmentDetail.ContentType); // Attachment detail 2 : Assert.IsTrue(attachNames.Contains(attach2FileName), "2nd attachment not found in the list"); attachmentDetail = entityRepo.GetAttachmentDetail(entity1.Id, attach2FileName); Assert.AreEqual(attach2FileName, attachmentDetail.FileName); Assert.AreEqual("application/pdf", attachmentDetail.ContentType); entity1.Name = "NewName"; entityRepo.Update(entity1); var attachNames2 = entityRepo.GetAttachmentNames(entity1.Id); Assert.AreEqual(2, attachNames2.Count(), "An update of an entity should not alter its attachments"); Assert.IsTrue(attachNames2.Contains(attach1FileName), "An update of an entity should not alter its attachments"); Assert.IsTrue(attachNames2.Contains(attach2FileName), "An update of an entity should not alter its attachments"); } // // Test add of the same file to a 2nd entity // { //var entity2 = TestHelper.GetEntity2(); //entityRepo.InsertOne(entity2, InsertMode.erase_existing); //Assert.IsFalse(string.IsNullOrEmpty(entity2.Id), "Id has been defined during insert"); //using (var fileStream = File.Open(getFullpath(attach1FilePath), FileMode.Open)) //{ // entityRepo.AddAttachment(entity2.Id, fileStream, "image/jpg", attach1FileName); //} } // // Test get an attachement // { using (var fileRepoStream = entityRepo.GetAttachment(entity1.Id, attach1FileName)) { Assert.IsNotNull(fileRepoStream, "The steam returned by GetAttachment should not be null"); using (var sourceFileSteam = File.Open(getFullpath(attach1FilePath), FileMode.Open)) { Assert.IsTrue(sourceFileSteam.Length > 0, "File content is empty"); } } } // // Test remove of an attachement // { entityRepo.RemoveAttachment(entity1.Id, attach1FileName); AttachmentNotFoundNoSQLException notfoundEx = null; try { var fileRepoStream = entityRepo.GetAttachment(entity1.Id, attach1FileName); } catch (AttachmentNotFoundNoSQLException ex) { notfoundEx = ex; } Assert.IsInstanceOfType(notfoundEx, typeof(AttachmentNotFoundNoSQLException), "The get should return exception because the attachement has been deleted"); var attachNames3 = entityRepo.GetAttachmentNames(entity1.Id); Assert.AreEqual(1, attachNames3.Count()); entityRepo.Delete(entity1.Id); entityRepo.InsertOne(entity1); var attachNames4 = entityRepo.GetAttachmentNames(entity1.Id); Assert.AreEqual(0, attachNames4.Count(), "Delete of an entity should delete its attachemnts"); } // // Test remove of a missing attachement // { AttachmentNotFoundNoSQLException notfoundEx = null; try { entityRepo.RemoveAttachment(entity1.Id, attach1FileName); } catch (AttachmentNotFoundNoSQLException ex) { notfoundEx = ex; } Assert.IsInstanceOfType(notfoundEx, typeof(AttachmentNotFoundNoSQLException), "The RemoveAttachment should return exception because the attachement doesn't exists"); } }