private void ProcessTestHandler() { ProcessCertificatesWithLog(() => { var handler = new TestCertificateSourceHandler(); handler.ProcessData(); }); }
private void SaveAndProcess(CertificateTask task, TestCertificateSourceHandler handler) { if (!session.Transaction.IsActive) { session.BeginTransaction(); } task.Save(); session.Transaction.Commit(); session.Flush(); handler.ProcessData(); }
private void CheckErrors(CertificateTask task, MemoryAppender memoryAppender, TestCertificateSourceHandler handler, uint errorCount, bool idEquals = false) { var firstEvents = memoryAppender.GetEvents(); var firstErrors = firstEvents.Where(item => item.Level >= Level.Warn); Assert.That(firstErrors.Count(), Is.EqualTo(errorCount), firstErrors.Implode(e => e.MessageObject)); //кол-во ошибок должно быть равно 1 Assert.That(handler.Errors.Count, Is.EqualTo(1)); var info = handler.Errors[task.GetErrorId()]; Assert.That(info.ErrorCount, Is.EqualTo(errorCount)); Assert.That(info.Exception.Message, Is.StringStarting("Возникла ошибка при обработке задачи: ")); if (idEquals) { Assert.That(info.Task.Id, Is.EqualTo(task.Id)); } Assert.That(info.Task.CertificateSource.Id, Is.EqualTo(task.CertificateSource.Id)); Assert.That(info.Task.CatalogProduct.Id, Is.EqualTo(task.CatalogProduct.Id)); Assert.That(info.Task.SerialNumber, Is.EqualTo(task.SerialNumber)); //Задача должна быть удалена из базы данных var deletedTask = CertificateTask.Queryable.FirstOrDefault(t => t.Id == task.Id); Assert.That(deletedTask, Is.Null); }
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(); } }