public void Test_Add_File_To_Content_Item_Without_Metadata()
        {
            var dataService = DataServiceFactory();

            dataService.Setup(ds => ds.AddContentItem(It.IsAny <ContentItem>(), It.IsAny <int>()))
            .Returns(Constants.CONTENT_AddContentItemId);

            // Return empty set of metadata.
            dataService.Setup(ds => ds.GetMetaData(It.IsAny <int>())).Returns(MockHelper.CreateEmptyMetaDataReader);

            var content = ContentTestHelper.CreateValidContentItem();

            content.Metadata.Clear();

            var contentId = Util.GetContentController().AddContentItem(content);

            Assert.AreEqual(contentId, Constants.CONTENT_AddContentItemId);
            Assert.IsEmpty(content.Metadata);

            dataService.Setup(ds => ds.GetContentItem(It.IsAny <int>()))
            .Returns <int>(y => MockHelper.CreateValidContentItemReader(content));

            var fileController = ComponentFactory.GetComponent <IAttachmentController>();

            fileController.AddFileToContent(contentId, ContentTestHelper.CreateValidFile(0));

            dataService.Verify(
                ds => ds.AddMetaData(It.IsAny <ContentItem>(), FileController.FilesKey, new[] { 0 }.ToJson()));
        }
        public void Test_Load_Attachments_From_DataService()
        {
            var files = new List <IFileInfo>
            {
                ContentTestHelper.CreateValidFile(0),
                ContentTestHelper.CreateValidFile(1),
                ContentTestHelper.CreateValidFile(2)
            };

            var dataService = DataServiceFactory();

            dataService.Setup(ds => ds.GetContentItem(It.IsAny <int>())).Returns(MockHelper.CreateValidContentItemReader);

            dataService.Setup(
                ds =>
                ds.GetMetaData(It.IsAny <int>())).Returns(
                () => MockHelper.CreateMetaDataReaderWithFiles(files, new IFileInfo[0], new IFileInfo[0]));

            var contentItem = Util.GetContentController().GetContentItem(Constants.CONTENT_ValidContentItemId);

            Assert.IsNotNull(contentItem);

            var serialized = contentItem.Metadata[FileController.FilesKey];

            Assert.IsNotEmpty(serialized);

            Assert.IsNotEmpty(contentItem.Files);
            Assert.AreEqual(contentItem.Files.Count, 3);
            Assert.AreEqual(contentItem.Files[0].FileId, 0);
            Assert.AreEqual(contentItem.Files[1].FileId, 1);
            Assert.AreEqual(contentItem.Files[2].FileId, 2);
        }
        public void Test_Add_Attachments_With_FileController()
        {
            var dataService = DataServiceFactory();

            dataService.Setup(
                ds =>
                ds.GetContentItem(It.IsAny <int>())).Returns(MockHelper.CreateValidContentItemReader);

            // Use a closure to store the metadata locally in this method.
            var data = new Dictionary <string, string>();

            dataService.Setup(
                ds =>
                ds.GetMetaData(It.IsAny <int>())).Returns(
                () => MockHelper.CreateMetaDataReaderFromDictionary(data));

            dataService.Setup(
                ds =>
                ds.AddMetaData(
                    It.IsAny <ContentItem>(),
                    It.IsAny <string>(),
                    It.IsAny <string>()))
            .Callback <ContentItem, string, string>((ci, name, value) => data[name] = value);

            var contentController = Util.GetContentController();

            var contentItem = contentController.GetContentItem(Constants.CONTENT_ValidContentItemId);

            Assert.IsNotNull(contentItem);

            var serialized = contentItem.Metadata[FileController.FilesKey];

            Assert.IsNull(serialized);
            Assert.IsEmpty(contentItem.Files);

            var fileManager = ComponentFactory.GetComponent <IFileManager>();

            // Add some files.
            var fileController = ComponentFactory.GetComponent <IAttachmentController>();

            fileController.AddFileToContent(contentItem.ContentItemId, fileManager.GetFile(0));
            fileController.AddFileToContent(contentItem.ContentItemId, fileManager.GetFile(1));

            contentItem = contentController.GetContentItem(Constants.CONTENT_ValidContentItemId);

            Assert.AreEqual(contentItem.Files.Count, 2);
            Assert.AreEqual(contentItem.Files[0].FileId, 0);
            Assert.AreEqual(contentItem.Files[1].FileId, 1);

            dataService.Verify(
                ds => ds.DeleteMetaData(It.IsAny <ContentItem>(), FileController.FilesKey, "[0]"), Times.Once());

            dataService.Verify(
                ds => ds.AddMetaData(It.IsAny <ContentItem>(), FileController.FilesKey, "[0]"), Times.Once());

            dataService.Verify(
                ds => ds.AddMetaData(It.IsAny <ContentItem>(), FileController.FilesKey, "[0,1]"), Times.Once());
        }
        public void Set_MetaData_To_Empty_Value_Deletes_Row()
        {
            var data = new Dictionary <string, string>();

            var dataService = DataServiceFactoryWithLocalMetaData(ref data);

            dataService.Setup(ds => ds.GetContentItem(It.IsAny <int>())).Returns(MockHelper.CreateValidContentItemReader);

            var contentController = Util.GetContentController();

            var fileManager = ComponentFactory.GetComponent <IFileManager>();

            var contentItem = contentController.GetContentItem(Constants.CONTENT_ValidContentItemId);

            Assert.IsNotNull(contentItem);

            var serialized = contentItem.Metadata[FileController.FilesKey];

            Assert.IsNull(serialized);
            Assert.IsEmpty(contentItem.Files);

            // Add some files.
            var fileController = ComponentFactory.GetComponent <IAttachmentController>();

            fileController.AddFileToContent(contentItem.ContentItemId, fileManager.GetFile(0));
            fileController.AddFileToContent(contentItem.ContentItemId, fileManager.GetFile(1));

            contentItem = contentController.GetContentItem(Constants.CONTENT_ValidContentItemId);

            Assert.AreEqual(contentItem.Files.Count, 2);
            Assert.AreEqual(contentItem.Files[0].FileId, 0);
            Assert.AreEqual(contentItem.Files[1].FileId, 1);
            Assert.IsNotEmpty(contentItem.Metadata[FileController.FilesKey]);

            contentItem.Files.Clear();

            contentController.UpdateContentItem(contentItem);

            dataService.Verify(ds => ds.DeleteMetaData(It.IsAny <ContentItem>(), FileController.FilesKey, "[0]"), Times.Once());
            dataService.Verify(ds => ds.DeleteMetaData(It.IsAny <ContentItem>(), FileController.FilesKey, "[0,1]"), Times.Once());
            dataService.Verify(ds => ds.AddMetaData(It.IsAny <ContentItem>(), FileController.FilesKey, "[0]"), Times.Once());
            dataService.Verify(ds => ds.AddMetaData(It.IsAny <ContentItem>(), FileController.FilesKey, "[0,1]"), Times.Once());

            var emptyFiles = fileController.GetFilesByContent(contentItem.ContentItemId);

            Assert.AreEqual(0, emptyFiles.Count);
        }
        public void Set_MetaData_To_Same_Value_Doesnt_Update_Database_Entry()
        {
            var metadata = new Dictionary <string, string>();

            var dataService = DataServiceFactoryWithLocalMetaData(ref metadata);

            var contentController = Util.GetContentController();

            var contentItem = ContentTestHelper.CreateValidContentItem();

            contentController.AddContentItem(contentItem);

            dataService.Verify(ds => ds.AddMetaData(contentItem, FileController.TitleKey, It.IsAny <string>()), Times.Never());
            dataService.Verify(ds => ds.DeleteMetaData(contentItem, FileController.TitleKey, It.IsAny <string>()), Times.Never());

            contentItem.ContentTitle = "Foobar";

            contentController.UpdateContentItem(contentItem);

            dataService.Verify(ds => ds.AddMetaData(contentItem, FileController.TitleKey, It.IsAny <string>()), Times.Once());
            dataService.Verify(ds => ds.DeleteMetaData(contentItem, FileController.TitleKey, It.IsAny <string>()), Times.Never());

            contentItem.ContentTitle = "Foobar";

            contentController.UpdateContentItem(contentItem);

            // Should be a no-op since no real data changed
            dataService.Verify(ds => ds.AddMetaData(contentItem, FileController.TitleKey, It.IsAny <string>()), Times.Once());
            dataService.Verify(ds => ds.DeleteMetaData(contentItem, FileController.TitleKey, It.IsAny <string>()), Times.Never());


            // Really update
            contentItem.ContentTitle = "SNAFU";

            contentController.UpdateContentItem(contentItem);

            dataService.Verify(ds => ds.AddMetaData(contentItem, FileController.TitleKey, It.IsAny <string>()), Times.Exactly(2));
            dataService.Verify(ds => ds.DeleteMetaData(contentItem, FileController.TitleKey, It.IsAny <string>()), Times.Once());
        }
        /// <summary>
        /// Gets the terms by vocabularyId.
        /// </summary>
        /// <param name="voc">The voc.</param>
        /// <param name="vocabularyId">The vocabulary id.</param>
        /// <returns>term collection.</returns>
        internal static List <Term> GetTerms(this Vocabulary voc, int vocabularyId)
        {
            ITermController ctl = Util.GetTermController();

            return(ctl.GetTermsByVocabulary(vocabularyId).ToList());
        }
        /// <summary>
        /// Gets the type of the scope.
        /// </summary>
        /// <param name="voc">The voc.</param>
        /// <param name="scopeTypeId">The scope type id.</param>
        /// <returns>scope type.</returns>
        internal static ScopeType GetScopeType(this Vocabulary voc, int scopeTypeId)
        {
            IScopeTypeController ctl = Util.GetScopeTypeController();

            return(ctl.GetScopeTypes().Where(s => s.ScopeTypeId == scopeTypeId).SingleOrDefault());
        }
        /// <summary>
        /// Gets the vocabulary.
        /// </summary>
        /// <param name="term">The term.</param>
        /// <param name="vocabularyId">The vocabulary id.</param>
        /// <returns>Vocabulary.</returns>
        internal static Vocabulary GetVocabulary(this Term term, int vocabularyId)
        {
            IVocabularyController ctl = Util.GetVocabularyController();

            return((from v in ctl.GetVocabularies() where v.VocabularyId == vocabularyId select v).SingleOrDefault());
        }