public void AccessToDeletedTask() { Clean(); var certificateSource = CreateRealSourceForSupplier(supplier); var serialNumber = Path.GetRandomFileName(); var catalog = TestCatalogProduct.Queryable.First(); var product = TestProduct.Queryable.First(p => p.CatalogProduct == catalog); var documentLine = CreateBodyLine(serialNumber, product); var realDocumentLine = Document.Find(documentLine.Waybill.Id).Lines[0]; var task = new CertificateTask(certificateSource, realDocumentLine); task.Save(); Assert.That(task.Id, Is.GreaterThan(0)); task.Delete(); Assert.That(task.Id, Is.GreaterThan(0)); Assert.That(task.CertificateSource, Is.Not.Null); Assert.That(task.CatalogProduct, Is.Not.Null); Assert.That(task.SerialNumber, Is.Not.Null.Or.Empty); var deletedTask = CertificateTask.Queryable.FirstOrDefault(t => t.Id == task.Id); Assert.That(deletedTask, Is.Null); Assert.That(task.SerialNumber, Is.Not.Null.Or.Empty); }
private CertificateTask SuccessProcessCertificate(out string supplierCertificatesDir, out string certificateFile) { var certificateSource = CreateRealSourceForSupplier(supplier); var serialNumber = Path.GetRandomFileName(); var catalog = TestCatalogProduct.Queryable.First(); var product = TestProduct.Queryable.First(p => p.CatalogProduct == catalog); supplierCertificatesDir = Path.Combine(Settings.Default.FTPOptBoxPath, supplier.Id.ToString().PadLeft(3, '0'), "Certificats"); if (Directory.Exists(supplierCertificatesDir)) { Directory.Delete(supplierCertificatesDir, true); } Directory.CreateDirectory(supplierCertificatesDir); certificateFile = Path.GetRandomFileName(); File.WriteAllText(Path.Combine(supplierCertificatesDir, certificateFile), "Это тестовый сертификат", Encoding.GetEncoding(1251)); var documentLine = CreateBodyLine(serialNumber, product); var realDocumentLine = Document.Find(documentLine.Waybill.Id).Lines[0]; var task = new CertificateTask(certificateSource, realDocumentLine); task.Save(); documentLine.CertificateFilename = Path.GetFileNameWithoutExtension(certificateFile); documentLine.Save(); Assert.That(task.Id, Is.GreaterThan(0)); ProcessTestHandler(); return(task); }
private void SaveAndProcess(CertificateTask task, TestCertificateSourceHandler handler) { if (!session.Transaction.IsActive) { session.BeginTransaction(); } task.Save(); session.Transaction.Commit(); session.Flush(); handler.ProcessData(); }
private CertificateTask CreateTask() { TestCertifcateSource.GetFilesFromSourceAction = null; TestCertifcateSource.CertificateExistsAction = null; CertificateSource.Assembly = typeof(TestCertifcateSource).Assembly; var source = CreateSourceForSupplier(supplier, "TestCertifcateSource"); var line = CreateBodyLine(); var task = new CertificateTask(); task.CertificateSource = source; task.CatalogProduct = session.Load <Catalog>(line.CatalogProduct.CatalogProduct.Id); task.SerialNumber = DocumentLine.EmptySerialNumber; task.DocumentLine = session.Load <DocumentLine>(line.Id); task.Save(); return(task); }
public void SimpleCreateTask() { var certificateSource = CreateSourceForSupplier(); var documentLine = CreateBodyLine(); var catalog = TestCatalogProduct.Queryable.First(); var serialNumber = Path.GetRandomFileName(); var realDocumentLine = Document.Find(documentLine.Waybill.Id).Lines[0]; var task = new CertificateTask(); using (new TransactionScope()) { task.CertificateSource = certificateSource; task.CatalogProduct = Catalog.Find(catalog.Id); task.SerialNumber = serialNumber; task.DocumentLine = realDocumentLine; task.Save(); } Assert.That(task.Id, Is.GreaterThan(0)); }
public void CreateCertificateOnEmptySerialNumber() { Clean(); DeleteCertificatedWithEmptySerialNumber(); var catalog = TestCatalogProduct.Queryable.First(); var certificateSource = CreateRealSourceForSupplier(supplier); var product = TestProduct.Queryable.First(p => p.CatalogProduct == catalog); var supplierCertificatesDir = Path.Combine(Settings.Default.FTPOptBoxPath, supplier.Id.ToString().PadLeft(3, '0'), "Certificats"); if (Directory.Exists(supplierCertificatesDir)) { Directory.Delete(supplierCertificatesDir, true); } Directory.CreateDirectory(supplierCertificatesDir); var destinationDir = Settings.Default.CertificatePath; var documentLine = CreateBodyLine(String.Empty, product); var certificateFile = Path.GetRandomFileName(); File.WriteAllText(Path.Combine(supplierCertificatesDir, certificateFile), "Это тестовый сертификат", Encoding.GetEncoding(1251)); var realDocumentLine = Document.Find(documentLine.Waybill.Id).Lines[0]; var task = new CertificateTask(); task.CertificateSource = certificateSource; task.CatalogProduct = Catalog.Find(catalog.Id); task.SerialNumber = DocumentLine.EmptySerialNumber; task.DocumentLine = realDocumentLine; task.Save(); documentLine.CertificateFilename = Path.GetFileNameWithoutExtension(certificateFile); documentLine.Save(); Assert.That(task.Id, Is.GreaterThan(0)); ProcessTestHandler(); var processedTask = CertificateTask.Queryable.FirstOrDefault(t => t.Id == task.Id); Assert.That(processedTask, Is.Null, "Не была удалена задача на создание сертификата после обработки"); var certificate = TestCertificate.Queryable.FirstOrDefault(c => c.CatalogProduct.Id == catalog.Id && c.SerialNumber == DocumentLine.EmptySerialNumber); Assert.That(certificate, Is.Not.Null, "Не был создан сертификат"); Assert.That(certificate.CertificateFiles.Count, Is.EqualTo(1), "Не были добавлены файлы сертификата"); Assert.That(certificate.CertificateFiles[0].OriginFilename, Is.EqualTo(certificateFile), "Не совпадает оригинальное имя файла сертификата"); Assert.That(certificate.CertificateFiles[0].CertificateSource.Id, Is.EqualTo(certificateSource.Id), "Не совпадает источник файла сертификата"); Assert.That(certificate.CertificateFiles[0].ExternalFileId, Is.Not.Null.Or.Empty, "Не установлено поле ExternalFileId"); Assert.That(certificate.CertificateFiles[0].ExternalFileId, Is.EqualTo(certificate.CertificateFiles[0].OriginFilename), "Поле ExternalFileId не совпадает с OriginFilename (только для AptekaHoldingVoronezhCertificateSource)"); var file = Path.Combine(destinationDir, certificate.CertificateFiles[0].Id + ".tif"); Assert.That(File.Exists(file), "Не скопирован файл {0} сертификата", file); Assert.That(File.Exists(Path.Combine(supplierCertificatesDir, certificateFile)), "Удален файл сертификата из исходной папки"); documentLine.Refresh(); Assert.That(documentLine.Certificate.Id, Is.EqualTo(certificate.Id), "В позиции документа не установлена ссылка на сертификат"); }
public void SendErrorsOnProcessTask() { Clean(); var certificateSource = CreateSourceForSupplier(supplier, typeof(TestErrorSource).Name); var serialNumber = Path.GetRandomFileName(); var catalog = TestCatalogProduct.Queryable.First(); var product = TestProduct.Queryable.First(p => p.CatalogProduct == catalog); var documentLine = CreateBodyLine(serialNumber, product); var realDocumentLine = Document.Find(documentLine.Waybill.Id).Lines[0]; var task = new CertificateTask(certificateSource, realDocumentLine); task.Save(); Assert.That(task.Id, Is.GreaterThan(0)); try { session.Transaction.Commit(); ((Logger)LogManager.GetLogger(typeof(TestCertificateSourceHandler)).Logger).Level = Level.Warn; var memoryAppender = new MemoryAppender(); memoryAppender.ActivateOptions(); memoryAppender.AddFilter(new LoggerMatchFilter { AcceptOnMatch = true, LoggerToMatch = "PriceProcessor", Next = new DenyAllFilter() }); BasicConfigurator.Configure(memoryAppender); var handler = new TestCertificateSourceHandler(); handler.OnSource = (c) => { c.CertificateSource.CertificateSourceParser = new TestErrorSource(); return(c.CertificateSource); }; //Обрабатываем задачу первый раз handler.ProcessData(); CheckErrors(task, memoryAppender, handler, 1); //Создаем новую задачу с теми же параметрами и обрабатываем задачу второй раз task = new CertificateTask(certificateSource, realDocumentLine); SaveAndProcess(task, handler); CheckErrors(task, memoryAppender, handler, 2); //Создаем новую задачу с теми же параметрами и обрабатываем задачу третий раз task = new CertificateTask(certificateSource, realDocumentLine); SaveAndProcess(task, handler); CheckErrors(task, memoryAppender, handler, 3); var lastEvents = memoryAppender.GetEvents(); var errors = lastEvents.Where(item => item.Level >= Level.Warn).ToList(); Assert.That(errors.Count, Is.EqualTo(3)); //Последнее сообщение должно быть Error Assert.That(errors[2].Level, Is.EqualTo(Level.Error)); //Успешно обработываем сертификат и список ошибок должен очистится handler.OnSource = (c) => { c.CertificateSource.CertificateSourceParser = new TestSuccessSource(); return(c.CertificateSource); }; certificateSource.SourceClassName = typeof(TestSuccessSource).Name; certificateSource.Save(); //Создаем новую задачу с теми же параметрами и обрабатываем задачу третий раз task = new CertificateTask(certificateSource, realDocumentLine); SaveAndProcess(task, handler); Assert.That(errors.Count, Is.EqualTo(3)); Assert.That(handler.Errors.Count, Is.EqualTo(0), handler.Errors.Implode()); //Задача должна быть удалена из базы данных var deletedSuccessTask = CertificateTask.Queryable.FirstOrDefault(t => t.Id == task.Id); Assert.That(deletedSuccessTask, Is.Null); } finally { LogManager.ResetConfiguration(); } }
public void UseExistsCertificateFiles() { Clean(); var certificateSource = CreateRealSourceForSupplier(supplier); var destinationDir = Settings.Default.CertificatePath; //Удаляем файлы, которые имеют Id = 0 var zeroFiles = Directory.GetFiles(destinationDir, "0.*"); foreach (var zeroFile in zeroFiles) { File.Delete(zeroFile); } //Создаем существующий файл сертификата var existsSerialNumber = Path.GetRandomFileName(); var existsFileId = Path.GetRandomFileName(); var existsCertificateCatalog = TestCatalogProduct.Queryable.First(); var existsCertificate = new Certificate() { CatalogProduct = Catalog.Find(existsCertificateCatalog.Id), SerialNumber = existsSerialNumber }; var existsCertificateFile = existsCertificate.NewFile(); existsCertificateFile.CertificateSource = certificateSource; existsCertificateFile.OriginFilename = existsFileId; existsCertificateFile.ExternalFileId = existsFileId; existsCertificateFile.Extension = ".tif"; existsCertificate.Save(); File.WriteAllText(Path.Combine(destinationDir, existsCertificateFile.Id + ".tif"), "Это тестовый сертификат", Encoding.GetEncoding(1251)); var serialNumber = Path.GetRandomFileName(); var catalog = TestCatalogProduct.Queryable.First(catalogProduct => catalogProduct.Id != existsCertificateCatalog.Id); var product = TestProduct.Queryable.First(p => p.CatalogProduct == catalog); var supplierCertificatesDir = Path.Combine(Settings.Default.FTPOptBoxPath, supplier.Id.ToString().PadLeft(3, '0'), "Certificats"); if (Directory.Exists(supplierCertificatesDir)) { Directory.Delete(supplierCertificatesDir, true); } Directory.CreateDirectory(supplierCertificatesDir); var documentLine = CreateBodyLine(serialNumber, product); //Файл сертификата в новой разбираемой позиции должен быть таким же var certificateFile = existsFileId; File.WriteAllText(Path.Combine(supplierCertificatesDir, certificateFile), "Это тестовый сертификат", Encoding.GetEncoding(1251)); var realDocumentLine = Document.Find(documentLine.Waybill.Id).Lines[0]; var task = new CertificateTask(certificateSource, realDocumentLine); task.Save(); documentLine.CertificateFilename = Path.GetFileNameWithoutExtension(certificateFile); documentLine.Save(); Assert.That(task.Id, Is.GreaterThan(0)); ProcessTestHandler(); var processedTask = CertificateTask.Queryable.FirstOrDefault(t => t.Id == task.Id); Assert.That(processedTask, Is.Null, "Не была удалена задача на создание сертификата после обработки"); var certificate = TestCertificate.Queryable.FirstOrDefault(c => c.CatalogProduct.Id == catalog.Id && c.SerialNumber == serialNumber); Assert.That(certificate, Is.Not.Null, "Не был создан сертификат"); Assert.That(certificate.CertificateFiles.Count, Is.EqualTo(1), "Не были добавлены файлы сертификата"); Assert.That(certificate.CertificateFiles[0].OriginFilename, Is.EqualTo(certificateFile), "Не совпадает оригинальное имя файла сертификата"); Assert.That(certificate.CertificateFiles[0].CertificateSource.Id, Is.EqualTo(certificateSource.Id), "Не совпадает источник файла сертификата"); Assert.That(certificate.CertificateFiles[0].ExternalFileId, Is.Not.Null.Or.Empty, "Не установлено поле ExternalFileId"); Assert.That(certificate.CertificateFiles[0].ExternalFileId, Is.EqualTo(certificate.CertificateFiles[0].OriginFilename), "Поле ExternalFileId не совпадает с OriginFilename (только для AptekaHoldingVoronezhCertificateSource)"); Assert.That(File.Exists(Path.Combine(destinationDir, certificate.CertificateFiles[0].Id + ".tif")), "Не скопирован файл сертификата"); Assert.That(File.Exists(Path.Combine(supplierCertificatesDir, certificateFile)), "Удален файл сертификата из исходной папки"); documentLine.Refresh(); Assert.That(documentLine.Certificate.Id, Is.EqualTo(certificate.Id), "В позиции документа не установлена ссылка на сертификат"); Assert.That(certificate.CertificateFiles[0].Id, Is.EqualTo(existsCertificateFile.Id), "Не совпадает Id на существующий файл сертификата"); Assert.That(certificate.CertificateFiles[0].Certificates.Count, Is.EqualTo(2), "Неожидаемое кол-во связанных сертификатов"); var filesByExternalFileId = CertificateFile.Queryable.Where(f => f.ExternalFileId == existsFileId).ToList(); Assert.That(filesByExternalFileId.Count, Is.EqualTo(1), "Имеются повторения файлов сертификатов по ExternalFileId: {0}", existsFileId); var zeroFilesAfteParse = Directory.GetFiles(destinationDir, "0.*"); Assert.That(zeroFilesAfteParse.Length, Is.EqualTo(0), "Имеются файлы с Id = 0: {0}", zeroFilesAfteParse.Implode()); }
public void CreateTaskWithUniqueKeyAndCorrect() { var certificateSource = CreateSourceForSupplier(); var documentLine = CreateBodyLine(); var catalog = TestCatalogProduct.Queryable.First(); var serialNumber = "Мама мыла раму"; var anotherSerialNumber = "Папа мыла раму"; var realDocumentLine = Document.Find(documentLine.Waybill.Id).Lines[0]; using (new TransactionScope()) { var certificateTasks = CertificateTask.Queryable.Where(c => c.SerialNumber.Equals(serialNumber)).ToList(); certificateTasks.ForEach(c => c.Delete()); } using (new TransactionScope()) { var certificateTasks = CertificateTask.Queryable.Where(c => c.SerialNumber.Equals(anotherSerialNumber)).ToList(); certificateTasks.ForEach(c => c.Delete()); } var task = new CertificateTask(); using (new TransactionScope()) { task.CertificateSource = certificateSource; task.CatalogProduct = Catalog.Find(catalog.Id); task.SerialNumber = serialNumber; task.DocumentLine = realDocumentLine; task.Save(); } Assert.That(task.Id, Is.GreaterThan(0)); var doubleDocumentLine = CreateBodyLine(); var doubleRealDocumentLine = Document.Find(documentLine.Waybill.Id).Lines[0]; var doubleTask = new CertificateTask { CertificateSource = certificateSource, CatalogProduct = task.CatalogProduct, SerialNumber = "мАМА мыла рАМУ", DocumentLine = doubleRealDocumentLine }; using (var transaction = new TransactionScope()) { //Если в транзакции возникает ошибка DuplicateEntry, то транзакция откатывается //поэтому перед сохранением надо проверять, что такое задание не существует var existsTask = CertificateTask.Exists( DetachedCriteria.For <CertificateTask>() .Add(Restrictions.Eq("CertificateSource.Id", task.CertificateSource.Id)) .Add(Restrictions.Eq("CatalogProduct.Id", task.CatalogProduct.Id)) .Add(Restrictions.Eq("SerialNumber", doubleTask.SerialNumber))); if (existsTask) { doubleTask.SerialNumber = anotherSerialNumber; } doubleTask.Save(); transaction.VoteCommit(); } Assert.That(doubleTask.Id, Is.GreaterThan(0)); Assert.That(doubleTask.Id, Is.Not.EqualTo(task.Id)); }