diff --git a/app/models/person.rb b/app/models/person.rb index ed1702b..9d47bd1 100644 --- a/app/models/person.rb +++ b/app/models/person.rb @@ -345,6 +345,10 @@ class Person < Profile end end + def wall_url + generate_url(:profile => identifier, :controller => 'profile', :action => 'index', :anchor => 'profile-wall') + end + protected def followed_by?(profile) diff --git a/app/models/scrap.rb b/app/models/scrap.rb index bc95667..b384710 100644 --- a/app/models/scrap.rb +++ b/app/models/scrap.rb @@ -16,6 +16,7 @@ class Scrap < ActiveRecord::Base after_create do |scrap| scrap.root.update_attribute('updated_at', DateTime.now) unless scrap.root.nil? + Scrap::Notifier.deliver_mail(scrap) unless scrap.sender == scrap.receiver end before_validation :strip_all_html_tags @@ -25,4 +26,21 @@ class Scrap < ActiveRecord::Base self.content = sanitizer.sanitize(self.content, :tags => []) end + class Notifier < ActionMailer::Base + def mail(scrap) + sender, receiver = scrap.sender, scrap.receiver + recipients receiver.email + + from "#{sender.environment.name} <#{sender.environment.contact_email}>" + subject _("[%s] You received a scrap!") % [sender.environment.name] + body :recipient => receiver.name, + :sender => sender.name, + :sender_link => sender.url, + :scrap_content => scrap.content, + :wall_url => receiver.wall_url, + :environment => sender.environment.name, + :url => sender.environment.top_url + end + end + end diff --git a/app/views/scrap/notifier/mail.rhtml b/app/views/scrap/notifier/mail.rhtml new file mode 100644 index 0000000..e7efff8 --- /dev/null +++ b/app/views/scrap/notifier/mail.rhtml @@ -0,0 +1,16 @@ +<%= _('Hi, %{recipient}!') % { :recipient => @recipient } %> + +<%= word_wrap(_('%{sender} (%{sender_link}) has left the following scrap for you:') % { :sender => @sender, :sender_link => url_for(@sender_link) }) %> + +------------------------------------------------------------------------------- +<%= word_wrap(@scrap_content) %> +------------------------------------------------------------------------------- + +<%= _('View this scrap on your wall:') %> +<%= url_for @wall_url %> + +<%= _("Greetings,") %> + +-- +<%= _('%s team.') % @environment %> +<%= url_for @url %> diff --git a/test/unit/person_test.rb b/test/unit/person_test.rb index a3e31ec..0420d2e 100644 --- a/test/unit/person_test.rb +++ b/test/unit/person_test.rb @@ -1059,4 +1059,10 @@ class PersonTest < Test::Unit::TestCase assert has_remove_member_notification end + should 'return url to a person wall' do + environment = create_environment('mycolivre.net') + profile = build(Person, :identifier => 'testprofile', :environment_id => create_environment('mycolivre.net').id) + assert_equal({ :host => "mycolivre.net", :profile => 'testprofile', :controller => 'profile', :action => 'index', :anchor => 'profile-wall' }, profile.wall_url) + end + end diff --git a/test/unit/scrap_notifier_test.rb b/test/unit/scrap_notifier_test.rb new file mode 100644 index 0000000..4924066 --- /dev/null +++ b/test/unit/scrap_notifier_test.rb @@ -0,0 +1,68 @@ +require File.dirname(__FILE__) + '/../test_helper' + +class ScrapNotifierTest < Test::Unit::TestCase + FIXTURES_PATH = File.dirname(__FILE__) + '/../fixtures' + CHARSET = "utf-8" + + def setup + ActionMailer::Base.delivery_method = :test + ActionMailer::Base.perform_deliveries = true + ActionMailer::Base.deliveries = [] + @sender = create_user('user_scrap_sender_test').person + @receiver = create_user('user_scrap_receiver_test').person + end + + should 'deliver mail after leave scrap' do + assert_difference ActionMailer::Base.deliveries, :size do + Scrap.create!(:sender => @sender, :receiver => @receiver, :content => 'Hi man!') + end + end + + should 'deliver mail even if it is a reply' do + s = Scrap.create!(:sender => @sender, :receiver => @receiver, :content => 'Hi man!') + assert_difference ActionMailer::Base.deliveries, :size do + s.replies << Scrap.new(:sender => @sender, :receiver => @receiver, :content => 'Hi again man!') + end + end + + should 'deliver mail to receiver of the scrap' do + Scrap.create!(:sender => @sender, :receiver => @receiver, :content => 'Hi man!') + sent = ActionMailer::Base.deliveries.first + assert_equal [@receiver.email], sent.to + end + + should 'display sender name in delivered mail' do + Scrap.create!(:sender => @sender, :receiver => @receiver, :content => 'Hi man!') + sent = ActionMailer::Base.deliveries.first + assert_match /user_scrap_sender_test/, sent.body + end + + should 'display scrap content in delivered mail' do + Scrap.create!(:sender => @sender, :receiver => @receiver, :content => 'Hi man!') + sent = ActionMailer::Base.deliveries.first + assert_match /Hi man!/, sent.body + end + + should 'display receiver wall link in delivered mail' do + Scrap.create!(:sender => @sender, :receiver => @receiver, :content => 'Hi man!') + sent = ActionMailer::Base.deliveries.first + assert_match /\/profile\/user_scrap_receiver_test#profile-wall/, sent.body + end + + should 'not deliver mail if notify receiver and sender are the same person' do + assert_no_difference ActionMailer::Base.deliveries, :size do + Scrap.create!(:sender => @sender, :receiver => @sender, :content => 'Hi myself!') + end + end + + private + + def read_fixture(action) + IO.readlines("#{FIXTURES_PATH}/mail_sender/#{action}") + end + + def encode(subject) + quoted_printable(subject, CHARSET) + end + +end -- libgit2 0.21.2