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));
        }
Ejemplo n.º 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), "Письмо было удалено сразу же после возникнования ошибок");
        }
        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());
        }
Ejemplo n.º 4
0
        public void SimpleProcessImap()
        {
            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 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.Anything));

            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());
        }
Ejemplo n.º 5
0
        public void ProcessMessageWithTimeoutOnError()
        {
            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);

            //Обрабатываем письмо первый раз: оно должно попасть в ErrorInfos
            Assert.That(handler.ErrorInfos.Count, Is.EqualTo(0));

            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), "Письмо было удалено");

            Assert.That(handler.ErrorInfos.Count, Is.EqualTo(1));

            //Обрабатываем письмо второй раз: оно не должно быть обработано
            handler.ProcessIMAPFolder();

            imapReader.AssertWasCalled(r => r.ProcessMime(Arg <Mime> .Is.Anything), options => options.Repeat.Times(2));
            imapReader.AssertWasNotCalled(r => r.ProcessBrokenMessage(Arg <IMAP_FetchItem> .Is.Anything, Arg <IMAP_FetchItem[]> .Is.Anything, Arg <Exception> .Is.Equal(exception)));

            existsMessages = ImapHelper.CheckImapFolder(Settings.Default.TestIMAPUser, Settings.Default.TestIMAPPass, Settings.Default.IMAPSourceFolder);
            Assert.That(existsMessages.Count, Is.EqualTo(1), "Письмо было удалено");

            Assert.That(handler.ErrorInfos.Count, Is.EqualTo(1));

            //Подменяем информацию о письме, чтобы сработал таймаут и в третий раз обрабатываем письмо: оно должно обработаться
            var realInfo = handler.ErrorInfos[0];
            var info     = MockRepository.GenerateMock <UIDInfoForTesting>();

            info.Stub(i => i.UID).Return(realInfo.UID);
            info.Stub(i => i.CreateTime).Return(DateTime.Now.AddMinutes(-(Settings.Default.UIDProcessTimeout + 1)));
            handler.ErrorInfos.Clear();
            handler.ErrorInfos.Add(info);

            handler.ProcessIMAPFolder();

            imapReader.AssertWasCalled(r => r.ProcessMime(Arg <Mime> .Is.Anything), options => options.Repeat.Times(3));
            imapReader.AssertWasCalled(r => r.ProcessBrokenMessage(Arg <IMAP_FetchItem> .Is.Anything, Arg <IMAP_FetchItem[]> .Is.Anything, Arg <Exception> .Is.Equal(exception)));

            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());

            Assert.That(handler.ErrorInfos.Count, Is.EqualTo(0));
        }