mail_manager 3.2.5 → 3.2.6
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.
- checksums.yaml +4 -4
- data/README.md +4 -1
- data/app/controllers/mail_manager/bounces_controller.rb +13 -1
- data/app/controllers/mail_manager/contacts_controller.rb +1 -2
- data/app/controllers/mail_manager/mailings_controller.rb +2 -4
- data/app/controllers/mail_manager/subscriptions_controller.rb +0 -2
- data/app/models/mail_manager/bounce.rb +9 -7
- data/app/models/mail_manager/contactable_registry.rb +2 -1
- data/app/models/mail_manager/mailable.rb +11 -9
- data/app/models/mail_manager/mailer.rb +13 -5
- data/app/models/mail_manager/mailing.rb +13 -25
- data/app/models/mail_manager/mailing_list.rb +17 -0
- data/app/models/mail_manager/message.rb +12 -1
- data/app/models/mail_manager/subscription.rb +12 -0
- data/app/views/mail_manager/bounces/_email_parts.html.erb +3 -1
- data/app/views/mail_manager/bounces/index.html.erb +1 -1
- data/app/views/mail_manager/bounces/show.html.erb +2 -2
- data/app/views/mail_manager/contacts/_form.html.erb +1 -1
- data/app/views/mail_manager/mailings/index.html.erb +3 -3
- data/app/views/mail_manager/messages/index.html.erb +1 -1
- data/app/views/mail_manager/subscriptions/_subscriptions.html.erb +6 -3
- data/config/routes.rb +2 -2
- data/lib/delayed/status.rb +5 -2
- data/lib/delayed/status_job.rb +5 -21
- data/lib/delayed_overrides/job.rb +6 -0
- data/lib/mail_manager/engine.rb +23 -1
- data/lib/mail_manager/version.rb +1 -1
- data/mail_manager.gemspec +10 -3
- data/spec/test_app/Procfile +5 -3
- data/spec/test_app/config/mail_manager.yml +3 -0
- data/spec/test_app/features/contact_management.feature +7 -0
- data/spec/test_app/features/message_management.feature +8 -1
- data/spec/test_app/features/step_definitions/webrat_steps.rb +6 -2
- data/spec/test_app/lib/debugging.rb +2 -2
- data/spec/test_app/script/full_suite +7 -5
- data/spec/test_app/spec/controllers/mail_manager/bounces_controller_spec.rb +39 -0
- data/spec/test_app/spec/controllers/mail_manager/mailings_controller_spec.rb +12 -0
- data/spec/test_app/spec/models/mail_manager/bounce_spec.rb +31 -0
- data/spec/test_app/spec/models/mail_manager/engine_spec.rb +25 -0
- data/spec/test_app/spec/models/mail_manager/mailing_list_spec.rb +39 -0
- data/spec/test_app/spec/models/mail_manager/mailing_spec.rb +43 -1
- data/spec/test_app/spec/models/mail_manager/message_spec.rb +19 -0
- data/spec/test_app/spec/models/mail_manager/subscription_spec.rb +17 -0
- data/spec/test_app/spec/support/files/bounce-400.txt +73 -0
- data/spec/test_app/spec/support/files/bounce-500.txt +75 -0
- data/spec/test_app/spec/support/files/bounce-invalid-address.txt +73 -0
- data/spec/test_app/spec/support/files/bounce-invalid.txt +113 -0
- data/spec/test_app/spec/support/files/bounce-invalid2.txt +29 -0
- data/spec/test_app/spec/support/files/bounce-invalid3.txt +29 -0
- data/spec/test_app/spec/support/files/bounce-mail-box-full.txt +1178 -0
- data/spec/test_app/spec/support/files/bounce-over-quota.txt +1173 -0
- data/spec/test_app/spec/support/files/bounce-smtp-timeout.txt +73 -0
- data/spec/test_app/spec/support/files/bounce-unknown_domain.txt +73 -0
- data/spec/test_app/spec/support/files/mail_manager_empty_table_prefix.yml +85 -0
- data/spec/test_app/spec/support/files/mail_manager_use_generic_mailables.yml +86 -0
- metadata +36 -3
data/lib/delayed/status_job.rb
CHANGED
@@ -1,23 +1,7 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
# def repeats_every
|
8
|
-
# 1.minutes
|
9
|
-
# end
|
10
|
-
|
11
|
-
# # This is a good hook if you need to report job processing errors in additional or different ways
|
12
|
-
# def log_exception(error)
|
13
|
-
# #don't send mail for this currently.. we'll do something smart laters
|
14
|
-
# #Delayed::Mailer.deliver_exception_notification(self,error,notify_email) unless notify_email.blank?
|
15
|
-
# logger.error "* [JOB] #{name}(#{id}) failed with #{error.class.name}: #{error.message} - #{attempts} failed attempts"
|
16
|
-
# end
|
17
|
-
# end
|
18
|
-
# end
|
19
|
-
class ::Delayed::StatusJob < ::Delayed::Job
|
20
|
-
def perform
|
21
|
-
::Delayed::StatusJob.enqueue ::Delayed::StatusJob.new, run_at: 1.minute.from_now
|
1
|
+
module Delayed
|
2
|
+
class StatusJob < Struct.new(:next_run)
|
3
|
+
def perform
|
4
|
+
Job.enqueue StatusJob.new, run_at: (next_run || 1.minute.from_now)
|
5
|
+
end
|
22
6
|
end
|
23
7
|
end
|
data/lib/mail_manager/engine.rb
CHANGED
@@ -48,6 +48,8 @@ module MailManager
|
|
48
48
|
mattr_accessor :authorized_roles
|
49
49
|
# roles_method: the method that your "current_user" object defines its role names(returns a list of strings)
|
50
50
|
mattr_accessor :roles_method
|
51
|
+
# sets whether the generic mailable is registered as available
|
52
|
+
mattr_accessor :register_generic_mailable
|
51
53
|
|
52
54
|
# The following 2 might be deprecated soon
|
53
55
|
# show_title: can be used in templates/layouts to see whether you should show a title
|
@@ -116,7 +118,12 @@ module MailManager
|
|
116
118
|
MailManager::Bounce,
|
117
119
|
MailManager::Message
|
118
120
|
]
|
121
|
+
can [:send_test, :test, :schedule, :cancel], MailManager::Mailing
|
122
|
+
can [:dismiss, :fail_address], MailManager::Bounce
|
123
|
+
can [:delete, :undelete], MailManager::Contact
|
119
124
|
end
|
125
|
+
can [:subscribe, :double_opt_in, :thank_you], MailManager::Contact
|
126
|
+
can [:unsubscribe, :unsubscribe_by_email_address], MailManager::Subscription
|
120
127
|
EOT
|
121
128
|
end
|
122
129
|
|
@@ -131,6 +138,15 @@ module MailManager
|
|
131
138
|
File.join(PLUGIN_ROOT,'assets')
|
132
139
|
end
|
133
140
|
|
141
|
+
def self.public_path?(path)
|
142
|
+
[
|
143
|
+
MailManager.subscribe_path,
|
144
|
+
MailManager.unsubscribe_path,
|
145
|
+
MailManager.double_opt_in_path,
|
146
|
+
MailManager.subscribe_thank_you_path
|
147
|
+
].detect{|public_path| public_path =~ /#{path}/i}.present?
|
148
|
+
end
|
149
|
+
|
134
150
|
# sets up your MailManager.blah configuration options from
|
135
151
|
# config/mail_manager.yml and can override those with
|
136
152
|
# config/mail_manager.local.yml for development environments
|
@@ -141,7 +157,11 @@ module MailManager
|
|
141
157
|
MailManager.site_url ||= conf.site_url || default_site_url rescue default_site_url
|
142
158
|
MailManager.dont_include_images_domains ||= conf.dont_include_images_domains || [] rescue []
|
143
159
|
MailManager.sleep_time_between_messages ||= conf.sleep_time_between_messages || 0.3 rescue 0.3
|
144
|
-
|
160
|
+
if conf.params.has_key?('table_prefix')
|
161
|
+
MailManager.table_prefix ||= conf.table_prefix.to_s # allow empty
|
162
|
+
else
|
163
|
+
MailManager.table_prefix ||= 'mail_manager_'
|
164
|
+
end
|
145
165
|
MailManager.default_from_email_address ||= conf.default_from_email_address rescue nil
|
146
166
|
MailManager.signup_email_address ||= conf.signup_email_address rescue nil
|
147
167
|
MailManager.bounce ||= conf.bounce || {} rescue {}
|
@@ -158,6 +178,7 @@ module MailManager
|
|
158
178
|
MailManager.requires_authentication ||= conf.requires_authentication || false rescue false
|
159
179
|
MailManager.authorized_roles ||= conf.authorized_roles || [] rescue []
|
160
180
|
MailManager.roles_method ||= conf.roles_method || nil rescue nil
|
181
|
+
MailManager.register_generic_mailable ||= conf.register_generic_mailable || false rescue false
|
161
182
|
MailManager.exception_notification = {}
|
162
183
|
MailManager.exception_notification[:to_addresses] ||= conf.exception_notification['to_addresses'] || [] rescue []
|
163
184
|
MailManager.exception_notification[:from_address] ||= conf.exception_notification['from_address'] || nil rescue nil
|
@@ -178,6 +199,7 @@ MailManager::Engine.config.to_prepare do
|
|
178
199
|
rescue LoadError => le
|
179
200
|
end
|
180
201
|
load File.join(MailManager::PLUGIN_ROOT,'lib','delayed_overrides','worker.rb')
|
202
|
+
load File.join(MailManager::PLUGIN_ROOT,'lib','delayed_overrides','job.rb')
|
181
203
|
end
|
182
204
|
|
183
205
|
require 'will_paginate'
|
data/lib/mail_manager/version.rb
CHANGED
data/mail_manager.gemspec
CHANGED
@@ -6,12 +6,19 @@ require 'mail_manager/version'
|
|
6
6
|
Gem::Specification.new do |gem|
|
7
7
|
gem.name = "mail_manager"
|
8
8
|
gem.version = MailManager::VERSION
|
9
|
-
gem.authors = ["Lone Star Internet"]
|
9
|
+
gem.authors = ["Lone Star Internet", "Christopher Hauboldt"]
|
10
10
|
gem.email = ["biz@lone-star.net", 'chauboldt@lone-star.net']
|
11
11
|
gem.licenses = ["MIT"]
|
12
12
|
gem.description = %q{Manages the delivery of mailable items. Handles contacts, mailing lists, bounces, unsubscribe, opt-in, etc. Also available with a newsletter manager (including newsletter designs and elements management, wysiwyg newsletter editor, and newsletter archive) as well as user access control as part of the iReach gem.}
|
13
13
|
gem.summary = %q{Mailing list management tool}
|
14
14
|
gem.homepage = "http://ireachnews.com"
|
15
|
+
gem.post_install_message = <<-EOT
|
16
|
+
#** Mail Manager 3.2.6 messages **********************
|
17
|
+
#** Required Actions for every upgrade **
|
18
|
+
rake mail_manager:upgrade # this adds any new migrations and migrates your DB ...
|
19
|
+
#** NOTE! you should try this in development before pushing to your production site
|
20
|
+
#*END Mail Manager messages ********************
|
21
|
+
EOT
|
15
22
|
|
16
23
|
gem.add_dependency "rails", "~>3.2"
|
17
24
|
gem.add_dependency 'jquery-rails', "~>3.1"
|
@@ -22,8 +29,8 @@ Gem::Specification.new do |gem|
|
|
22
29
|
gem.add_dependency "mini_magick", "~>4.1"
|
23
30
|
gem.add_dependency "will_paginate", "~>3.0"
|
24
31
|
gem.add_dependency 'unix_utils', "~>0.0"
|
25
|
-
gem.add_dependency "delayed_job",
|
26
|
-
gem.add_dependency 'delayed_job_active_record',
|
32
|
+
gem.add_dependency "delayed_job", '~>4'
|
33
|
+
gem.add_dependency 'delayed_job_active_record', '~>4'
|
27
34
|
gem.add_dependency "dynamic_form", "~>1.1"
|
28
35
|
gem.add_dependency 'cancancan', "~>1.9"
|
29
36
|
|
data/spec/test_app/Procfile
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
-
post_office:
|
2
|
-
|
3
|
-
|
1
|
+
post_office: bundle exec script/post_office run
|
2
|
+
post_office_test: RAILS_ENV=test bundle exec script/post_office run
|
3
|
+
with_lock: script/with_lock run
|
4
|
+
delayed_job: bundle exec script/delayed_job run
|
5
|
+
web: spring rails s WEBrick
|
@@ -64,6 +64,7 @@ common:
|
|
64
64
|
sleep_time_between_messages: 0.3
|
65
65
|
path_prefix: /admin
|
66
66
|
table_prefix: mail_manager_
|
67
|
+
register_generic_mailable: false
|
67
68
|
default_from_email_address: chrisboy <chrisboy@lvh.me>
|
68
69
|
secret: 7a3906324erwr6254e85e4bdb80592001a
|
69
70
|
bounce:
|
@@ -79,7 +80,9 @@ development:
|
|
79
80
|
site_url: http://example.dev
|
80
81
|
secret: !binary |-
|
81
82
|
ZDgxNDViNzJhOWExMDI1NmU1OTkwZDEzYTgyODcy
|
83
|
+
register_generic_mailable: true
|
82
84
|
test:
|
83
85
|
site_url: http://mail-manager.lvh.me:4460
|
84
86
|
secret: !binary |-
|
85
87
|
ZjU0MDU2YWU4M2Q0MjU4MTM2ZWIwYzM2ZTNjMDRj
|
88
|
+
register_generic_mailable: true
|
@@ -74,6 +74,13 @@ Feature: Manage Contacts
|
|
74
74
|
And I press "Submit"
|
75
75
|
Then contact "Bobo Clown" should exist with email_address "bobo@example.com"
|
76
76
|
And contact "Bobo Clown" should be subscribed to "Peeps" with the "active" status
|
77
|
+
When I follow "Edit"
|
78
|
+
And I check "Others"
|
79
|
+
And I uncheck "Peeps"
|
80
|
+
And I press "Submit"
|
81
|
+
Then contact "Bobo Clown" should exist with email_address "bobo@example.com"
|
82
|
+
And contact "Bobo Clown" should be subscribed to "Others" with the "active" status
|
83
|
+
And contact "Bobo Clown" should be subscribed to "Peeps" with the "admin_unsubscribed" status
|
77
84
|
|
78
85
|
Scenario: Many contacts existing will show pagination
|
79
86
|
Given 50 contacts exist
|
@@ -17,6 +17,13 @@ Feature: view messages for mailings
|
|
17
17
|
Scenario:
|
18
18
|
When I go to the mailings page
|
19
19
|
And I follow "Messages"
|
20
|
-
|
20
|
+
Then I should see "bobo@example.com"
|
21
|
+
When I select "Pending" from "Status"
|
22
|
+
Then I should not see "bobo@example.com"
|
23
|
+
When I select "Sent" from "Status"
|
24
|
+
Then I should see "bobo@example.com"
|
25
|
+
When I select "Failed" from "Status"
|
26
|
+
Then I should not see "bobo@example.com"
|
27
|
+
When I select "Any Status" from "Status"
|
21
28
|
Then I should see "bobo@example.com"
|
22
29
|
|
@@ -95,11 +95,15 @@ When /^I attach the file at "([^\"]*)" to "([^\"]*)"$/ do |path, field|
|
|
95
95
|
end
|
96
96
|
|
97
97
|
Then /^I should see "([^\"]*)"$/ do |text|
|
98
|
-
|
98
|
+
Debugging::wait_until_success(5) do
|
99
|
+
expect(page.body).to have_content(text)
|
100
|
+
end
|
99
101
|
end
|
100
102
|
|
101
103
|
Then /^I should not see "([^\"]*)"$/ do |text|
|
102
|
-
|
104
|
+
Debugging::wait_until_success(5) do
|
105
|
+
expect(page.body).not_to have_content(text)
|
106
|
+
end
|
103
107
|
end
|
104
108
|
|
105
109
|
Then /^the "([^\"]*)" field should contain "([^\"]*)"$/ do |field, value|
|
@@ -11,7 +11,7 @@ module ::Debugging
|
|
11
11
|
end
|
12
12
|
rescue Exception, StandardError, RuntimeError => te
|
13
13
|
Rails.logger.warn "Uncaught/Unpried exception: #{te.message} #{te.backtrace.join("\n")}"
|
14
|
-
raise
|
14
|
+
raise te
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
@@ -52,7 +52,7 @@ module ::Debugging
|
|
52
52
|
Rails.logger.warn "Waiting for something.. trying: #{Kernel.caller[0..5].join("\n")}" if log
|
53
53
|
yield
|
54
54
|
true
|
55
|
-
rescue => e
|
55
|
+
rescue Exception, StandardError, RuntimeError => e
|
56
56
|
Rails.logger.warn "Waiting for something.. failure: #{e.message} #{e.backtrace.join}"
|
57
57
|
false
|
58
58
|
end
|
@@ -13,14 +13,14 @@ export CUC_SQLITE_SUCCESS=0
|
|
13
13
|
DBADAPTER=sqlite bundle exec rspec spec && export SQLITE_SUCCESS=1
|
14
14
|
DBADAPTER=sqlite bundle exec cucumber features && export CUC_SQLITE_SUCCESS=1
|
15
15
|
|
16
|
-
if [ $POSTGRES
|
16
|
+
if [ "$POSTGRES" = "1" ]; then
|
17
17
|
#RUN FOR Postgresql
|
18
18
|
cp config/database.postgres.local.yml config/database.yml
|
19
19
|
|
20
20
|
bundle exec rake db:schema:load
|
21
21
|
|
22
22
|
export PGSQL_SUCCESS=0
|
23
|
-
export
|
23
|
+
export CUC_PGSQL_SUCCESS=0
|
24
24
|
|
25
25
|
DBADAPTER=pg bundle exec rspec spec && export PGSQL_SUCCESS=1
|
26
26
|
DBADAPTER=pg bundle exec cucumber features && export CUC_PGSQL_SUCCESS=1
|
@@ -32,7 +32,7 @@ cp config/database.mysql.local.yml config/database.yml
|
|
32
32
|
bundle exec rake db:schema:load
|
33
33
|
|
34
34
|
export MYSQL_SUCCESS=0
|
35
|
-
export
|
35
|
+
export CUC_MYSQL_SUCCESS=0
|
36
36
|
|
37
37
|
DBADAPTER=mysql bundle exec rspec spec && export MYSQL_SUCCESS=1
|
38
38
|
DBADAPTER=mysql bundle exec cucumber features && export CUC_MYSQL_SUCCESS=1
|
@@ -43,8 +43,10 @@ DBADAPTER=mysql bundle exec cucumber features && export CUC_MYSQL_SUCCESS=1
|
|
43
43
|
unset RAILS_ENV
|
44
44
|
|
45
45
|
if [ $MYSQL_SUCCESS -eq 0 ] ; then echo "Rspec Mysql Failed" && exit 1; fi
|
46
|
-
if [ $PGSQL_SUCCESS -eq 0 ] ; then echo "Rspec Pgsql Failed" && exit 1; fi
|
47
46
|
if [ $SQLITE_SUCCESS -eq 0 ] ; then echo "Rspec SQLite Failed" && exit 1; fi
|
48
47
|
if [ $CUC_MYSQL_SUCCESS -eq 0 ] ; then echo "Cucumber Mysql Failed" && exit 1; fi
|
49
|
-
if [ $CUC_PGSQL_SUCCESS -eq 0 ] ; then echo "Cucumber Pgsql Failed" && exit 1; fi
|
50
48
|
if [ $CUC_SQLITE_SUCCESS -eq 0 ] ; then echo "Cucumber SQLite Failed" && exit 1; fi
|
49
|
+
if [ "$POSTGRES" = "1" ] ; then
|
50
|
+
if [ $PGSQL_SUCCESS -eq 0 ] ; then echo "Rspec Pgsql Failed" && exit 1; fi
|
51
|
+
if [ $CUC_PGSQL_SUCCESS -eq 0 ] ; then echo "Cucumber Pgsql Failed" && exit 1; fi
|
52
|
+
fi
|
@@ -45,6 +45,15 @@ RSpec.describe MailManager::BouncesController, :type => :controller do
|
|
45
45
|
expect(assigns(:bounces)).to eq([bounce])
|
46
46
|
expect(response.body).to match /Listing Bounces/
|
47
47
|
end
|
48
|
+
it "orders bounces create date desc" do
|
49
|
+
Timecop.travel 2.hours.ago
|
50
|
+
bounce = MailManager::Bounce.create! valid_attributes
|
51
|
+
Timecop.return
|
52
|
+
bounce_new = MailManager::Bounce.create! valid_attributes
|
53
|
+
get :index, {}, valid_session
|
54
|
+
expect(assigns(:bounces)).to eq([bounce_new,bounce])
|
55
|
+
expect(response.body).to match /Listing Bounces/
|
56
|
+
end
|
48
57
|
end
|
49
58
|
|
50
59
|
describe "GET #show" do
|
@@ -56,4 +65,34 @@ RSpec.describe MailManager::BouncesController, :type => :controller do
|
|
56
65
|
end
|
57
66
|
end
|
58
67
|
|
68
|
+
describe "PUT #dismiss" do
|
69
|
+
it "dismisses a bounce from needing attention" do
|
70
|
+
bounce = FactoryGirl.create(:bounce, status: 'needs_manual_intervention')
|
71
|
+
put :dismiss, {id: bounce.id}, valid_session
|
72
|
+
expect(assigns(:bounce)).to eq(bounce)
|
73
|
+
bounce.reload
|
74
|
+
expect(bounce.status).to eq 'dismissed'
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
describe "PUT #dismiss" do
|
79
|
+
it "fails a bounce setting it to 'removed' and failing its email addresses from active subscriptions" do
|
80
|
+
contact = FactoryGirl.create(:contact)
|
81
|
+
list1 = FactoryGirl.create(:mailing_list)
|
82
|
+
list2 = FactoryGirl.create(:mailing_list)
|
83
|
+
sub1 = contact.subscribe(list1)
|
84
|
+
message = FactoryGirl.create(:message, contact_id: contact.id)
|
85
|
+
bounce = FactoryGirl.create(:bounce, status: 'needs_manual_intervention',
|
86
|
+
message_id: message.id
|
87
|
+
)
|
88
|
+
put :fail_address, {id: bounce.id}, valid_session
|
89
|
+
expect(assigns(:bounce)).to eq(bounce)
|
90
|
+
bounce.reload
|
91
|
+
sub1.reload
|
92
|
+
expect(bounce.message.status).to eq('failed')
|
93
|
+
expect(sub1.status).to eq('failed_address')
|
94
|
+
expect(MailManager::Subscription.count).to eq 1
|
95
|
+
expect(bounce.status).to eq 'removed'
|
96
|
+
end
|
97
|
+
end
|
59
98
|
end
|
@@ -81,6 +81,18 @@ RSpec.describe MailManager::MailingsController, :type => :controller do
|
|
81
81
|
expect(assigns(:mailing)).to be_a_new(MailManager::Mailing)
|
82
82
|
expect(response.body).to have_content("New Mailing")
|
83
83
|
end
|
84
|
+
it "assigns mailables in created_at desc order" do
|
85
|
+
Timecop.travel 2.hours.ago
|
86
|
+
mailable = FactoryGirl.create(:mailable)
|
87
|
+
Timecop.return
|
88
|
+
mailable_new = FactoryGirl.create(:mailable)
|
89
|
+
get :new, {}, valid_session
|
90
|
+
expect(assigns(:mailing)).to be_a_new(MailManager::Mailing)
|
91
|
+
expect(assigns(:mailables_for_select)).to eq([mailable_new,mailable].map{|m|
|
92
|
+
[m.name, "#{m.class.name}_#{m.id}"]
|
93
|
+
})
|
94
|
+
expect(response.body).to have_content("New Mailing")
|
95
|
+
end
|
84
96
|
end
|
85
97
|
|
86
98
|
describe "GET #edit" do
|
@@ -30,6 +30,37 @@ RSpec.describe MailManager::Bounce do
|
|
30
30
|
)
|
31
31
|
Delayed::Worker.delay_jobs = false
|
32
32
|
end
|
33
|
+
|
34
|
+
it "deferred's 400's" do
|
35
|
+
bounce = MailManager::Bounce.create(
|
36
|
+
bounce_message: File.read('spec/support/files/bounce-400.txt')
|
37
|
+
)
|
38
|
+
bounce.process
|
39
|
+
expect(bounce.status).to eq 'deferred'
|
40
|
+
end
|
41
|
+
|
42
|
+
it "removed's 500's and 'failed_address's associated active subscriptions" do
|
43
|
+
contact = FactoryGirl.create(:contact)
|
44
|
+
mailing_list = FactoryGirl.create(:mailing_list)
|
45
|
+
mailing_list2 = FactoryGirl.create(:mailing_list)
|
46
|
+
sub1=contact.subscribe(mailing_list)
|
47
|
+
mailing = FactoryGirl.create(:mailing)
|
48
|
+
message = FactoryGirl.create(:message,
|
49
|
+
mailing_id: mailing.id,
|
50
|
+
contact_id: contact.id
|
51
|
+
)
|
52
|
+
bounce_guid = '30-28-11376-fa351cf35e4012d37d8c13df8735fd13edfed563'
|
53
|
+
|
54
|
+
bounce = MailManager::Bounce.create(
|
55
|
+
bounce_message: File.read('spec/support/files/bounce-500.txt').gsub(
|
56
|
+
/#{bounce_guid}/,message.guid)
|
57
|
+
)
|
58
|
+
bounce.process
|
59
|
+
sub1.reload
|
60
|
+
expect(bounce.status).to eq 'removed'
|
61
|
+
expect(sub1.status).to eq 'failed_address'
|
62
|
+
expect(MailManager::Subscription.count).to eq 1
|
63
|
+
end
|
33
64
|
end
|
34
65
|
def send_bounce(filename)
|
35
66
|
mail = Mail.new(File.read(File.join(Rails.root,'spec','support','files',filename)))
|
@@ -76,4 +76,29 @@ RSpec.describe MailManager::Engine do
|
|
76
76
|
end
|
77
77
|
end
|
78
78
|
end
|
79
|
+
it "can set table prefix to empty" do
|
80
|
+
prefix = MailManager.table_prefix
|
81
|
+
MailManager.table_prefix = nil
|
82
|
+
conf = MailManager::Config.new(
|
83
|
+
'spec/support/files/mail_manager_empty_table_prefix.yml')
|
84
|
+
MailManager.initialize_with_config(conf)
|
85
|
+
expect(MailManager.table_prefix).to eq ''
|
86
|
+
MailManager.table_prefix = prefix
|
87
|
+
end
|
88
|
+
context "with respect to the mailables object" do
|
89
|
+
it "can turn on its registration" do
|
90
|
+
MailManager.register_generic_mailable = nil
|
91
|
+
conf = MailManager::Config.new(
|
92
|
+
'spec/support/files/mail_manager_use_generic_mailables.yml')
|
93
|
+
MailManager.initialize_with_config(conf)
|
94
|
+
expect(MailManager.register_generic_mailable).to be true
|
95
|
+
end
|
96
|
+
it "can turn off its registration(default behaviour in mail_manager.yml)" do
|
97
|
+
MailManager.register_generic_mailable = nil
|
98
|
+
conf = MailManager::Config.new('config/mail_manager.yml')
|
99
|
+
MailManager.initialize_with_config(conf)
|
100
|
+
expect(MailManager.register_generic_mailable).to be false
|
101
|
+
MailManager.register_generic_mailable = true
|
102
|
+
end
|
103
|
+
end
|
79
104
|
end
|
@@ -12,4 +12,43 @@ RSpec.describe MailManager::MailingList do
|
|
12
12
|
expect(@mailing_list.valid?).to eq false
|
13
13
|
end
|
14
14
|
end
|
15
|
+
describe "self::active_email_addresses_contact_ids_subscription_ids_for_mailing_list_ids" do
|
16
|
+
it "returns all active email addresses, contact_ids, subscription_ids for given mailing list ids" do
|
17
|
+
contact1 = FactoryGirl.create(:contact)
|
18
|
+
contact2 = FactoryGirl.create(:contact)
|
19
|
+
contact3 = FactoryGirl.create(:contact)
|
20
|
+
contact4 = FactoryGirl.create(:contact)
|
21
|
+
list1 = FactoryGirl.create(:mailing_list)
|
22
|
+
sub1 = contact1.subscribe(list1)
|
23
|
+
sub2 = contact2.subscribe(list1)
|
24
|
+
list2 = FactoryGirl.create(:mailing_list)
|
25
|
+
sub3 = contact2.subscribe(list2)
|
26
|
+
sub4 = contact3.subscribe(list2)
|
27
|
+
list3 = FactoryGirl.create(:mailing_list)
|
28
|
+
sub5 = contact3.subscribe(list3)
|
29
|
+
sub6 = contact4.subscribe(list3)
|
30
|
+
expect(MailManager::MailingList.
|
31
|
+
active_email_addresses_contact_ids_subscription_ids_for_mailing_list_ids(
|
32
|
+
[list1.id, list2.id]).sort).to eq (
|
33
|
+
{
|
34
|
+
contact1.email_address => {
|
35
|
+
contact_id: contact1.id,
|
36
|
+
subscription_id: sub1.id
|
37
|
+
},
|
38
|
+
contact2.email_address => {
|
39
|
+
contact_id: contact2.id,
|
40
|
+
subscription_id: sub2.id
|
41
|
+
},
|
42
|
+
contact2.email_address => {
|
43
|
+
contact_id: contact2.id,
|
44
|
+
subscription_id: sub3.id
|
45
|
+
},
|
46
|
+
contact3.email_address => {
|
47
|
+
contact_id: contact3.id,
|
48
|
+
subscription_id: sub4.id
|
49
|
+
}
|
50
|
+
}.sort
|
51
|
+
)
|
52
|
+
end
|
53
|
+
end
|
15
54
|
end
|