Exemplo n.º 1
0
        /// <summary>
        /// Проверяем есть ли файл в Бд(если есть возвращаем его fileId, если нет то ноль)
        /// </summary>
        /// <param name="file"></param>
        /// <returns></returns>
        private int FindFileId(AttachedFileDTO file)
        {
            int fileId = 0;
            var ds     = _environment.Execute(AttachedFileQueries.GetSelectQueryByNameAndSize(file.FileName, Convert.ToInt32(file.FileSize)));

            if (ds.Tables[0].Rows.Count > 0)
            {
                fileId = Convert.ToInt32(ds.Tables[0].Rows[0][0]);
            }

            return(fileId);
        }
Exemplo n.º 2
0
        public void SmartCoreFileTest_InsertLinksForAnotherFiles()
        {
            var dbManager     = GetEnviroment();
            var fileSmartCore = new FilesSmartCore(dbManager);

            //Константа =999 для того что бы в тестах было проще искать в бд линки для удаления данных перед вставкой
            const int linkTypeId       = 999;
            const int directiveId1     = 7;
            const int directiveId2     = 8;
            int       directiveTypeId1 = SmartCoreType.Directive.ItemId;

            //Создаем линк с новым файлом
            var link1   = CreateItemFileLink(directiveId1, directiveTypeId1, linkTypeId);
            var fileId1 = fileSmartCore.SaveAttachedFile(link1);

            //Создаем линк с новым файлом(таким же как и в 1 линке) и новым parentId
            var link2 = CreateItemFileLink(directiveId2, directiveTypeId1, linkTypeId);

            UpdateFileLink(link2);            //Присваиваем другой файл для линка
            var fileId2 = fileSmartCore.SaveAttachedFile(link2);

            Assert.AreNotEqual(fileId1, fileId2, "Id файла не должны быть одинаковыми");

            var dsLinks = dbManager.Execute(ItemFileLinksQueries.GetSelectQuery(new[] { link1.ItemId, link2.ItemId }));

            Assert.AreEqual(2, dsLinks.Tables[0].Rows.Count, "Должно быть 2 линка");
            var getFirstLink  = ItemFileLinksQueries.Fill(dsLinks.Tables[0].Rows[0]);
            var getSecondLink = ItemFileLinksQueries.Fill(dsLinks.Tables[0].Rows[1]);

            Assert.AreNotEqual(getFirstLink.File.ItemId, getSecondLink.File.ItemId, "Id на файлы должны отличаться");
            Assert.AreEqual(fileId1, getFirstLink.File.ItemId, $"File Id первого линка должен быть равен {fileId1}");
            Assert.AreEqual(fileId2, getSecondLink.File.ItemId, $"File Id второго линка должен быть равен {fileId2}");
            Assert.AreEqual(linkTypeId, getFirstLink.LinkType, $"LinkType первого линка должен быть равен {linkTypeId}");
            Assert.AreEqual(linkTypeId, getSecondLink.LinkType, $"LinkType второго линка должен быть равен {linkTypeId}");
            Assert.AreEqual(directiveTypeId1, getFirstLink.ParentTypeId, $"ParentTypeId первого линка должен быть равен {directiveTypeId1}");
            Assert.AreEqual(directiveTypeId1, getSecondLink.ParentTypeId, $"ParentTypeId второго линка должен быть равен {directiveTypeId1}");
            Assert.AreEqual(directiveId1, getFirstLink.ParentId, $"ParentId первого линка должен быть равен {directiveId1}");
            Assert.AreEqual(directiveId2, getSecondLink.ParentId, $"ParentId второго линка должен быть равен {directiveId2}");

            var dsFiles1 = dbManager.Execute(AttachedFileQueries.GetSelectQueryByNameAndSize(link1.File.FileName, Convert.ToInt32(link1.File.FileSize)));
            var dsFiles2 = dbManager.Execute(AttachedFileQueries.GetSelectQueryByNameAndSize(link2.File.FileName, Convert.ToInt32(link2.File.FileSize)));

            Assert.AreEqual(1, dsFiles1.Tables[0].Rows.Count, $"Должен вернуть 1 файл {link1.File.FileName}");
            Assert.AreEqual(1, dsFiles2.Tables[0].Rows.Count, $"Должен вернуть 1 файл {link2.File.FileName}");

            fileSmartCore.DeleteAttachedFile(link1);
            fileSmartCore.DeleteAttachedFile(link2);

            dsLinks = dbManager.Execute(ItemFileLinksQueries.GetSelectQuery(new[] { link1.ItemId, link2.ItemId }));
            Assert.AreEqual(0, dsLinks.Tables[0].Rows.Count, "Должно быть 0 линков");
        }
Exemplo n.º 3
0
        /// <summary>
        /// Проверяем есть ли линки на файл, если нет то удаляем файл из Бд
        /// </summary>
        /// <param name="fileId"></param>
        private void DeleteFileIfFileHasNoLinks(int fileId)
        {
            ICommonFilter idFilter = new CommonFilter <int>(ItemFileLink.FileIdProperty, fileId);

            var query = BaseQueries.GetSelectQueryColumnOnly <ItemFileLink>(BaseEntityObject.ItemIdProperty, new[] { idFilter });

            var ds = _environment.Execute(query);

            var count = ds.Tables[0].Rows.Count;

            if (count == 0)
            {
                _environment.Execute(AttachedFileQueries.GetDeleteQuery(fileId));
            }
        }
Exemplo n.º 4
0
        public void SmartCoreFileTest_InsertLinksAndRemoveFileLinkForLastFile()
        {
            var dbManager     = GetEnviroment();
            var fileSmartCore = new FilesSmartCore(dbManager);

            //Константа =999 для того что бы в тестах было проще искать в бд линки для удаления данных перед вставкой
            const int linkTypeId       = 999;
            const int directiveId1     = 5;
            const int directiveId2     = 6;
            int       directiveTypeId1 = SmartCoreType.Directive.ItemId;

            //Создаем линк с новым файлом
            var link1   = CreateItemFileLink(directiveId1, directiveTypeId1, linkTypeId);
            var fileId1 = fileSmartCore.SaveAttachedFile(link1);

            //Создаем линк с новым файлом(таким же как и в 1 линке) и новым parentId
            var link2   = CreateItemFileLink(directiveId2, directiveTypeId1, linkTypeId);
            var fileId2 = fileSmartCore.SaveAttachedFile(link2);

            Assert.AreEqual(fileId1, fileId2, "Id файла должны быть одинаковыми");

            var dsLinks = dbManager.Execute(ItemFileLinksQueries.GetSelectQuery(new[] { link1.ItemId, link2.ItemId }));

            Assert.AreEqual(2, dsLinks.Tables[0].Rows.Count, "Должно быть 2 линка на 1 файл");

            //Удаляем 2й линк
            fileSmartCore.DeleteAttachedFile(link2);

            var dsFiles = dbManager.Execute(AttachedFileQueries.GetSelectQueryByNameAndSize(link1.File.FileName, Convert.ToInt32(link1.File.FileSize)));

            Assert.AreEqual(1, dsFiles.Tables[0].Rows.Count, "Файла должно быть");

            dsLinks = dbManager.Execute(ItemFileLinksQueries.GetSelectQuery(new[] { link1.ItemId, link2.ItemId }));
            Assert.AreEqual(1, dsLinks.Tables[0].Rows.Count, "Должно быть 1 линк");

            fileSmartCore.DeleteAttachedFile(link1);

            dsLinks = dbManager.Execute(ItemFileLinksQueries.GetSelectQuery(new[] { link1.ItemId, link2.ItemId }));
            Assert.AreEqual(0, dsLinks.Tables[0].Rows.Count, "Должно быть 0 линков");
        }
Exemplo n.º 5
0
        public int SaveAttachedFile(ItemFileLink link)
        {
            if (link == null)
            {
                throw new ArgumentNullException("ItemFileLink", "can not be null");
            }

            var dsAfterInsertLink = new DataSet();
            var existsFileId      = FindFileId(link.File);

            if (existsFileId > 0)
            {
                //Присваиваем fileId  файла, обновляем линк и возвращаем Id файла
                link.File.ItemId = existsFileId;

                dsAfterInsertLink = _environment.Execute(ItemFileLinksQueries.GetMergeQuery(), ItemFileLinksQueries.GetParameters(link));
                link.ItemId       = DbTypes.ToInt32(dsAfterInsertLink.Tables[0].Rows[0][0]);

                return(existsFileId);
            }
            //Запоминаем fileId старого файла
            var oldFileId = link.File.ItemId;

            var ds = _environment.Execute(AttachedFileQueries.GetInsertQuery(), AttachedFileQueries.GetParameters(link.File));
            //Запоминаем fileId нового файла
            var newFileId = DbTypes.ToInt32(ds.Tables[0].Rows[0][0]);

            link.File.ItemId = newFileId;

            dsAfterInsertLink = _environment.Execute(ItemFileLinksQueries.GetMergeQuery(), ItemFileLinksQueries.GetParameters(link));
            link.ItemId       = DbTypes.ToInt32(dsAfterInsertLink.Tables[0].Rows[0][0]);

            if (oldFileId > 0)
            {
                DeleteFileIfFileHasNoLinks(oldFileId);
            }

            return(newFileId);
        }