wj-mailgun-ruby 1.1.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (83) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +23 -0
  3. data/.rubocop.yml +8 -0
  4. data/.rubocop_todo.yml +22 -0
  5. data/.ruby-env.yml.example +12 -0
  6. data/.ruby-version +1 -0
  7. data/.travis.yml +24 -0
  8. data/Gemfile +6 -0
  9. data/LICENSE +191 -0
  10. data/README.md +241 -0
  11. data/Rakefile +35 -0
  12. data/docs/Domains.md +54 -0
  13. data/docs/Events.md +46 -0
  14. data/docs/MessageBuilder.md +105 -0
  15. data/docs/Messages.md +107 -0
  16. data/docs/OptInHandler.md +103 -0
  17. data/docs/Snippets.md +526 -0
  18. data/docs/Suppressions.md +82 -0
  19. data/docs/Webhooks.md +40 -0
  20. data/lib/mailgun-ruby.rb +2 -0
  21. data/lib/mailgun.rb +39 -0
  22. data/lib/mailgun/address.rb +45 -0
  23. data/lib/mailgun/chains.rb +16 -0
  24. data/lib/mailgun/client.rb +199 -0
  25. data/lib/mailgun/domains/domains.rb +84 -0
  26. data/lib/mailgun/events/events.rb +120 -0
  27. data/lib/mailgun/exceptions/exceptions.rb +65 -0
  28. data/lib/mailgun/lists/opt_in_handler.rb +58 -0
  29. data/lib/mailgun/messages/batch_message.rb +125 -0
  30. data/lib/mailgun/messages/message_builder.rb +413 -0
  31. data/lib/mailgun/response.rb +62 -0
  32. data/lib/mailgun/suppressions.rb +270 -0
  33. data/lib/mailgun/version.rb +4 -0
  34. data/lib/mailgun/webhooks/webhooks.rb +101 -0
  35. data/lib/railgun.rb +8 -0
  36. data/lib/railgun/attachment.rb +56 -0
  37. data/lib/railgun/errors.rb +27 -0
  38. data/lib/railgun/mailer.rb +161 -0
  39. data/lib/railgun/message.rb +17 -0
  40. data/lib/railgun/railtie.rb +9 -0
  41. data/mailgun.gemspec +37 -0
  42. data/spec/integration/bounces_spec.rb +44 -0
  43. data/spec/integration/campaign_spec.rb +60 -0
  44. data/spec/integration/complaints_spec.rb +38 -0
  45. data/spec/integration/domains_spec.rb +39 -0
  46. data/spec/integration/email_validation_spec.rb +57 -0
  47. data/spec/integration/events_spec.rb +28 -0
  48. data/spec/integration/list_members_spec.rb +63 -0
  49. data/spec/integration/list_spec.rb +58 -0
  50. data/spec/integration/mailgun_spec.rb +121 -0
  51. data/spec/integration/messages/sample_data/mime.txt +38 -0
  52. data/spec/integration/routes_spec.rb +74 -0
  53. data/spec/integration/stats_spec.rb +15 -0
  54. data/spec/integration/suppressions_spec.rb +126 -0
  55. data/spec/integration/unsubscribes_spec.rb +42 -0
  56. data/spec/integration/webhook_spec.rb +54 -0
  57. data/spec/spec_helper.rb +45 -0
  58. data/spec/unit/connection/test_client.rb +99 -0
  59. data/spec/unit/events/events_spec.rb +50 -0
  60. data/spec/unit/lists/opt_in_handler_spec.rb +24 -0
  61. data/spec/unit/mailgun_spec.rb +127 -0
  62. data/spec/unit/messages/batch_message_spec.rb +131 -0
  63. data/spec/unit/messages/message_builder_spec.rb +584 -0
  64. data/spec/unit/messages/sample_data/mailgun_icon.png +0 -0
  65. data/spec/unit/messages/sample_data/mime.txt +38 -0
  66. data/spec/unit/messages/sample_data/rackspace_logo.jpg +0 -0
  67. data/vcr_cassettes/bounces.yml +175 -0
  68. data/vcr_cassettes/complaints.yml +175 -0
  69. data/vcr_cassettes/domains.todo.yml +42 -0
  70. data/vcr_cassettes/domains.yml +360 -0
  71. data/vcr_cassettes/email_validation.yml +167 -0
  72. data/vcr_cassettes/events.yml +108 -0
  73. data/vcr_cassettes/exceptions.yml +45 -0
  74. data/vcr_cassettes/list_members.yml +320 -0
  75. data/vcr_cassettes/mailing_list.todo.yml +43 -0
  76. data/vcr_cassettes/mailing_list.yml +390 -0
  77. data/vcr_cassettes/routes.yml +359 -0
  78. data/vcr_cassettes/send_message.yml +107 -0
  79. data/vcr_cassettes/stats.yml +44 -0
  80. data/vcr_cassettes/suppressions.yml +676 -0
  81. data/vcr_cassettes/unsubscribes.yml +191 -0
  82. data/vcr_cassettes/webhooks.yml +276 -0
  83. metadata +263 -0
@@ -0,0 +1,39 @@
1
+ require 'spec_helper'
2
+ require 'mailgun'
3
+
4
+ vcr_opts = { :cassette_name => "domains" }
5
+
6
+ describe 'For the domains endpoint', vcr: vcr_opts do
7
+ before(:all) do
8
+ @mg_client = Mailgun::Client.new(APIKEY, APIHOST, APIVERSION, SSL)
9
+ @mg_obj = Mailgun::Domains.new(@mg_client)
10
+ @domain = "integration-test.domain.invalid"
11
+ end
12
+
13
+ it 'creates the domain' do
14
+ result = @mg_obj.add_domain(@domain, { smtp_password: 'super_secret', spam_action: 'tag' })
15
+
16
+ expect(result['domain']["name"]).to eq(@domain)
17
+ expect(result['domain']["spam_action"]).to eq("tag")
18
+ expect(result['domain']["smtp_password"]).to eq("super_secret")
19
+ end
20
+
21
+ it 'get the domain.' do
22
+ result = @mg_obj.get(@domain)
23
+
24
+ expect(result).to include("domain")
25
+ expect(result["domain"]["name"]).to eq(@domain)
26
+ end
27
+
28
+ it 'gets a list of domains.' do
29
+ result = @mg_obj.get_domains
30
+
31
+ expect(result.size).to be > 0
32
+ end
33
+
34
+ it 'deletes a domain.' do
35
+ result = @mg_obj.delete(@domain)
36
+
37
+ expect(result).to be_truthy
38
+ end
39
+ end
@@ -0,0 +1,57 @@
1
+ require 'spec_helper'
2
+
3
+ require 'mailgun'
4
+ require 'mailgun/address'
5
+
6
+ vcr_opts = { :cassette_name => "email_validation" }
7
+
8
+ describe 'For the email validation endpoint', order: :defined, vcr: vcr_opts do
9
+ before(:all) do
10
+ @mg_obj = Mailgun::Address.new(PUB_APIKEY)
11
+
12
+ @valid = ["Alice <alice@example.com>", "bob@example.com"]
13
+ @invalid = ["example.org"]
14
+
15
+ @all_addrs = @valid + @invalid
16
+ end
17
+
18
+ it 'returns parsed and unparsable lists' do
19
+ res = @mg_obj.parse(@all_addrs)
20
+
21
+ expect(res["parsed"]).to eq(@valid)
22
+ expect(res["unparseable"]).to eq(@invalid)
23
+ end
24
+
25
+ it 'validates alice@mailgun.net with info' do
26
+ res = @mg_obj.validate("alice@mailgun.net")
27
+
28
+ expected = {
29
+ "address" => "alice@mailgun.net",
30
+ "did_you_mean" => nil,
31
+ "is_valid" => true,
32
+ "parts" => {
33
+ "display_name" => nil,
34
+ "domain" => "mailgun.net",
35
+ "local_part" => "alice",
36
+ },
37
+ }
38
+ expect(res).to eq(expected)
39
+ end
40
+
41
+ it 'fails to validate example.org' do
42
+ res = @mg_obj.validate("example.org")
43
+
44
+ expected = {
45
+ "address" => "example.org",
46
+ "did_you_mean" => nil,
47
+ "is_valid" => false,
48
+ "parts" => {
49
+ "display_name" => nil,
50
+ "domain" => nil,
51
+ "local_part" => nil,
52
+ },
53
+ }
54
+ expect(res).to eq(expected)
55
+ end
56
+
57
+ end
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+ require 'mailgun'
3
+ require 'mailgun/events/events'
4
+
5
+ vcr_opts = { :cassette_name => "events" }
6
+
7
+ describe 'For the Events endpoint', vcr: vcr_opts do
8
+ before(:all) do
9
+ @mg_obj = Mailgun::Client.new(APIKEY, APIHOST, APIVERSION, SSL)
10
+ @domain = TESTDOMAIN
11
+ @events = Mailgun::Events.new(@mg_obj, @domain)
12
+ end
13
+
14
+ it 'can get an event.' do
15
+ result = @mg_obj.get("#{@domain}/events", {:limit => 1})
16
+
17
+ result.to_h!
18
+ expect(result.body["items"].length).to be_within(1).of(1)
19
+ expect(result.body["paging"]).to include("next")
20
+ expect(result.body["paging"]).to include("previous")
21
+ end
22
+
23
+ it 'can iterate over all events with `each`' do
24
+ @events.each do |e|
25
+ expect(e.id).to eq("JAx9z641TuGGUyaJlD9sCQ")
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,63 @@
1
+ require 'spec_helper'
2
+ require 'mailgun'
3
+
4
+ vcr_opts = { :cassette_name => "list_members" }
5
+
6
+ describe 'For the Mailing Lists Members endpoint', order: :defined, vcr: vcr_opts do
7
+ before(:all) do
8
+ @mg_obj = Mailgun::Client.new(APIKEY, APIHOST, APIVERSION, SSL)
9
+ @domain = TESTDOMAIN
10
+ @ml_address = "integration_test_list@#{@domain}"
11
+ @ml_member = "integration_test_member_member@#{@domain}"
12
+ end
13
+
14
+ it 'creates a list' do
15
+ result = @mg_obj.post("lists", {:address => @ml_address,
16
+ :name => 'Integration Test List',
17
+ :description => 'This list should be deleted automatically.',
18
+ :access_level => 'members'})
19
+ result.to_h!
20
+ expect(result.body["message"]).to eq("Mailing list has been created")
21
+ expect(result.body["list"]["address"]).to eq(@ml_address)
22
+ expect(result.body["list"]["name"]).to eq('Integration Test List')
23
+ end
24
+
25
+ it 'adds a list member' do
26
+ result = @mg_obj.post("lists/#{@ml_address}/members",
27
+ {:address => @ml_member,
28
+ :name => 'Jane Doe',
29
+ :subscribed => true,
30
+ :upsert => 'no'})
31
+
32
+ result.to_h!
33
+ expect(result.body["message"]).to eq("Mailing list member has been created")
34
+ expect(result.body["member"]["address"]).to eq(@ml_member)
35
+ expect(result.body["member"]["name"]).to eq('Jane Doe')
36
+ end
37
+
38
+ it 'gets a list member.' do
39
+ result = @mg_obj.get("lists/#{@ml_address}/members/#{@ml_member}")
40
+
41
+ result.to_h!
42
+ expect(result.body["member"]["address"]).to eq(@ml_member)
43
+ expect(result.body["member"]["name"]).to eq('Jane Doe')
44
+ end
45
+
46
+ it 'updates a list member.' do
47
+ result = @mg_obj.put("lists/#{@ml_address}/members/#{@ml_member}",
48
+ {:name => 'Jane Doe Update',
49
+ :subscribed => false})
50
+
51
+ result.to_h!
52
+ expect(result.body["message"]).to eq("Mailing list member has been updated")
53
+ expect(result.body["member"]["address"]).to eq(@ml_member)
54
+ expect(result.body["member"]["name"]).to eq('Jane Doe Update')
55
+ expect(result.body["member"]["subscribed"]).to eq(false)
56
+ end
57
+
58
+ it 'removes a list member' do
59
+ @mg_obj.delete("lists/#{@ml_address}/members/#{@ml_member}")
60
+ @mg_obj.delete("lists/#{@ml_address}")
61
+ end
62
+
63
+ end
@@ -0,0 +1,58 @@
1
+ require 'spec_helper'
2
+ require 'mailgun'
3
+
4
+ vcr_opts = { :cassette_name => "mailing_list" }
5
+
6
+ describe 'For the Mailing Lists endpoint', vcr: vcr_opts do
7
+ before(:all) do
8
+ @mg_obj = Mailgun::Client.new(APIKEY, APIHOST, APIVERSION, SSL)
9
+ @domain = TESTDOMAIN
10
+ @ml_address = "integration_test_list@#{@domain}"
11
+ end
12
+
13
+ it 'creates a list' do
14
+ result = @mg_obj.post("lists", {:address => @ml_address,
15
+ :name => 'Integration Test List',
16
+ :description => 'This list should be deleted automatically.',
17
+ :access_level => 'members'})
18
+
19
+ result.to_h!
20
+ expect(result.body["message"]).to eq("Mailing list has been created")
21
+ expect(result.body["list"]["address"]).to eq(@ml_address)
22
+ expect(result.body["list"]["name"]).to eq('Integration Test List')
23
+ end
24
+
25
+ it 'gets a list.' do
26
+ result = @mg_obj.get("lists/#{@ml_address}")
27
+
28
+ result.to_h!
29
+ expect(result.body["list"]["address"]).to eq(@ml_address)
30
+ expect(result.body["list"]["name"]).to eq('Integration Test List')
31
+ end
32
+
33
+ it 'gets a list of all lists.' do
34
+ result = @mg_obj.get("lists", {:limit => 50})
35
+
36
+ result.to_h!
37
+ expect(result.body["total_count"]).to be > 0
38
+ end
39
+
40
+ it 'updates a list.' do
41
+ result = @mg_obj.put("lists/#{@ml_address}",
42
+ {:address => @ml_address,
43
+ :name => 'Integration Test List Update',
44
+ :description => 'This list should be deleted automatically.',
45
+ :access_level => 'readonly'})
46
+
47
+ result.to_h!
48
+ expect(result.body["message"]).to eq("Mailing list has been updated")
49
+ expect(result.body["list"]["address"]).to eq(@ml_address)
50
+ expect(result.body["list"]["name"]).to eq('Integration Test List Update')
51
+ expect(result.body["list"]["access_level"]).to eq('readonly')
52
+ end
53
+
54
+ it 'deletes a list' do
55
+ @mg_obj.delete("lists/#{@ml_address}")
56
+ end
57
+
58
+ end
@@ -0,0 +1,121 @@
1
+ require 'spec_helper'
2
+ require 'mailgun'
3
+ require 'mailgun/exceptions/exceptions'
4
+
5
+ vcr_opts = { :cassette_name => "instance" }
6
+
7
+ describe 'Mailgun instantiation', vcr: vcr_opts do
8
+ it 'instantiates an HttpClient object' do
9
+ expect {@mg_obj = Mailgun::Client.new(APIKEY, APIHOST, APIVERSION, SSL)}.not_to raise_error
10
+ end
11
+ end
12
+
13
+ vcr_opts = { :cassette_name => "exceptions" }
14
+
15
+ describe 'Client exceptions', vcr: vcr_opts do
16
+ before(:all) do
17
+ @mg_obj = Mailgun::Client.new(APIKEY, APIHOST, APIVERSION, SSL)
18
+ @domain = TESTDOMAIN
19
+ end
20
+
21
+ it 'display useful error information' do
22
+ begin
23
+ @mg_obj.send_message("not-our-doma.in", {
24
+ :from => "sally@not-our-doma.in",
25
+ :to => "bob@#{@domain}",
26
+ :subject => 'Exception Integration Test',
27
+ :text => 'INTEGRATION TESTING'
28
+ })
29
+ rescue Mailgun::CommunicationError => err
30
+ expect(err.message).to eq('404 Not Found: Domain not found: not-our-doma.in')
31
+ else
32
+ fail
33
+ end
34
+ end
35
+ end
36
+
37
+ vcr_opts = { :cassette_name => "send_message" }
38
+
39
+ describe 'The method send_message()', vcr: vcr_opts do
40
+ before(:all) do
41
+ @mg_obj = Mailgun::Client.new(APIKEY, APIHOST, APIVERSION, SSL)
42
+ @domain = TESTDOMAIN
43
+ end
44
+
45
+ it 'sends a standard message in test mode.' do
46
+ result = @mg_obj.send_message(@domain, {:from => "bob@#{@domain}",
47
+ :to => "sally@#{@domain}",
48
+ :subject => 'Hash Integration Test',
49
+ :text => 'INTEGRATION TESTING',
50
+ 'o:testmode' => true}
51
+ )
52
+ result.to_h!
53
+ expect(result.body).to include("message")
54
+ expect(result.body).to include("id")
55
+ end
56
+
57
+ it 'fakes message send while in *client* test mode' do
58
+ @mg_obj.enable_test_mode!
59
+
60
+ expect(@mg_obj.test_mode?).to eq(true)
61
+
62
+ data = { :from => "joe@#{@domain}",
63
+ :to => "bob@#{@domain}",
64
+ :subject => "Test",
65
+ :text => "Test Data" }
66
+
67
+ result = @mg_obj.send_message(@domain, data)
68
+
69
+ result.to_h!
70
+
71
+ expect(result.body).to include("message")
72
+ expect(result.body).to include("id")
73
+
74
+ expect(result.code).to eq(200)
75
+ expect(result.body['id']).to eq("test-mode-mail@localhost")
76
+ expect(result.body['message']).to eq("Queued. Thank you.")
77
+ end
78
+
79
+ it 'sends a message builder message in test mode.' do
80
+ mb_obj = Mailgun::MessageBuilder.new()
81
+ mb_obj.from("sender@#{@domain}", {'first' => 'Sending', 'last' => 'User'})
82
+ mb_obj.add_recipient(:to, "recipient@#{@domain}", {'first' => 'Recipient', 'last' => 'User'})
83
+ mb_obj.subject("Message Builder Integration Test")
84
+ mb_obj.body_text("This is the text body.")
85
+ mb_obj.test_mode(true)
86
+
87
+ result = @mg_obj.send_message(@domain, mb_obj)
88
+
89
+ result.to_h!
90
+ expect(result.body).to include("message")
91
+ expect(result.body).to include("id")
92
+ end
93
+
94
+ it 'sends a custom MIME message in test mode.' do
95
+ mime_string = 'Delivered-To: mgbox01@gmail.com
96
+ Received: by luna.mailgun.net with HTTP; Tue, 26 Nov 2013 17:59:11 +0000
97
+ Mime-Version: 1.0
98
+ Content-Type: text/plain; charset="ascii"
99
+ Subject: Hello
100
+ From: Excited User <me@samples.mailgun.org>
101
+ To: sally@example.com
102
+ Message-Id: <20131126175911.25310.92289@samples.mailgun.org>
103
+ Content-Transfer-Encoding: 7bit
104
+ X-Mailgun-Sid: WyI2NTU4MSIsICJtZ2JveDAxQGdtYWlsLmNvbSIsICIxZmYiXQ==
105
+ Date: Tue, 26 Nov 2013 17:59:22 +0000
106
+ X-Mailgun-Drop-Message: yes
107
+ Sender: me@samples.mailgun.org
108
+
109
+ Testing some Mailgun awesomness!'
110
+
111
+ message_params = {:to => "sally@#{@domain}",
112
+ :message => mime_string}
113
+
114
+ result = @mg_obj.send_message(@domain, message_params)
115
+
116
+ result.to_h!
117
+ expect(result.body).to include("message")
118
+ expect(result.body).to include("id")
119
+ end
120
+ end
121
+
@@ -0,0 +1,38 @@
1
+ X-SBRS: 5.6
2
+ X-SenderGroup: WHITELIST
3
+ X-MailFlowPolicy: $TRUSTED
4
+ DKIM-Signature: a=rsa-sha256; v=1; c=relaxed/relaxed; d=trstx.com; q=dns/txt; s=mx;
5
+ t=1381182797; h=Mime-Version: Content-Type: Subject: From: To:
6
+ Message-Id: Date: Sender: Content-Transfer-Encoding;
7
+ bh=r6P1omjKL3m7gDuZC6dZEJU6trgWm1IRwAJb8h4wtfg=; b=UPFaFGiuDx2yZjCmiMEji0fIXvGMNwXUsuaX4Ss9p5EUkqE25eYjeJaJZ5w5FK+t0jsUPZqu
8
+ FIH6sftQv7GBEbSktY6sv7dgv5q2yVlY8YNG7CXvUZdWmvwfQVvfL9j1RHJo9H3QpXT9c8bZ
9
+ p9rpYmqZtZEz2ZesPj4kzUaB0lU=
10
+ DomainKey-Signature: a=rsa-sha1; c=nofws; d=trstx.com; s=mx; q=dns;
11
+ h=Mime-Version: Content-Type: Subject: From: To: Message-Id: Date:
12
+ Sender: Content-Transfer-Encoding;
13
+ b=QUYQf9OP16DphNAjeF95+G7V6DaqL4FA+m1sjIEWHdLzrGTQkiYTpzJdne3lzSypB0DwaG
14
+ AT9zOhjjN64DWFOkJD2Ce5t6vfHa/GC3FCUMq3xz/Big94g+kOciawkHyUhCrmPyh/D7kWx1
15
+ J75UIAdmE9XQ9bCSPhZ2MRaOv7b8c=
16
+ Received: by luna.mailgun.net with HTTP; Mon, 07 Oct 2013 21:53:16 +0000
17
+ Content-Type: text/plain; charset="ascii"
18
+ Subject: Test Subject
19
+ From: <joe@example.com>
20
+ To: <bob@sample.com>
21
+ Message-ID: <20131007215316.27052.7818@example.com>
22
+ X-Mailgun-Sid: WyI4MzY1OSIsICJ0cmF2aXMuc3dpZW50ZWtAcmFja3NwYWasdfewNvbSIsICJjZjQ4Il0=
23
+ Date: Mon, 7 Oct 2013 21:53:17 +0000
24
+ Sender: <joe@example.com>
25
+ Content-Transfer-Encoding: 7bit
26
+ MIME-Version: 1.0
27
+
28
+ --3a8c26e9f23c4ac193606295aa17fa6f
29
+ Content-Type: text/plain; charset="ascii"
30
+ Content-Transfer-Encoding: 7bit
31
+
32
+ Testing some Mailgun awesomness!
33
+ --3a8c26e9f23c4ac193606295aa17fa6f
34
+ Content-Type: text/html; charset="ascii"
35
+ Content-Transfer-Encoding: 7bit
36
+
37
+ <meta http-equiv="Content-Type" content="text/html; charset=us-ascii">Test
38
+ --3a8c26e9f23c4ac193606295aa17fa6f--
@@ -0,0 +1,74 @@
1
+ require 'spec_helper'
2
+ require 'mailgun'
3
+
4
+ vcr_opts = { :cassette_name => "routes" }
5
+
6
+ describe 'For the Routes endpoint', order: :defined, vcr: vcr_opts do
7
+ before(:all) do
8
+ @mg_obj = Mailgun::Client.new(APIKEY, APIHOST, APIVERSION, SSL)
9
+ @domain = TESTDOMAIN
10
+ @forward_to = "alice@#{@domain}"
11
+ @recipient = ".*@#{@domain}"
12
+ end
13
+
14
+ it 'creates a route' do
15
+ result = @mg_obj.post("routes", { priority: 10,
16
+ description: 'Integration Test Route',
17
+ expression: "match_recipient(\"#{@forward_to}\")",
18
+ action: "forward(\"#{@recipient}\")" })
19
+
20
+ result.to_h!
21
+ expect(result.body["message"]).to eq("Route has been created")
22
+ expect(result.body["route"]["description"]).to eq("Integration Test Route")
23
+ expect(result.body["route"]["actions"]).to include("forward(\"#{@recipient}\")")
24
+ expect(result.body["route"]["expression"]).to include("match_recipient(\"#{@forward_to}\")")
25
+ expect(result.body["route"]["priority"]).to eq(10)
26
+ end
27
+
28
+ it 'gets a list of all routes.' do
29
+ result = @mg_obj.get("routes", {:limit => 50})
30
+
31
+ result.to_h!
32
+ expect(result.body["total_count"]).to be > 0
33
+ end
34
+
35
+ it 'gets the route.' do
36
+ result = @mg_obj.get("routes", {:limit => 1})
37
+ route_id = result.to_h['items'].first['id']
38
+
39
+ result = @mg_obj.get("routes/#{route_id}")
40
+
41
+ result.to_h!
42
+ expect(result.body["route"]["description"]).to eq("Integration Test Route")
43
+ expect(result.body["route"]["actions"]).to include("forward(\"#{@recipient}\")")
44
+ expect(result.body["route"]["expression"]).to include("match_recipient(\"#{@forward_to}\")")
45
+ expect(result.body["route"]["priority"]).to eq(10)
46
+ end
47
+
48
+ it 'updates the route.' do
49
+ result = @mg_obj.get("routes", {:limit => 1})
50
+ route_id = result.to_h['items'].first['id']
51
+
52
+ result = @mg_obj.put("routes/#{route_id}", {:priority => 10,
53
+ :description => 'Integration Test Route Update',
54
+ :expression => "match_recipient(\"#{@forward_to}\")",
55
+ :action => "forward(\"#{@recipient}\")"})
56
+
57
+ result.to_h!
58
+ expect(result.body["message"]).to eq("Route has been updated")
59
+ expect(result.body["description"]).to eq("Integration Test Route Update")
60
+ expect(result.body["actions"]).to include("forward(\"#{@recipient}\")")
61
+ expect(result.body["expression"]).to include("match_recipient(\"#{@forward_to}\")")
62
+ expect(result.body["priority"]).to eq(10)
63
+ end
64
+
65
+ it 'removes a route' do
66
+ result = @mg_obj.get("routes", {:limit => 1})
67
+ route_id = result.to_h['items'].first['id']
68
+
69
+ @mg_obj.delete("routes/#{route_id}")
70
+
71
+ result.to_h!
72
+ end
73
+
74
+ end