Skip to content

Commit

Permalink
Merge branch 'message-id-fix'
Browse files Browse the repository at this point in the history
  • Loading branch information
ibalosh committed Aug 19, 2019
2 parents 6f7f6ce + 048ae98 commit fa64ce2
Show file tree
Hide file tree
Showing 9 changed files with 44 additions and 68 deletions.
6 changes: 4 additions & 2 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ env:
# POSTMARK_CI_RECIPIENT=?
- secure: "V5GeJn1rch72qcAz/YI9tSEnZ2Zb4utWzq9ntr9gojRVFGpocgIbULmeslTKyIN7s5kF23qnhsGmPA9Olwz1ZqV9zhdWcsm4PUhUU/n3tVAnLWpUDjeneD5P+IOO6S+bCzVZX+Gk5/agBt2bQeAbVe+lVh5RZQJc3lsEvkVv7QM="
# POSTMARK_CI_SENDER=?
- secure: "BjCKS4oNN1n2pQx31tA9kmfcim4BkAsO2Rg1clezEu1kEbsGzn6sjoVVeXZSHhfkZ0Gk6qW8y1fQm0gnyMQyugh8wlz8UfIS7m5CIR7ZwrWroToisbF6sHPVtoBuY8+hvtB89PXyoKKv9TBjnLEPTZFKnxP9vcYsbi45Sm06MOg="
- secure: "qP1h4CajeKaVL7cUF3G9cKCm+KBjcTjTKRC3uOVN+X5dgQZFAuMQ9oJ3k1868AFMEJ2qqqfLCm177SlDXxqSisR7MEcCDIchiE+gUGH0YqZKLEYONyl00ts3/A6iMkQCODEB+kzLZAlByziO3CDZ6bHeLb6f7UJ4ExCSCQMYIyc="
language: ruby
rvm:
- 2.0.0
Expand All @@ -17,10 +17,12 @@ rvm:
matrix:
include:
- rvm: 1.8.7
dist: precise
gemfile: gemfiles/Gemfile.legacy
- rvm: 1.9.3
gemfile: gemfiles/Gemfile.legacy
- rvm: jruby-19mode
jdk: oraclejdk8
jdk: oraclejdk8
dist: trusty
gemfile: gemfiles/Gemfile.legacy
script: bundle exec rake spec
4 changes: 4 additions & 0 deletions CHANGELOG.rdoc
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
= Changelog

== 1.17.0

* Update sent email message properly and not altering it's Message-ID with Postmark unique message id.

== 1.16.0

* Added support for template pushes.
Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.16.0
1.17.0
2 changes: 1 addition & 1 deletion lib/postmark/api_client.rb
Original file line number Diff line number Diff line change
Expand Up @@ -323,7 +323,7 @@ def in_batches(messages)

def update_message(message, response)
response ||= {}
message['Message-ID'] = response['MessageID']
message['X-PM-Message-Id'] = response['MessageID']
message.delivered = response['ErrorCode'] && response['ErrorCode'].zero?
message.postmark_response = response
end
Expand Down
2 changes: 1 addition & 1 deletion lib/postmark/version.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
module Postmark
VERSION = '1.16.0'
VERSION = '1.17.0'
end
29 changes: 9 additions & 20 deletions spec/integration/api_client_hashes_spec.rb
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
require 'spec_helper'

describe "Sending messages as Ruby hashes with Postmark::ApiClient" do
let(:message_id_format) { /<.+@.+>/ }
let(:postmark_message_id_format) { /\w{8}\-\w{4}-\w{4}-\w{4}-\w{12}/ }
let(:api_client) {
Postmark::ApiClient.new('POSTMARK_API_TEST',
:http_open_timeout => 15,
:http_read_timeout => 15)
}
let(:api_client) { Postmark::ApiClient.new('POSTMARK_API_TEST', :http_open_timeout => 15, :http_read_timeout => 15) }

let(:message) {
{
Expand Down Expand Up @@ -49,33 +46,29 @@
end

it 'updates a message object with Message-ID' do
api_client.deliver(message)[:message_id].
should =~ postmark_message_id_format
expect(api_client.deliver(message)[:message_id]).to be =~ postmark_message_id_format
end

it 'returns full Postmark response' do
api_client.deliver(message).should be_a Hash
expect(api_client.deliver(message)).to be_a Hash
end

it 'delivers a message with attachment' do
api_client.deliver(message_with_attachment).
should have_key(:message_id)
expect(api_client.deliver(message_with_attachment)).to have_key(:message_id)
end

it 'fails to deliver a message without body' do
expect { api_client.deliver(message_with_no_body) }.
to raise_error(Postmark::InvalidMessageError)
expect { api_client.deliver(message_with_no_body) }.to raise_error(Postmark::InvalidMessageError)
end

it 'fails to deliver a message with invalid To address' do
expect { api_client.deliver(message_with_invalid_to) }.
to raise_error(Postmark::InvalidMessageError)
expect { api_client.deliver(message_with_invalid_to) }.to raise_error(Postmark::InvalidMessageError)
end
end

context "in batches" do
it 'returns as many responses as many messages were sent' do
api_client.deliver_in_batches(valid_messages).count.should == valid_messages.count
expect(api_client.deliver_in_batches(valid_messages).count).to eq valid_messages.count
end

context "given custom max_batch_size" do
Expand All @@ -84,7 +77,7 @@
end

it 'returns as many responses as many messages were sent' do
api_client.deliver_in_batches(valid_messages).count.should == valid_messages.count
expect(api_client.deliver_in_batches(valid_messages).count).to eq valid_messages.count
end
end

Expand All @@ -95,11 +88,7 @@

it "doesn't deliver a batch of invalid Mail::Message objects" do
response = api_client.deliver_in_batches(invalid_messages)

expect(response).to satisfy { |r| r.all? { |mr| !!mr[:error_code] } }
end
end



end
61 changes: 21 additions & 40 deletions spec/integration/api_client_messages_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,7 @@

describe "Sending Mail::Messages with Postmark::ApiClient" do
let(:postmark_message_id_format) { /\w{8}\-\w{4}-\w{4}-\w{4}-\w{12}/ }
let(:api_client) {
Postmark::ApiClient.new('POSTMARK_API_TEST',
:http_open_timeout => 15,
:http_read_timeout => 15)
}
let(:api_client) { Postmark::ApiClient.new('POSTMARK_API_TEST', :http_open_timeout => 15, :http_read_timeout => 15) }

let(:message) {
Mail.new do
Expand All @@ -25,11 +21,7 @@
end
}

let(:message_with_attachment) {
message.tap do |msg|
msg.attachments["test.gif"] = File.read(empty_gif_path)
end
}
let(:message_with_attachment) { message.tap { |msg| msg.attachments["test.gif"] = File.read(empty_gif_path) } }

let(:message_with_invalid_to) {
Mail.new do
Expand All @@ -52,57 +44,48 @@

context "message by message" do
it 'delivers a plain text message' do
api_client.deliver_message(message).should have_key(:message_id)
expect(api_client.deliver_message(message)).to have_key(:message_id)
end

it 'updates a message object with Message-ID' do
api_client.deliver_message(message)[:message_id].
should =~ postmark_message_id_format
expect(api_client.deliver_message(message)[:message_id]).to be =~ postmark_message_id_format
end

it 'returns full Postmark response' do
api_client.deliver_message(message).should be_a Hash
expect(api_client.deliver_message(message)).to be_a Hash
end

it 'delivers a message with attachment' do
api_client.deliver_message(message_with_attachment).
should have_key(:message_id)
expect(api_client.deliver_message(message_with_attachment)).to have_key(:message_id)
end

it 'fails to deliver a message without body' do
expect { api_client.deliver_message(message_with_no_body) }.
to raise_error(Postmark::InvalidMessageError)
expect { api_client.deliver_message(message_with_no_body) }.to raise_error(Postmark::InvalidMessageError)
end

it 'fails to deliver a message with invalid To address' do
expect { api_client.deliver_message(message_with_invalid_to) }.
to raise_error(Postmark::InvalidMessageError)
expect { api_client.deliver_message(message_with_invalid_to) }.to raise_error(Postmark::InvalidMessageError)
end
end

context "in batches" do
it 'delivers a batch of valid Mail::Message objects' do
expect { api_client.deliver_messages(valid_messages) }.
to change{valid_messages.all? { |m| m.delivered? }}.
to true
to change{valid_messages.all? { |m| m.delivered? }}.to true
end

it 'updates delivered messages with Message-IDs' do
it 'updates delivered messages with X-PM-Message-Ids' do
api_client.deliver_messages(valid_messages)

expect(valid_messages.all? { |m| m.message_id =~ postmark_message_id_format }).
to be true
expect(valid_messages.all? { |m| m['X-PM-Message-Id'].to_s =~ postmark_message_id_format }).to be true
end

it 'updates delivered messages with related Postmark responses' do
api_client.deliver_messages(valid_messages)

expect(valid_messages.all? { |m| m.postmark_response["To"] == m.to[0] }).
to be true
expect(valid_messages.all? { |m| m.postmark_response["To"] == m.to[0] }).to be true
end

it 'returns as many responses as many messages were sent' do
api_client.deliver_messages(valid_messages).count.should == valid_messages.count
expect(api_client.deliver_messages(valid_messages).count).to eq valid_messages.count
end

context "given custom max_batch_size" do
Expand All @@ -112,28 +95,26 @@

it 'updates delivered messages with related Postmark responses' do
api_client.deliver_messages(valid_messages)

expect(valid_messages.all? { |m| m.postmark_response["To"] == m.to[0] }).
to be true
expect(valid_messages.all? { |m| m.postmark_response["To"] == m.to[0] }).to be true
end

it 'returns as many responses as many messages were sent' do
api_client.deliver_messages(valid_messages).count.should == valid_messages.count
expect(api_client.deliver_messages(valid_messages).count).to eq valid_messages.count
end
end

it 'partially delivers a batch of partially valid Mail::Message objects' do
expect { api_client.deliver_messages(partially_valid_messages) }.
to change{partially_valid_messages.select { |m| m.delivered? }.count}.
to 2
to change{partially_valid_messages.select { |m| m.delivered? }.count}.to 2
end

it "doesn't deliver a batch of invalid Mail::Message objects" do
expect { api_client.deliver_messages(invalid_messages) }.
to change{invalid_messages.all? { |m| m.delivered? == false }}.
to true
aggregate_failures do
expect { api_client.deliver_messages(invalid_messages) }.
to change{invalid_messages.all? { |m| m.delivered? == false }}.to true

invalid_messages.should satisfy { |ms| ms.all? { |m| !!m.postmark_response }}
expect(invalid_messages).to satisfy { |ms| ms.all? { |m| !!m.postmark_response }}
end
end
end
end
2 changes: 1 addition & 1 deletion spec/integration/api_client_resources_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
let(:recipient) { ENV['POSTMARK_CI_RECIPIENT'] }
let(:message) {
{
:from => "tema+ci@wildbit.com",
:from => ENV['POSTMARK_CI_SENDER'],
:to => recipient,
:subject => "Mail::Message object",
:text_body => "Lorem ipsum dolor sit amet, consectetur adipisicing elit, " \
Expand Down
4 changes: 2 additions & 2 deletions spec/integration/mail_delivery_method_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,9 @@
expect { message.deliver }.to change{message.delivered?}.to(true)
end

it 'updates a message object with Message-ID' do
it 'updates a message object with X-PM-Message-Id' do
expect { message.deliver }.
to change{message['Message-ID'].to_s}.to(postmark_message_id_format)
to change{message['X-PM-Message-Id'].to_s}.to(postmark_message_id_format)
end

it 'updates a message object with full postmark response' do
Expand Down

0 comments on commit fa64ce2

Please sign in to comment.