Пример #1
0
        public void Ignore_document_for_wrong_address()
        {
            var begin    = DateTime.Now;
            var supplier = TestSupplier.CreateNaked(session);
            var from     = String.Format("{0}@test.test", supplier.Id);

            PrepareSupplier(supplier, from);

            var message = ImapHelper.BuildMessageWithAttachments(
                String.Format("{0}@waybills.analit.net", "1"),
                from,
                new[] { @"..\..\Data\Waybills\bi055540.DBF" });
            var bytes = message.ToByteData();

            ImapHelper.StoreMessage(
                Settings.Default.TestIMAPUser,
                Settings.Default.TestIMAPPass,
                Settings.Default.IMAPSourceFolder, bytes);
            this.supplier = supplier;

            Process();
            var docs = session.Query <TestDocumentLog>().Where(d => d.LogTime > begin).ToList();

            Assert.That(docs.Count, Is.EqualTo(0));
        }
Пример #2
0
        public void ProcessReaderException()
        {
            ImapHelper.ClearImapFolder(Settings.Default.TestIMAPUser, Settings.Default.TestIMAPPass, Settings.Default.IMAPSourceFolder);
            ImapHelper.StoreMessage(@"..\..\Data\Unparse.eml");

            var imapReader = MockRepository.GenerateStub <IIMAPReader>();

            imapReader.Stub(s => s.IMAPAuth(null))
            .IgnoreArguments()
            .Do(new Action <IMAP_Client>(client => client.Authenticate(Settings.Default.TestIMAPUser, Settings.Default.TestIMAPPass)));

            var exception = new Exception("ошибка при разборе письма в reader'е");

            imapReader.Stub(s => s.ProcessMime(null))
            .IgnoreArguments()
            .Do(new Action <Mime>(mime => { throw exception; }));
            var handler = new IMAPHandler(imapReader);

            handler.ProcessIMAPFolder();

            imapReader.AssertWasCalled(r => r.IMAPAuth(Arg <IMAP_Client> .Is.Anything));
            imapReader.AssertWasCalled(r => r.PingReader());
            imapReader.AssertWasCalled(r => r.ProcessMime(Arg <Mime> .Is.Anything));
            imapReader.AssertWasNotCalled(r => r.ProcessBrokenMessage(Arg <IMAP_FetchItem> .Is.Anything, Arg <IMAP_FetchItem[]> .Is.Anything, Arg <Exception> .Is.Equal(exception)));

            var existsMessages = ImapHelper.CheckImapFolder(Settings.Default.TestIMAPUser, Settings.Default.TestIMAPPass, Settings.Default.IMAPSourceFolder);

            Assert.That(existsMessages.Count, Is.EqualTo(1), "Письмо было удалено сразу же после возникнования ошибок");
        }
Пример #3
0
        public void Process_message_if_from_contains_more_than_one_address()
        {
            client   = TestClient.CreateNaked(session);
            address  = client.Addresses[0];
            supplier = TestSupplier.CreateNaked(session);

            supplier.WaybillSource.EMailFrom  = String.Format("edata{0}@msk.katren.ru", supplier.Id);
            supplier.WaybillSource.SourceType = TestWaybillSourceType.Email;
            session.Save(supplier);

            FileHelper.DeleteDir(Settings.Default.DocumentPath);

            ImapHelper.ClearImapFolder();
            var mime = PatchTo(@"..\..\Data\Unparse.eml",
                               String.Format("{0}@waybills.analit.net", address.Id),
                               String.Format("edata{0}@msk.katren.ru,[email protected]", supplier.Id));

            ImapHelper.StoreMessage(mime.ToByteData());

            Process();

            var files = GetFileForAddress(DocType.Waybill);

            Assert.That(files.Length, Is.EqualTo(1), "не обработали документ");
        }
Пример #4
0
        public static StoreArgs ParseStoreArgs(string args)
        {
            string[] parts = args.Split(new char[] { ' ' }, 3);
            if (parts.Length != 3)
            {
                throw new Exception("Error in arguments.");
            }

            var result = new StoreArgs
            {
                Ranges = ImapHelper.GetSequenceRange(parts[0])
            };

            switch (parts[1].ToUpperInvariant())
            {
            case "FLAGS":
                result.DataItem = "FLAGS";
                result.Silent   = false;
                break;

            case "FLAGS.SILENT":
                result.DataItem = "FLAGS";
                result.Silent   = true;
                break;

            case "+FLAGS":
                result.DataItem = "+FLAGS";
                result.Silent   = false;
                break;

            case "+FLAGS.SILENT":
                result.DataItem = "+FLAGS";
                result.Silent   = true;
                break;

            case "-FLAGS":
                result.DataItem = "-FLAGS";
                result.Silent   = false;
                break;

            case "-FLAGS.SILENT":
                result.DataItem = "-FLAGS";
                result.Silent   = false;
                break;

            default:
                throw new Exception("Error in arguments.");
            }

            if (!(parts[2].StartsWith("(") && parts[2].EndsWith(")")))
            {
                throw new Exception("Error in arguments.");
            }

            var spl = parts[2].Substring(1, parts[2].Length - 2).Split(' ');

            result.Flags = new HashSet <string>(spl.Select(o => o.TrimStart('\\'))).ToArray();

            return(result);
        }
        public void NotFoundError()
        {
            var supplier = TestSupplier.CreateNaked(session);
            var from     = String.Format("{0}@supplier.test", supplier.Id);

            PrepareSupplier(supplier, from);

            var message = ImapHelper.BuildMessageWithAttachments(
                "test NotFound",
                "body NotFound",
                new string[] { "*****@*****.**" },
                new[] { from },
                null);

            var handler = new DocSourceHandlerForTesting(Settings.Default.TestIMAPUser, Settings.Default.TestIMAPPass);

            try {
                handler.CheckMime(message);
                Assert.Fail("Должно было возникнуть исключение MiniMailOnEmptyRecipientsException");
            }
            catch (MiniMailOnEmptyRecipientsException exception) {
                Assert.That(exception.Template, Is.EqualTo(ResponseTemplate.MiniMailOnEmptyRecipients));
                Assert.That(exception.CauseList, Is.EqualTo("[email protected] : " + RecipientStatus.NotFound.GetDescription()));
                SendErrorToProvider(handler, exception, message);
            }
        }
Пример #6
0
        private object ToRightDataType(string value, SearchDataType type)
        {
            if (string.IsNullOrEmpty(value))
            {
                return(null);
            }

            if (type == SearchDataType.Text)
            {
                return(value);
            }
            else if (type == SearchDataType.Number)
            {
                int intvalue = 0;

                if (int.TryParse(value, out intvalue))
                {
                    return(intvalue);
                }
                else
                {
                    return(null);
                }
            }
            else if (type == SearchDataType.Date)
            {
                return(ImapHelper.ParseRfc2822Time(value));
            }
            return(null);
        }
        public void CheckGetSHA256Hash()
        {
            //пустое письмо
            var mime = new Mime();
            var hash = mime.GetSHA256Hash();

            Assert.IsEmpty(hash);

            //установлена тема письма
            mime.MainEntity.Subject = "test subject";
            hash = mime.GetSHA256Hash();
            Assert.IsNotEmpty(hash);

            //установлено тело письма как текст
            mime = ImapHelper.BuildMessageWithAttachments("", "test body", new string[] { "*****@*****.**" }, new string[] { "*****@*****.**" }, null);
            hash = mime.GetSHA256Hash();
            Assert.IsNotEmpty(hash);

            //установлено тело письма как html
            mime = ImapHelper.BuildMessageWithAttachments("", "test body", new string[] { "*****@*****.**" }, new string[] { "*****@*****.**" }, null);
            var hmtlEntity = mime.MainEntity.ChildEntities[mime.MainEntity.ChildEntities.Count - 1];

            hmtlEntity.DataText    = null;
            hmtlEntity.ContentType = MediaType_enum.Text_html;
            hmtlEntity.DataText    = "test body html";
            hash = mime.GetSHA256Hash();
            Assert.IsNotEmpty(hash);

            //установлено все как строки с пробелами
            mime = ImapHelper.BuildMessageWithAttachments("", "test body", new string[] { "*****@*****.**" }, new string[] { "*****@*****.**" }, null);
            mime.MainEntity.Subject = "    ";
            mime.MainEntity.ChildEntities[mime.MainEntity.ChildEntities.Count - 1].DataText = "    ";
            hash = mime.GetSHA256Hash();
            Assert.IsEmpty(hash);
        }
        private void SetUp(IList <TestUser> users, TestRegion region, string subject, string body, IList <string> fileNames)
        {
            var info     = new DocSourceHandlerTestInfo();
            var supplier = TestSupplier.CreateNaked(session);

            var from = String.Format("{0}@supplier.test", supplier.Id);

            PrepareSupplier(supplier, from);
            info.Supplier = supplier;

            var toList = users.Select(u => "{0}@docs.analit.net".Format(u.AvaliableAddresses[0].Id)).ToList();

            if (region != null)
            {
                toList.Add(region.ShortAliase + "@docs.analit.net");
            }

            var message = ImapHelper.BuildMessageWithAttachments(
                subject,
                body,
                toList.ToArray(),
                new[] { from },
                fileNames != null ? fileNames.ToArray() : null);

            info.Mime = message;

            info.Region = region;
            info.Users  = users;

            _info = info;
        }
        public void SendWithExclusion()
        {
            var client = TestClient.CreateNaked(session);
            var user   = client.Users[0];

            var inforoomRegion = TestRegion.Find(TestRegion.Inforoom);

            SetUp(
                new List <TestUser> {
                user
            },
                inforoomRegion,
                "Это письмо пользователю",
                "Это текст письма пользователю",
                null);

            var handler = new DocSourceHandlerForTesting(Settings.Default.TestIMAPUser, Settings.Default.TestIMAPPass);

            handler.TestProcessMime(_info.Mime);
            var existsMessages = ImapHelper.CheckImapFolder(Settings.Default.TestIMAPUser, Settings.Default.TestIMAPPass, ImapHelper.INBOXFolder);

            Assert.That(existsMessages.Count, Is.GreaterThanOrEqualTo(1), "Не найдены письма в IMAP-папке");
            var responseCount = existsMessages
                                .Count(m => m.Envelope?.Subject?.Equals(_responseSubject, StringComparison.CurrentCultureIgnoreCase) == true);

            Assert.That(responseCount, Is.EqualTo(1), "Не найдено письмо с загловком '{0}'", _responseSubject);

            var mails = TestMailSendLog.Queryable.Where(l => l.User.Id == user.Id).ToList();

            Assert.That(mails.Count, Is.EqualTo(1));

            var mailLog = mails[0];

            Assert.That(mailLog.Mail.Supplier.Id, Is.EqualTo(_info.Supplier.Id));
        }
Пример #10
0
        public void SetUp(IList <string> fileNames)
        {
            client   = TestClient.CreateNaked(session);
            supplier = TestSupplier.CreateNaked(session);

            var from = String.Format("{0}@test.test", client.Id);

            PrepareSupplier(supplier, from);

            byte[] bytes;
            if (IsEmlFile)
            {
                bytes = File.ReadAllBytes(fileNames[0]);
            }
            else
            {
                var message = ImapHelper.BuildMessageWithAttachments(
                    String.Format("{0}@waybills.analit.net", client.Addresses[0].Id),
                    from, fileNames.ToArray());
                bytes = message.ToByteData();
            }

            ImapHelper.StoreMessage(
                Settings.Default.TestIMAPUser,
                Settings.Default.TestIMAPPass,
                Settings.Default.IMAPSourceFolder, bytes);
        }
        public void ErrorOnEmptyLetter()
        {
            var client = TestClient.CreateNaked(session);
            var user   = client.Users[0];

            var supplier = TestSupplier.CreateNaked(session);
            var from     = $"{supplier.Id}@supplier.test";

            PrepareSupplier(supplier, from);

            var message = ImapHelper.BuildMessageWithAttachments(
                "  ",
                "   ",
                new string[] { "{0}@docs.analit.net".Format(user.AvaliableAddresses[0].Id) },
                new[] { from },
                null);

            var handler = new DocSourceHandlerForTesting(Settings.Default.TestIMAPUser, Settings.Default.TestIMAPPass);

            try {
                handler.CheckMime(message);
                Assert.Fail("Должно было возникнуть исключение MiniMailOnEmptyLetterException");
            }
            catch (MiniMailOnEmptyLetterException exception) {
                Assert.That(exception.Template, Is.EqualTo(ResponseTemplate.MiniMailOnEmptyLetter));
                SendErrorToProvider(handler, exception, message);
            }
        }
        public void ErrorOnAllowedExtensions()
        {
            var client = TestClient.CreateNaked(session);
            var user   = client.Users[0];

            var supplier = TestSupplier.CreateNaked(session);
            var from     = String.Format("{0}@supplier.test", supplier.Id);

            PrepareSupplier(supplier, from);

            var message = ImapHelper.BuildMessageWithAttachments(
                "test AllowedExtensions",
                "body AllowedExtensions",
                new string[] { "{0}@docs.analit.net".Format(user.AvaliableAddresses[0].Id) },
                new[] { from },
                new string[] { @"..\..\Data\Waybills\70983_906384.zip" });

            var handler = new DocSourceHandlerForTesting(Settings.Default.TestIMAPUser, Settings.Default.TestIMAPPass);

            try {
                handler.CheckMime(message);
                Assert.Fail("Должно было возникнуть исключение MiniMailOnAllowedExtensionsException");
            }
            catch (MiniMailOnAllowedExtensionsException exception) {
                Assert.That(exception.Template, Is.EqualTo(ResponseTemplate.MiniMailOnAllowedExtensions));
                Assert.That(exception.ErrorExtention, Is.EqualTo(".zip").IgnoreCase);
                Assert.That(exception.AllowedExtensions, Is.EqualTo("doc, xls, gif, tiff, tif, jpg, pdf, txt").IgnoreCase);
                SendErrorToProvider(handler, exception, message);
            }
        }
Пример #13
0
        public void DeleteDirectories()
        {
            TestHelper.RecreateDirectories();
            ImapHelper.ClearImapFolder(Settings.Default.TestIMAPUser, Settings.Default.TestIMAPPass, Settings.Default.IMAPSourceFolder);

            filter = new EventFilter <WaybillService>();
        }
 public void DeleteDirectories()
 {
     SetDefaultValues();
     _info = null;
     TestHelper.RecreateDirectories();
     ImapHelper.ClearImapFolder(Settings.Default.TestIMAPUser, Settings.Default.TestIMAPPass, Settings.Default.IMAPSourceFolder);
     ImapHelper.ClearImapFolder(Settings.Default.TestIMAPUser, Settings.Default.TestIMAPPass, ImapHelper.INBOXFolder, _responseSubject);
 }
Пример #15
0
        public static List <ImapResponse> ExecuteByUid(MailDb mailDb, SelectFolder folder, string args)
        {
            var storeArgs = ParseStoreArgs(args);

            var messages = ImapHelper.GetMessagesByUid(mailDb, folder, storeArgs.Ranges);

            return(ExecuteNew(mailDb, messages, storeArgs.DataItem, storeArgs.Flags, storeArgs.Silent));
        }
Пример #16
0
        public static List <ImapResponse> ExecuteByUid(MailDb mailDb, SelectFolder folder, string args)
        {
            var copyArgs = ParseArgs(args);

            var messages = ImapHelper.GetMessagesByUid(mailDb, folder, copyArgs.Ranges);

            return(Execute(mailDb, messages, copyArgs.FolderName));
        }
        public void Setup()
        {
            client  = TestClient.Create(2, 2);
            address = client.Addresses[0];

            source.SourceType = PriceSourceType.Email;
            source.Save();

            ImapHelper.ClearImapFolder(Settings.Default.TestIMAPUser, Settings.Default.TestIMAPPass, Settings.Default.IMAPSourceFolder);
        }
        public void MessageClientCheckWithExtensionExceptions()
        {
            SetSupplierAndClientConnection();
            //проверка на отсутствие документов до запуска обработчика
            var currentDocuments = session.Query <Document>().Where(s => s.Invoice.RecipientId == recipientId);

            Assert.IsTrue(!currentDocuments.Any());

            //новая накладная
            var document = GetDocument(recipientId);
            //прикрепление накладной к письму
            var msData = GetMemoryStreamForDocument(document);

            var message = BuildMessageWithAttachments($"to_{supplier.Id}@sup.com",
                                                      $"from_{supplier.Id}@sup.com", "text.sst", msData.ToArray());


            if (!session.Transaction.IsActive)
            {
                session.BeginTransaction();
            }
            session.Transaction.Commit();
            session.BeginTransaction();

            var waybillExcludeFileToRemove = session.Query <WaybillExcludeFile>().ToList();

            session.DeleteEach(waybillExcludeFileToRemove);

            session.Connection.Query(
                $"INSERT INTO usersettings.WaybillExcludeFile (Supplier,Mask)  Values({supplier.Id} , '{"*.sst"}')")
            .FirstOrDefault();

            ImapHelper.StoreMessage(
                Settings.Default.TestIMAPUser,
                Settings.Default.TestIMAPPass,
                Settings.Default.IMAPSourceFolder, message.ToByteData());

            //запуск обработчика
            session.Transaction.Commit();

#if DEBUG
            handler.SetSessionForTest(session);
#endif
            handler.ProcessData();
            session.Flush();
            //проверка на наличие документов после запуска обработчика
            currentDocuments = session.Query <Document>().Where(s => s.Invoice.RecipientId == recipientId);
            //документ отсутствует
            var currentDocument = currentDocuments.FirstOrDefault();
            Assert.IsTrue(currentDocument == null);


            var logs = session.Query <DocumentReceiveLog>().Where(s => s.ClientCode == client.Id && s.Supplier.Id == supplier.Id).ToList();
            Assert.IsTrue(logs.All(s => s.Comment.IndexOf($"Разбор документа не производился, применена маска исключения '{"*.sst"}'.") != -1));
        }
        private void Process()
        {
            Assert.That(_info, Is.Not.Null, "Перед обработкой должен быть вызван метод SetUp");
            Assert.That(_info.Mime, Is.Not.Null, "Перед обработкой должен быть вызван метод SetUp");
            var handler = new DocSourceHandlerForTesting(Settings.Default.TestIMAPUser, Settings.Default.TestIMAPPass);

            handler.TestProcessMime(_info.Mime);
            var existsMessages = ImapHelper.CheckImapFolder(Settings.Default.TestIMAPUser, Settings.Default.TestIMAPPass, Settings.Default.IMAPSourceFolder);

            Assert.That(existsMessages.Count, Is.EqualTo(0), "Существуют письма в IMAP-папками с темами: {0}", existsMessages.Select(m => m.Envelope.Subject).Implode());
        }
Пример #20
0
        /// <summary>
        /// FETCH
        /// </summary>
        public static List <ImapResponse> GenerateBySeqId(MailDb mailDb, SelectFolder Folder, string Cmd)
        {
            var cmdReader = new CommandReader(Cmd);
            var set       = cmdReader.SequenceSet;
            var range     = GetSequenceRange(set);

            var AllDataItems = cmdReader.ReadAllDataItems();

            var messages = ImapHelper.GetMessagesBySeqNo(mailDb, Folder, range);

            return(Generate(mailDb, Folder, AllDataItems, messages));
        }
        public void CreateDirectoryPath()
        {
            CreateDownHandlerPath();
            ImapHelper.ClearImapFolder(Settings.Default.TestIMAPUser, Settings.Default.TestIMAPPass,
                                       Settings.Default.IMAPSourceFolder);

            DownHistoryPath = Settings.Default.HistoryPath;
            if (!Directory.Exists(DownHistoryPath))
            {
                Directory.CreateDirectory(DownHistoryPath);
            }
        }
Пример #22
0
        private static (string id, MailboxFlags) CalculateFlagsFromFileName(string fileName)
        {
            fileName = Path.GetFileName(fileName);
            // ReSharper disable once AssignNullToNotNullAttribute
            Match match = s_maildirPattern.Match(fileName);

            if (!match.Success)
            {
                return(fileName, MailboxFlags.None);
            }

            return(match.Groups[1].Value, ImapHelper.GetFlagsFromMailDir(match.Groups[2].Value));
        }
Пример #23
0
        public static CopyArgs ParseArgs(string args)
        {
            var parts = args.Split(new char[] { ' ' }, 2);

            if (parts.Length != 2)
            {
                throw new Exception("Error in arguments.");
            }

            return(new CopyArgs
            {
                Ranges = ImapHelper.GetSequenceRange(parts[0]),
                FolderName = IMAP_Utils.DecodeMailbox(TextUtils.UnQuoteString(parts[1]))
            });
        }
        public void Process_price_in_message()
        {
            var file = @"..\..\Data\EmailSourceHandlerTest\Price_ProgTechnologi.eml";

            source.EmailTo   = "*****@*****.**";
            source.EmailFrom = "*****@*****.**";
            source.PriceMask = "*.*";
            source.ExtrMask  = "*.*";
            source.Save();

            ImapHelper.StoreMessage(
                Settings.Default.TestIMAPUser,
                Settings.Default.TestIMAPPass,
                Settings.Default.IMAPSourceFolder, File.ReadAllBytes(file));

            handler.ProcessData();
        }
Пример #25
0
        public void Parse_waybill_if_parsing_enabled()
        {
            client   = TestClient.CreateNaked(session);
            supplier = TestSupplier.CreateNaked(session);

            var beign = DateTime.Now;

            //Удаляем миллисекунды из даты, т.к. они не сохраняются в базе данных
            beign = beign.AddMilliseconds(-beign.Millisecond);

            var email = String.Format("edata{0}@msk.katren.ru", supplier.Id);

            supplier.WaybillSource.EMailFrom  = email;
            supplier.WaybillSource.SourceType = TestWaybillSourceType.Email;
            session.Save(supplier);
            session.Save(client);

            ImapHelper.ClearImapFolder();
            ImapHelper.StoreMessageWithAttachToImapFolder(
                String.Format("{0}@waybills.analit.net", client.Addresses[0].Id),
                email,
                @"..\..\Data\Waybills\8916.dbf");

            Process();

            var files = GetFileForAddress(DocType.Waybill);

            Assert.That(files.Length, Is.EqualTo(1));

            var logs = session.Query <TestDocumentLog>().Where(d => d.Client.Id == client.Id).ToList();

            Assert.That(logs.Count, Is.EqualTo(1));
            var log     = logs.Single();
            var logTime = log.LogTime;

            Assert.That(logTime.Date.AddHours(logTime.Hour).AddMinutes(logTime.Minute).AddSeconds(logTime.Second),
                        Is.GreaterThanOrEqualTo(beign.Date.AddHours(beign.Hour).AddMinutes(beign.Minute).AddSeconds(beign.Second)));
            Assert.That(log.DocumentSize, Is.GreaterThan(0));

            var documents = session.Query <Document>().Where(d => d.Log.Id == log.Id).ToList();

            Assert.That(documents.Count, Is.EqualTo(1));
            Assert.That(documents.Single().Lines.Count, Is.EqualTo(7));
        }
Пример #26
0
        public void Parse_reject()
        {
            client   = TestClient.CreateNaked(session);
            supplier = TestSupplier.CreateNaked(session);
            var price           = supplier.Prices[0];
            var productSynonym  = price.AddProductSynonym("юниэнзим с МПС таб п/о N20", session.Query <TestProduct>().First());
            var producerSynonym = price.AddProducerSynonym("юникем Лабора", session.Query <TestProducer>().First());

            var email = String.Format("edata{0}@msk.katren.ru", supplier.Id);

            supplier.WaybillSource.EMailFrom  = email;
            supplier.WaybillSource.SourceType = TestWaybillSourceType.Email;
            supplier.RejectParser             = "NadezhdaFarm7579RejectParser";
            session.Save(supplier);
            session.Save(client);

            ImapHelper.ClearImapFolder();
            ImapHelper.StoreMessageWithAttachToImapFolder(
                String.Format("{0}@refused.analit.net", client.Addresses[0].Id),
                email,
                @"..\..\Data\Rejects\35115498_Надежда-Фарм Орел_Фарма Орел(protocol).txt");

            Process();

            var files = GetFileForAddress(DocType.Reject);

            Assert.That(files.Length, Is.EqualTo(1));

            var logs = session.Query <TestDocumentLog>().Where(d => d.Client.Id == client.Id).ToList();

            Assert.That(logs.Count, Is.EqualTo(1));
            var log = logs.Single();

            Assert.That(log.DocumentSize, Is.GreaterThan(0));
            Assert.AreEqual(DocumentType.Reject, log.DocumentType);
            var reject = session.Query <RejectHeader>().FirstOrDefault(r => r.Supplier.Id == supplier.Id);

            Assert.AreEqual(1, reject.Lines.Count);
            Assert.AreEqual("NadezhdaFarm7579RejectParser", reject.Parser);
            Assert.AreEqual(productSynonym.Product.Id, reject.Lines[0].ProductEntity.Id);
            Assert.AreEqual(producerSynonym.Producer.Id, reject.Lines[0].ProducerEntity.Id);
        }
        public void EmailPriceInPasswordProtectedArchiveProcessingTest()
        {
            var email = "*****@*****.**";

            source.EmailFrom       = email;
            source.EmailTo         = email;
            source.PriceMask       = "1.zip";
            source.ExtrMask        = "*.txt";
            source.ArchivePassword = "******";
            source.Save();

            // Кладем в IMAP папку сообщение с вложениями
            ImapHelper.StoreMessageWithAttachToImapFolder(Settings.Default.TestIMAPUser,
                                                          Settings.Default.TestIMAPPass, Settings.Default.IMAPSourceFolder,
                                                          email, email, Path.Combine(_dataDir, "1.zip"));

            // Запускаем обработчик
            Process();

            Assert.IsTrue(PriceItemList.list.Any(l => l.PriceItemId == priceItem.Id), "Ошибка обработки файла. Файл не поставлен в очередь на формализацию");
        }
Пример #28
0
        public void MiniMailOnUnknownProvider()
        {
            var files = new List <string> {
                @"..\..\Data\Waybills\bi055540.DBF",
            };

            //SetUp без регистрации тестовой почты --begin--
            client   = TestClient.CreateNaked(session);
            supplier = TestSupplier.CreateNaked(session);

            var from = String.Format("{0}@test.test", client.Id);

            session.Save(supplier);

            byte[] bytes;
            if (IsEmlFile)
            {
                bytes = File.ReadAllBytes(files[0]);
            }
            else
            {
                var message = ImapHelper.BuildMessageWithAttachments(
                    String.Format("{0}@waybills.analit.net", client.Addresses[0].Id),
                    from, files.ToArray());
                bytes = message.ToByteData();
            }

            ImapHelper.StoreMessage(
                Settings.Default.TestIMAPUser,
                Settings.Default.TestIMAPPass,
                Settings.Default.IMAPSourceFolder, bytes);
            //--EndSetUp--

            Process();

            var logs = session.Query <RejectedEmail>().Where(log =>
                                                             log.From == from);

            Assert.That(logs.Count(), Is.Not.Null);
        }
        public void Resend_eml_price()
        {
            var file = "price1.zip";

            source.SourceType = PriceSourceType.Email;
            source.EmailFrom  = "*****@*****.**";
            source.EmailTo    = "*****@*****.**";
            source.PricePath  = file;
            source.ExtrMask   = "price.txt";
            source.Save();

            PriceDownloadLog downloadLog;

            using (var scope = new TransactionScope(OnDispose.Rollback)) {
                downloadLog = new PriceDownloadLog {
                    Addition     = String.Empty,
                    ArchFileName = file,
                    ExtrFileName = "price.txt",
                    Host         = Environment.MachineName,
                    LogTime      = DateTime.Now,
                    PriceItemId  = priceItem.Id,
                    ResultCode   = 2
                };
                downloadLog.Save();
                scope.VoteCommit();
            }

            using (var sw = new FileStream(Path.Combine(Settings.Default.HistoryPath, downloadLog.Id + ".eml"), FileMode.CreateNew)) {
                var attachments = new List <string> {
                    Path.Combine(DataDirectory, file)
                };
                var message = ImapHelper.BuildMessageWithAttachments("*****@*****.**", "*****@*****.**", attachments.ToArray());
                var bytes   = message.ToByteData();
                sw.Write(bytes, 0, bytes.Length);
            }
            WcfCallResendPrice(downloadLog.Id);

            Assert.That(PriceItemList.list.FirstOrDefault(i => i.PriceItemId == priceItem.Id), Is.Not.Null, "Прайса нет в очереди на формализацию");
            Assert.IsFalse(File.Exists(Path.Combine(Path.GetTempPath(), file)), "Не удален временный файл из темп");
        }
        public void MessageClientCheck()
        {
            SetSupplierAndClientConnection();
            //проверка на отсутствие документов до запуска обработчика
            var currentDocuments = session.Query <Document>().Where(s => s.Invoice.RecipientId == recipientId);

            Assert.IsTrue(!currentDocuments.Any());

            //новая накладная
            var document = GetDocument(recipientId);
            //прикрепление накладной к письму
            var msData = GetMemoryStreamForDocument(document);

            var message = BuildMessageWithAttachments($"to_{supplier.Id}@sup.com",
                                                      $"from_{supplier.Id}@sup.com", "text.sst", msData.ToArray());

            ImapHelper.StoreMessage(
                Settings.Default.TestIMAPUser,
                Settings.Default.TestIMAPPass,
                Settings.Default.IMAPSourceFolder, message.ToByteData());

            //запуск обработчика
            session.Transaction.Commit();

#if DEBUG
            handler.SetSessionForTest(session);
#endif
            handler.ProcessData();
            session.Flush();
            //проверка на наличие документов после запуска обработчика
            currentDocuments = session.Query <Document>().Where(s => s.Invoice.RecipientId == recipientId);
            //документ был один
            var currentDocument = currentDocuments.FirstOrDefault();
            Assert.IsTrue(currentDocuments.Count() == 1);
            //проверки соответствия полей
            Assert.IsTrue(currentDocument.Address.Id == aIntersection.Address.Id);
            Assert.IsTrue(currentDocument.ClientCode == client.Id);
            Assert.IsTrue(currentDocument.FirmCode == supplier.Id);
        }