Невозможно смоделировать отправку тестового гема Rails 4 Griddler в обработчик электронной почты (проблема post params)

У нас тесты Griddler Model работают нормально. Например, мы можем создать экземпляр lib/email_processor.rb, и он будет обрабатываться. Мы хотим создать тест контроллера, который выполняет сквозную запись в стандартном / email_processor.

Проблема в том, что параметры не приходят через почту. наш основной код:

  @postattr= {to: "hello@hello.com", subject: "a subject", attachments: [
      ActionDispatch::Http::UploadedFile.new({
         filename: 'example_virgin_onetransaction.pdf',
         type: 'application/pdf',
         tempfile: File.new('testfiles/examplefile.pdf")})
  ]}
  post :create, @postattr
  expect(response).to be_success

он работает при отправке сообщений на правильный маршрут и обрабатывается, за исключением того, что объект email.attachments равен nil.

мы пытались

  • @postattr.to_json # дает неверную последовательность байтов в UTF-8
  • @ postattr.to_s.to_json # работает, но параметры не передаются
  • URI, кодирующий строку JSON

кажется, что ничего не обрабатывается правильно. что мы пропустили?

2 ответа

Ваши параметры кажутся подходящими для использования только griddler. Но неверно, когда вы используете griddler-postmark. Griddle Postmark адаптер принимает параметры, такие как ваш ответ, затем griddler-postmark предварительно обрабатывает параметры для griddler. Правильный формат для передачи параметров для входящей электронной почты в приложении rails следующий: griddler-postmark

 attributes = {Subject: "a subject", TextBody: "Hello!",
            ToFull: [{Email: 'to_email@email.com', Name: 'to email'}],
            FromFull: {Email: "from_email@email.com", Name: "from email"},
            Attachments: [{Name: 'filename.pdf',
                           Content: Base64.encode64(fixture_file.read),
                           ContentType: 'application/pdf',
                           ContentLength: fixture_file.size
                          }]}

post :create, attributes

Вы можете получить проблемы с обработкой входящей электронной почты с вложением. Таким образом я добавляю пример класса EmailProcessor следующим образом

class EmailProcessor

  def initialize(email)
      @email = email
  end

  def process
    if @email.attachments.present?
      attachment = @email.attachments.first
      file = File.new(attachment.original_filename, 'wb')
      file.write attachment.read
      file.flush
      attached_document = AttachedDocument.new(paper: file)
      attached_document.save!
    end
  end
end

Жаль, что это поможет вам:)

Правильно, похоже, что форматирование параметров электронной почты не так очевидно. и от адресов на самом деле списки.

  @post_attr = {Subject: "a subject", TextBody: "Hello!",
                ToFull: [{Email: 'to_email@email.com', Name: 'to email'}],
                FromFull: {Email: "from_email@email.com", Name: "from email"},
                Attachments: [{Name: 'filename.pdf',
                               Content: Base64.encode64(fixture_file.read),
                               ContentType: 'application/pdf',
                               ContentLength: fixture_file.size
                              }]}

надеюсь, это поможет кому-то

Другие вопросы по тегам