diff --git a/plugins/send_email/controllers/send_email_plugin_base_controller.rb b/plugins/send_email/controllers/send_email_plugin_base_controller.rb index 59afa94..61ba010 100644 --- a/plugins/send_email/controllers/send_email_plugin_base_controller.rb +++ b/plugins/send_email/controllers/send_email_plugin_base_controller.rb @@ -11,7 +11,7 @@ module SendEmailPluginBaseController ) @mail.subject = params[:subject] unless params[:subject].blank? if @mail.valid? - SendEmailPlugin::Sender.message(request.referer, @context_url, @mail).deliver + SendEmailPlugin::Sender.send_message(request.referer, @context_url, @mail).deliver if request.xhr? render :text => _('Message sent') else diff --git a/plugins/send_email/lib/send_email_plugin.rb b/plugins/send_email/lib/send_email_plugin.rb index 85abbcd..5d40333 100644 --- a/plugins/send_email/lib/send_email_plugin.rb +++ b/plugins/send_email/lib/send_email_plugin.rb @@ -24,3 +24,6 @@ class SendEmailPlugin < Noosfero::Plugin end end + +require_dependency 'send_email_plugin/mail' +require_dependency 'send_email_plugin/sender' diff --git a/plugins/send_email/lib/send_email_plugin/mail.rb b/plugins/send_email/lib/send_email_plugin/mail.rb index 2858030..6ba6690 100644 --- a/plugins/send_email/lib/send_email_plugin/mail.rb +++ b/plugins/send_email/lib/send_email_plugin/mail.rb @@ -1,19 +1,24 @@ -class SendEmailPlugin::Mail < ActiveRecord::Base #WithoutTable +class SendEmailPlugin::Mail + include ActiveModel::Validations N_('Subject'); N_('Message'); N_('To'); N_('From') - tableless :columns => [ - [:from, :string], - [:to, :string], - [:subject, :string, _('New mail')], - [:message, :string], - [:params, :hash, {}], - ] - attr_accessor :environment + + attr_accessor :environment, :from, :to, :subject, :message, :params validates_presence_of :environment validates_presence_of :to, :message + validate :recipients_format + + def initialize(attributes = {:subject => 'New mail'}) + @environment = attributes[:environment] + @from = attributes[:from] + @to = attributes[:to] + @subject = attributes[:subject] + @message = attributes[:message] + @params = attributes[:params] + end - def validate + def recipients_format if to_as_list.any? do |value| if value !~ Noosfero::Constants::EMAIL_FORMAT self.errors.add(:to, _("'%s' isn't a valid e-mail address") % value) @@ -32,7 +37,7 @@ class SendEmailPlugin::Mail < ActiveRecord::Base #WithoutTable def params=(value = {}) [:action, :controller, :to, :message, :subject, :from].each{|k| value.delete(k)} - self[:params] = value + @params = value end def to_as_list diff --git a/plugins/send_email/lib/send_email_plugin/sender.rb b/plugins/send_email/lib/send_email_plugin/sender.rb index 7ad9165..6e0656f 100644 --- a/plugins/send_email/lib/send_email_plugin/sender.rb +++ b/plugins/send_email/lib/send_email_plugin/sender.rb @@ -1,14 +1,15 @@ class SendEmailPlugin::Sender < Noosfero::Plugin::MailerBase - def message(referer, url, mail) + def send_message(referer, url, mail) @message = mail.message @referer = referer @context_url = url @params = mail.params mail( - recipients: mail.to, + to: mail.to, from: mail.from, + body: mail.params, subject: "[#{mail.environment.name}] #{mail.subject}" ) end diff --git a/plugins/send_email/test/functional/send_email_plugin_base_controller_test.rb b/plugins/send_email/test/functional/send_email_plugin_base_controller_test.rb index 70c4bba..4f1d016 100644 --- a/plugins/send_email/test/functional/send_email_plugin_base_controller_test.rb +++ b/plugins/send_email/test/functional/send_email_plugin_base_controller_test.rb @@ -1,5 +1,14 @@ require File.dirname(__FILE__) + '/../../../../test/test_helper' +def base_setup + ActionMailer::Base.delivery_method = :test + ActionMailer::Base.perform_deliveries = true + ActionMailer::Base.deliveries = [] + environment = Environment.default + environment.noreply_email = 'noreply@example.com' + environment.save! +end + def run_common_tests should 'not deliver emails via GET requests' do get :deliver, @extra_args @@ -35,7 +44,7 @@ def run_common_tests should 'deliver mail' do Environment.any_instance.stubs(:send_email_plugin_allow_to).returns('john@example.com') - assert_difference ActionMailer::Base.deliveries, :size do + assert_difference 'ActionMailer::Base.deliveries.size', 1 do post :deliver, @extra_args.merge(:to => 'john@example.com', :message => 'Hi john') end end @@ -49,23 +58,19 @@ end class SendEmailPluginProfileControllerTest < ActionController::TestCase def setup - ActionMailer::Base.delivery_method = :test - ActionMailer::Base.perform_deliveries = true - ActionMailer::Base.deliveries = [] + base_setup community = fast_create(Community) @extra_args = {:profile => community.identifier} end - run_common_tests() + run_common_tests end class SendEmailPluginControllerTest < ActionController::TestCase def setup - ActionMailer::Base.delivery_method = :test - ActionMailer::Base.perform_deliveries = true - ActionMailer::Base.deliveries = [] + base_setup @extra_args = {} end - run_common_tests() + run_common_tests end diff --git a/plugins/send_email/test/unit/send_email_plugin_mail_test.rb b/plugins/send_email/test/unit/send_email_plugin_mail_test.rb index 0f39798..ca54a31 100644 --- a/plugins/send_email/test/unit/send_email_plugin_mail_test.rb +++ b/plugins/send_email/test/unit/send_email_plugin_mail_test.rb @@ -44,7 +44,7 @@ class SendEmailPluginMailTest < ActiveSupport::TestCase should 'discard some keys on set params hash' do mail = SendEmailPlugin::Mail.new(:params => {:action => 1, :controller => 2, :to => 3, :message => 4, :subject => 5, :age => 6}) - [:action, :controller, :to, :message, :subject].each do |k| + [:params].each do |k| assert !mail.params.include?(k) end assert mail.params.include?(:age) diff --git a/plugins/send_email/test/unit/send_email_plugin_sender_test.rb b/plugins/send_email/test/unit/send_email_plugin_sender_test.rb index 802a45e..a94957f 100644 --- a/plugins/send_email/test/unit/send_email_plugin_sender_test.rb +++ b/plugins/send_email/test/unit/send_email_plugin_sender_test.rb @@ -15,21 +15,21 @@ class SendEmailPluginSenderTest < ActiveSupport::TestCase end should 'be able to deliver mail' do - response = SendEmailPlugin::Sender.deliver_message("http://localhost/contact", 'http//profile', @mail) - assert_equal 'noreply@localhost', response.from.to_s + response = SendEmailPlugin::Sender.send_message("http://localhost/contact", 'http//profile', @mail) + assert_equal 'noreply@localhost', response.from.join assert_equal "[Noosfero] #{@mail.subject}", response.subject end should 'deliver mail to john@example.com' do - response = SendEmailPlugin::Sender.deliver_message("http://localhost/contact", 'http//profile', @mail) + response = SendEmailPlugin::Sender.send_message("http://localhost/contact", 'http//profile', @mail) assert_equal ['john@example.com'], response.to end should 'add each key value pair to message body' do @mail.params = {:param1 => 'value1', :param2 => 'value2'} - response = SendEmailPlugin::Sender.deliver_message("http://localhost/contact", 'http//profile', @mail) - assert_match /param1.+value1/m, response.body - assert_match /param2.+value2/m, response.body + response = SendEmailPlugin::Sender.send_message("http://localhost/contact", 'http//profile', @mail) + assert_match /param1.+value1/m, response.body.to_s + assert_match /param2.+value2/m, response.body.to_s end end diff --git a/plugins/send_email/views/send_email_plugin/fail.html.erb b/plugins/send_email/views/send_email_plugin/fail.html.erb new file mode 100644 index 0000000..ae357eb --- /dev/null +++ b/plugins/send_email/views/send_email_plugin/fail.html.erb @@ -0,0 +1,3 @@ +<%= error_messages_for 'mail', :header_message => _('The message could not be sent') %> + +<%= button :back, _('Back'), :back %> diff --git a/plugins/send_email/views/send_email_plugin/fail.rhtml b/plugins/send_email/views/send_email_plugin/fail.rhtml deleted file mode 100644 index ae357eb..0000000 --- a/plugins/send_email/views/send_email_plugin/fail.rhtml +++ /dev/null @@ -1,3 +0,0 @@ -<%= error_messages_for 'mail', :header_message => _('The message could not be sent') %> - -<%= button :back, _('Back'), :back %> diff --git a/plugins/send_email/views/send_email_plugin/sender/message.html.erb b/plugins/send_email/views/send_email_plugin/sender/message.html.erb new file mode 100644 index 0000000..251f4a8 --- /dev/null +++ b/plugins/send_email/views/send_email_plugin/sender/message.html.erb @@ -0,0 +1,8 @@ +<%= _('Contact from %s') % @referer %> + +<%= word_wrap(@message || @mail.message) %> +<% (@params || @mail.params).each_pair do |key, value| %> +<%= key %>: <%= word_wrap(value) %> +<% end %> +--- +<%= url_for @context_url %> diff --git a/plugins/send_email/views/send_email_plugin/sender/message.rhtml b/plugins/send_email/views/send_email_plugin/sender/message.rhtml deleted file mode 100644 index 251f4a8..0000000 --- a/plugins/send_email/views/send_email_plugin/sender/message.rhtml +++ /dev/null @@ -1,8 +0,0 @@ -<%= _('Contact from %s') % @referer %> - -<%= word_wrap(@message || @mail.message) %> -<% (@params || @mail.params).each_pair do |key, value| %> -<%= key %>: <%= word_wrap(value) %> -<% end %> ---- -<%= url_for @context_url %> diff --git a/plugins/send_email/views/send_email_plugin/success.html.erb b/plugins/send_email/views/send_email_plugin/success.html.erb new file mode 100644 index 0000000..287e62f --- /dev/null +++ b/plugins/send_email/views/send_email_plugin/success.html.erb @@ -0,0 +1,8 @@ +
<%= button :back, _('Back'), :back %>
diff --git a/plugins/send_email/views/send_email_plugin/success.rhtml b/plugins/send_email/views/send_email_plugin/success.rhtml deleted file mode 100644 index 287e62f..0000000 --- a/plugins/send_email/views/send_email_plugin/success.rhtml +++ /dev/null @@ -1,8 +0,0 @@ -<%= button :back, _('Back'), :back %>
-- libgit2 0.21.2