wj-mailgun-ruby 1.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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