spec/integration/mailgun_spec.rb in mailgun-ruby-1.0.3 vs spec/integration/mailgun_spec.rb in mailgun-ruby-1.1.0

- old
+ new

@@ -1,46 +1,49 @@ require 'spec_helper' require 'mailgun' -describe 'Mailgun instantiation' do +vcr_opts = { :cassette_name => "instance" } + +describe 'Mailgun instantiation', vcr: vcr_opts do it 'instantiates an HttpClient object' do expect {@mg_obj = Mailgun::Client.new(APIKEY, APIHOST, APIVERSION, SSL)}.not_to raise_error end end -describe 'The method send_message()' do +vcr_opts = { :cassette_name => "send_message" } + +describe 'The method send_message()', vcr: vcr_opts do before(:all) do @mg_obj = Mailgun::Client.new(APIKEY, APIHOST, APIVERSION, SSL) - random_number = rand(1 .. 5000000) - @domain = "integration-test-#{random_number}.example.com" - @mg_obj.post("domains", {:name => @domain}) + @domain = TESTDOMAIN end - + it 'sends a standard message in test mode.' do - result = @mg_obj.send_message(@domain, {:from => 'bob@domain.com', - :to => 'sally@example.com', - :subject => 'Hash Integration Test', - :text => 'INTEGRATION TESTING', - 'o:testmode' => true}) + result = @mg_obj.send_message(@domain, {:from => "bob@#{@domain}", + :to => "sally@#{@domain}", + :subject => 'Hash Integration Test', + :text => 'INTEGRATION TESTING', + 'o:testmode' => true} + ) result.to_h! - result.body.should include("message") - result.body.should include("id") + expect(result.body).to include("message") + expect(result.body).to include("id") end it 'sends a message builder message in test mode.' do mb_obj = Mailgun::MessageBuilder.new() - mb_obj.set_from_address("sender@example.com", {'first' => 'Sending', 'last' => 'User'}) - mb_obj.add_recipient(:to, "recipient@example.com", {'first' => 'Recipient', 'last' => 'User'}) - mb_obj.set_subject("Message Builder Integration Test") - mb_obj.set_text_body("This is the text body.") - mb_obj.set_test_mode(true) + mb_obj.from("sender@#{@domain}", {'first' => 'Sending', 'last' => 'User'}) + mb_obj.add_recipient(:to, "recipient@#{@domain}", {'first' => 'Recipient', 'last' => 'User'}) + mb_obj.subject("Message Builder Integration Test") + mb_obj.body_text("This is the text body.") + mb_obj.test_mode(true) result = @mg_obj.send_message(@domain, mb_obj) result.to_h! - result.body.should include("message") - result.body.should include("id") + expect(result.body).to include("message") + expect(result.body).to include("id") end it 'sends a custom MIME message in test mode.' do mime_string = 'Delivered-To: mgbox01@gmail.com Received: by luna.mailgun.net with HTTP; Tue, 26 Nov 2013 17:59:11 +0000 @@ -56,543 +59,16 @@ X-Mailgun-Drop-Message: yes Sender: me@samples.mailgun.org Testing some Mailgun awesomness!' - message_params = {:to => 'sally@example.com', + message_params = {:to => "sally@#{@domain}", :message => mime_string} result = @mg_obj.send_message(@domain, message_params) result.to_h! - result.body.should include("message") - result.body.should include("id") + expect(result.body).to include("message") + expect(result.body).to include("id") end - - after(:all) do - @mg_obj.delete("domains/#{@domain}") - end end -describe 'For the domains endpoint' do - before(:all) do - @mg_obj = Mailgun::Client.new(APIKEY, APIHOST, APIVERSION, SSL) - random_number = rand(1 .. 5000000) - @domain = "integration-test-#{random_number}.example.com" - @result = @mg_obj.post("domains", {:name => @domain, - :smtp_password => 'super_secret', - :spam_action => 'tag'}) - - @result.to_h! - @result.body.should include("domain") - expect(@result.body["domain"]["name"]).to eq(@domain) - expect(@result.body["domain"]["spam_action"]).to eq("tag") - expect(@result.body["domain"]["smtp_password"]).to eq("super_secret") - end - - it 'get the domain.' do - result = @mg_obj.get("domains/#{@domain}") - - result.to_h! - result.body.should include("domain") - result.body["domain"]["name"].should eq(@domain) - end - - it 'gets a list of domains.' do - result = @mg_obj.get("domains") - - result.to_h! - expect(result.body["total_count"]).to be > 0 - end - - it 'deletes a domain.' do - result = @mg_obj.delete("domains/#{@domain}") - - result.to_h! - expect(result.body["message"]).to eq("Domain has been deleted") - end - - after(:all) do - @mg_obj.delete("domains/#{@domain}") - end -end - -describe 'For the Unsubscribes endpoint' do - before(:all) do - @mg_obj = Mailgun::Client.new(APIKEY, APIHOST, APIVERSION, SSL) - random_number = rand(1 .. 5000000) - @domain = "integration-test-#{random_number}.example.com" - @mg_obj.post("domains", {:name => @domain}) - end - - before(:each) do - random_number = rand(1 .. 5000000) - @email = "integration-test-#{random_number}@example.com" - @result = @mg_obj.post("#{@domain}/unsubscribes", - {:address => @email, - :tag => '*'}) - - @result.to_h! - expect(@result.body["message"]).to eq("Address has been added to the unsubscribes table") - expect(@result.body["address"]).to eq(@email) - end - - it 'get an unsubscribee.' do - result = @mg_obj.get("#{@domain}/unsubscribes/#{@email}") - - result.to_h! - expect(result.body["total_count"]).to eq 1 - expect(result.body["items"][0]["address"]).to eq(@email) - end - - it 'gets a list of unsubscribes.' do - result = @mg_obj.get("#{@domain}/unsubscribes") - - result.to_h! - expect(result.body["total_count"]).to be > 0 - end - - after(:each) do - @mg_obj.delete("#{@domain}/unsubscribes/#{@email}") - end - - after(:all) do - @mg_obj.delete("domains/#{@domain}") - end -end - -describe 'For the Complaints endpoint' do - before(:all) do - @mg_obj = Mailgun::Client.new(APIKEY, APIHOST, APIVERSION, SSL) - random_number = rand(1 .. 5000000) - @domain = "integration-test-#{random_number}.example.com" - @mg_obj.post("domains", {:name => @domain}) - end - - before(:each) do - random_number = rand(1 .. 5000000) - @email = "integration-test-#{random_number}@example.com" - @result = @mg_obj.post("#{@domain}/complaints", {:address => @email}) - - @result.to_h! - expect(@result.body["message"]).to eq("Address has been added to the complaints table") - expect(@result.body["address"]).to eq(@email) - end - - it 'get a complaint.' do - result = @mg_obj.get("#{@domain}/complaints/#{@email}") - - result.to_h! - expect(result.body["complaint"]["count"]).to eq 1 - expect(result.body["complaint"]["address"]).to eq(@email) - end - - it 'gets a list of complaints.' do - result = @mg_obj.get("#{@domain}/complaints") - - result.to_h! - expect(result.body["total_count"]).to be > 0 - end - - after(:each) do - @mg_obj.delete("#{@domain}/complaints/#{@email}") - end - - after(:all) do - @mg_obj.delete("domains/#{@domain}") - end -end - -describe 'For the Bounces endpoint' do - before(:all) do - @mg_obj = Mailgun::Client.new(APIKEY, APIHOST, APIVERSION, SSL) - random_number = rand(1 .. 5000000) - @domain = "integration-test-#{random_number}.example.com" - @mg_obj.post("domains", {:name => @domain}) - end - - before(:each) do - random_number = rand(1 .. 5000000) - @email = "integration-test-#{random_number}@example.com" - @result = @mg_obj.post("#{@domain}/bounces", - {:address => @email, - :code => 550, - :error => "Integration Test"}) - - @result.to_h! - expect(@result.body["message"]).to eq("Address has been added to the bounces table") - expect(@result.body["address"]).to eq(@email) - end - - it 'get a bounce.' do - result = @mg_obj.get("#{@domain}/bounces/#{@email}") - - result.to_h! - expect(result.body["bounce"]["code"]).to eq("550") - expect(result.body["bounce"]["address"]).to eq(@email) - expect(result.body["bounce"]["error"]).to eq("Integration Test") - end - - it 'gets a list of bounces.' do - result = @mg_obj.get("#{@domain}/bounces") - - result.to_h! - expect(result.body["total_count"]).to be > 0 - end - - after(:each) do - @mg_obj.delete("#{@domain}/bounces/#{@email}") - end - - after(:all) do - @mg_obj.delete("domains/#{@domain}") - end -end - -describe 'For the Stats endpoint' do - before(:all) do - @mg_obj = Mailgun::Client.new(APIKEY, APIHOST, APIVERSION, SSL) - random_number = rand(1 .. 5000000) - @domain = "integration-test-#{random_number}.example.com" - @mg_obj.post("domains", {:name => @domain}) - end - - it 'get some stats.' do - @mg_obj.get("#{@domain}/stats", {:limit => 50, :skip => 10, :event => 'sent'}) - end - - after(:all) do - @mg_obj.delete("domains/#{@domain}") - end -end - -describe 'For the Events endpoint' do - before(:all) do - @mg_obj = Mailgun::Client.new(APIKEY, APIHOST, APIVERSION, SSL) - random_number = rand(1 .. 5000000) - @domain = "integration-test-#{random_number}.example.com" - @mg_obj.post("domains", {:name => @domain}) - end - - it 'get an event.' do - result = @mg_obj.get("#{@domain}/events", {:limit => 1}) - - result.to_h! - expect(result.body["items"].length).to be_within(1).of(1) - expect(result.body["paging"]).to include("next") - expect(result.body["paging"]).to include("previous") - end - - after(:all) do - @mg_obj.delete("domains/#{@domain}") - end -end - -describe 'For the Routes endpoint' do - before(:all) do - @mg_obj = Mailgun::Client.new(APIKEY, APIHOST, APIVERSION, SSL) - end - - before(:each) do - result = @mg_obj.post("routes", {:priority => 10, - :description => 'Integration Test Route', - :expression => 'match_recipient(".*@example.com")', - :action => 'forward("alice@example.com")'}) - - result.to_h! - expect(result.body["message"]).to eq("Route has been created") - expect(result.body["route"]["description"]).to eq("Integration Test Route") - expect(result.body["route"]["actions"]).to include('forward("alice@example.com")') - expect(result.body["route"]["expression"]).to include('match_recipient(".*@example.com")') - expect(result.body["route"]["priority"]).to eq(10) - - @route_id = result.body["route"]["id"] - end - - it 'get the route.' do - result = @mg_obj.get("routes/#{@route_id}") - - result.to_h! - expect(result.body["route"]["description"]).to eq("Integration Test Route") - expect(result.body["route"]["actions"]).to include('forward("alice@example.com")') - expect(result.body["route"]["expression"]).to include('match_recipient(".*@example.com")') - expect(result.body["route"]["priority"]).to eq(10) - end - - it 'gets a list of all routes.' do - result = @mg_obj.get("routes", {:limit => 50}) - - result.to_h! - expect(result.body["total_count"]).to be > 0 - end - - it 'updates the route.' do - result = @mg_obj.put("routes/#{@route_id}", {:priority => 10, - :description => 'Integration Test Route Update', - :expression => 'match_recipient(".*@example.com")', - :action => 'forward("update@example.com")'}) - - result.to_h! - expect(result.body["message"]).to eq("Route has been updated") - expect(result.body["description"]).to eq("Integration Test Route Update") - expect(result.body["actions"]).to include('forward("update@example.com")') - expect(result.body["expression"]).to include('match_recipient(".*@example.com")') - expect(result.body["priority"]).to eq(10) - end - - after(:each) do - @mg_obj.delete("routes/#{@route_id}") - end -end - -describe 'For the campaigns endpoint' do - before(:all) do - @mg_obj = Mailgun::Client.new(APIKEY, APIHOST, APIVERSION, SSL) - random_number = rand(1 .. 5000000) - @domain = "integration-test-#{random_number}.example.com" - @mg_obj.post("domains", {:name => @domain}) - end - - before(:each) do - random_number = rand(1 .. 5000000) - @campaign_id = "integration_test_#{random_number}" - result = @mg_obj.post("#{@domain}/campaigns", {:name => 'My Campaign', - :id => @campaign_id}) - - result.to_h! - expect(result.body["message"]).to eq("Campaign created") - expect(result.body["campaign"]["id"]).to eq(@campaign_id) - expect(result.body["campaign"]["name"]).to eq('My Campaign') - end - - it 'get a campaign.' do - result = @mg_obj.get("#{@domain}/campaigns/#{@campaign_id}") - - result.to_h! - expect(result.body["id"]).to eq(@campaign_id) - expect(result.body["name"]).to eq('My Campaign') - end - - it 'gets a list of all campaigns.' do - result = @mg_obj.get("#{@domain}/campaigns", {:limit => 50}) - - result.to_h! - expect(result.body["total_count"]).to be > 0 - end - - it 'update a campaign.' do - result = @mg_obj.put("#{@domain}/campaigns/#{@campaign_id}", {:name => 'My Updated Campaign', - :id => @campaign_id}) - - result.to_h! - expect(result.body["message"]).to eq("Campaign updated") - expect(result.body["campaign"]["id"]).to eq(@campaign_id) - expect(result.body["campaign"]["name"]).to eq('My Updated Campaign') - end - - it 'get campaign events.' do - expect{@mg_obj.get("#{@domain}/campaigns/#{@campaign_id}/events", {:groupby => "clicked"})}.not_to raise_error - end - - it 'get campaign stats.' do - expect{@mg_obj.get("#{@domain}/campaigns/#{@campaign_id}/stats", {:groupby => "domain"})}.not_to raise_error - end - - after(:each) do - @mg_obj.delete("#{@domain}/campaigns/#{@campaign_id}") - end - after(:all) do - @mg_obj.delete("domains/#{@domain}") - end -end - -describe 'For the webhooks endpoint' do - before(:all) do - @mg_obj = Mailgun::Client.new(APIKEY, APIHOST, APIVERSION, SSL) - random_number = rand(1 .. 5000000) - @domain = "integration-test-#{random_number}.example.com" - @mg_obj.post("domains", {:name => @domain}) - end - - before(:each) do - random_number = rand(1 .. 5000000) - @campaign_id = "integration_test_#{random_number}" - result = @mg_obj.post("domains/#{@domain}/webhooks", {:id => 'bounce', - :url => 'http://example.com/mailgun/events/bounce'}) - - result.to_h! - expect(result.body["message"]).to eq("Webhook has been created") - expect(result.body["webhook"]["url"]).to eq('http://example.com/mailgun/events/bounce') - end - - it 'get a webhook.' do - result = @mg_obj.get("domains/#{@domain}/webhooks/bounce") - - result.to_h! - expect(result.body["webhook"]["url"]).to eq('http://example.com/mailgun/events/bounce') - end - - it 'gets a list of all webhooks.' do - result = @mg_obj.get("domains/#{@domain}/webhooks") - - result.to_h! - expect(result.body["webhooks"]["bounce"]["url"]).to eq('http://example.com/mailgun/events/bounce') - end - - it 'update a webhook.' do - result = @mg_obj.put("domains/#{@domain}/webhooks/bounce", {:id => 'bounce', - :url => 'http://example.com/mailgun/events/new_bounce'}) - - result.to_h! - expect(result.body["message"]).to eq("Webhook has been updated") - expect(result.body["webhook"]["url"]).to eq('http://example.com/mailgun/events/new_bounce') - end - - after(:each) do - @mg_obj.delete("domains/#{@domain}/webhooks/bounce") - end - - after(:all) do - @mg_obj.delete("domains/#{@domain}") - end -end - -describe 'For the Mailing Lists endpoint' do - before(:all) do - @mg_obj = Mailgun::Client.new(APIKEY, APIHOST, APIVERSION, SSL) - random_number = rand(1 .. 5000000) - @domain = "integration-test-#{random_number}.example.com" - @mg_obj.post("domains", {:name => @domain}) - end - - before(:each) do - random_number = rand(1 .. 5000000) - @ml_address = "integration_test_#{random_number}@#{@domain}" - result = @mg_obj.post("lists", {:address => @ml_address, - :name => 'Integration Test List', - :description => 'This list should be deleted automatically.', - :access_level => 'members'}) - - result.to_h! - expect(result.body["message"]).to eq("Mailing list has been created") - expect(result.body["list"]["address"]).to eq(@ml_address) - expect(result.body["list"]["name"]).to eq('Integration Test List') - end - - it 'get a list.' do - result = @mg_obj.get("lists/#{@ml_address}") - - result.to_h! - expect(result.body["list"]["address"]).to eq(@ml_address) - expect(result.body["list"]["name"]).to eq('Integration Test List') - end - - it 'gets a list of all lists.' do - result = @mg_obj.get("lists", {:limit => 50}) - - result.to_h! - expect(result.body["total_count"]).to be > 0 - end - - it 'update a list.' do - result = @mg_obj.put("lists/#{@ml_address}", - {:address => @ml_address, - :name => 'Integration Test List Update', - :description => 'This list should be deleted automatically.', - :access_level => 'readonly'}) - - result.to_h! - expect(result.body["message"]).to eq("Mailing list has been updated") - expect(result.body["list"]["address"]).to eq(@ml_address) - expect(result.body["list"]["name"]).to eq('Integration Test List Update') - expect(result.body["list"]["access_level"]).to eq('readonly') - end - - after(:each) do - @mg_obj.delete("lists/#{@ml_address}") - end - - after(:all) do - @mg_obj.delete("domains/#{@domain}") - end -end - -describe 'For the Mailing Lists Members endpoint' do - before(:all) do - @mg_obj = Mailgun::Client.new(APIKEY, APIHOST, APIVERSION, SSL) - random_number = rand(1 .. 5000000) - @domain = "integration-test-#{random_number}.example.com" - @ml_address = "integration_test_#{random_number}@#{@domain}" - @ml_member = "integration_test_member_#{random_number}@#{@domain}" - @mg_obj.post("domains", {:name => @domain}) - @mg_obj.post("lists", {:address => @ml_address, - :name => 'Integration Test List', - :description => 'This list should be deleted automatically.', - :access_level => 'members'}) - end - - before(:each) do - result = @mg_obj.post("lists/#{@ml_address}/members", - {:address => @ml_member, - :name => 'Jane Doe', - :subscribed => true, - :upsert => 'no'}) - - result.to_h! - expect(result.body["message"]).to eq("Mailing list member has been created") - expect(result.body["member"]["address"]).to eq(@ml_member) - expect(result.body["member"]["name"]).to eq('Jane Doe') - end - - it 'get a list member.' do - result = @mg_obj.get("lists/#{@ml_address}/members/#{@ml_member}") - - result.to_h! - expect(result.body["member"]["address"]).to eq(@ml_member) - expect(result.body["member"]["name"]).to eq('Jane Doe') - end - - it 'updates a list member.' do - result = @mg_obj.put("lists/#{@ml_address}/members/#{@ml_member}", - {:name => 'Jane Doe Update', - :subscribed => false}) - - result.to_h! - expect(result.body["message"]).to eq("Mailing list member has been updated") - expect(result.body["member"]["address"]).to eq(@ml_member) - expect(result.body["member"]["name"]).to eq('Jane Doe Update') - expect(result.body["member"]["subscribed"]).to eq(false) - end - - after(:each) do - @mg_obj.delete("lists/#{@ml_address}/members/#{@ml_member}") - end - - after(:all) do - @mg_obj.delete("domains/#{@domain}") - end -end - -describe 'For the Email Validation endpoint' do - before(:all) do - @mg_obj = Mailgun::Client.new(PUB_APIKEY) - end - - it 'validates an address.' do - result = @mg_obj.get("address/validate", - {:address => "test@example.com"}) - - result.to_h! - expect(result.body["is_valid"]).to eq(false) - expect(result.body["address"]).to eq("test@example.com") - end - - it 'parses an address.' do - result = @mg_obj.get("address/parse", - {:addresses => "Alice <alice@example.com>,bob@example.com,example.com"}) - - result.to_h! - expect(result.body["parsed"]).to include("Alice <alice@example.com>") - expect(result.body["parsed"]).to include("bob@example.com") - expect(result.body["unparseable"]).to include("example.com") - end -end