Commit 3cab8c3fb779ee72a5ad852caf940c4a112b100f

Authored by Caio SBA
Committed by Antonio Terceiro
1 parent 63868041

Send e-mail when a scrap is sent (ActionItem1704)

app/models/person.rb
@@ -345,6 +345,10 @@ class Person < Profile @@ -345,6 +345,10 @@ class Person < Profile
345 end 345 end
346 end 346 end
347 347
  348 + def wall_url
  349 + generate_url(:profile => identifier, :controller => 'profile', :action => 'index', :anchor => 'profile-wall')
  350 + end
  351 +
348 protected 352 protected
349 353
350 def followed_by?(profile) 354 def followed_by?(profile)
app/models/scrap.rb
@@ -16,6 +16,7 @@ class Scrap < ActiveRecord::Base @@ -16,6 +16,7 @@ class Scrap < ActiveRecord::Base
16 16
17 after_create do |scrap| 17 after_create do |scrap|
18 scrap.root.update_attribute('updated_at', DateTime.now) unless scrap.root.nil? 18 scrap.root.update_attribute('updated_at', DateTime.now) unless scrap.root.nil?
  19 + Scrap::Notifier.deliver_mail(scrap) unless scrap.sender == scrap.receiver
19 end 20 end
20 21
21 before_validation :strip_all_html_tags 22 before_validation :strip_all_html_tags
@@ -25,4 +26,21 @@ class Scrap < ActiveRecord::Base @@ -25,4 +26,21 @@ class Scrap < ActiveRecord::Base
25 self.content = sanitizer.sanitize(self.content, :tags => []) 26 self.content = sanitizer.sanitize(self.content, :tags => [])
26 end 27 end
27 28
  29 + class Notifier < ActionMailer::Base
  30 + def mail(scrap)
  31 + sender, receiver = scrap.sender, scrap.receiver
  32 + recipients receiver.email
  33 +
  34 + from "#{sender.environment.name} <#{sender.environment.contact_email}>"
  35 + subject _("[%s] You received a scrap!") % [sender.environment.name]
  36 + body :recipient => receiver.name,
  37 + :sender => sender.name,
  38 + :sender_link => sender.url,
  39 + :scrap_content => scrap.content,
  40 + :wall_url => receiver.wall_url,
  41 + :environment => sender.environment.name,
  42 + :url => sender.environment.top_url
  43 + end
  44 + end
  45 +
28 end 46 end
app/views/scrap/notifier/mail.rhtml 0 → 100644
@@ -0,0 +1,16 @@ @@ -0,0 +1,16 @@
  1 +<%= _('Hi, %{recipient}!') % { :recipient => @recipient } %>
  2 +
  3 +<%= word_wrap(_('%{sender} (%{sender_link}) has left the following scrap for you:') % { :sender => @sender, :sender_link => url_for(@sender_link) }) %>
  4 +
  5 +-------------------------------------------------------------------------------
  6 +<%= word_wrap(@scrap_content) %>
  7 +-------------------------------------------------------------------------------
  8 +
  9 +<%= _('View this scrap on your wall:') %>
  10 +<%= url_for @wall_url %>
  11 +
  12 +<%= _("Greetings,") %>
  13 +
  14 +--
  15 +<%= _('%s team.') % @environment %>
  16 +<%= url_for @url %>
test/unit/person_test.rb
@@ -1059,4 +1059,10 @@ class PersonTest &lt; Test::Unit::TestCase @@ -1059,4 +1059,10 @@ class PersonTest &lt; Test::Unit::TestCase
1059 assert has_remove_member_notification 1059 assert has_remove_member_notification
1060 end 1060 end
1061 1061
  1062 + should 'return url to a person wall' do
  1063 + environment = create_environment('mycolivre.net')
  1064 + profile = build(Person, :identifier => 'testprofile', :environment_id => create_environment('mycolivre.net').id)
  1065 + assert_equal({ :host => "mycolivre.net", :profile => 'testprofile', :controller => 'profile', :action => 'index', :anchor => 'profile-wall' }, profile.wall_url)
  1066 + end
  1067 +
1062 end 1068 end
test/unit/scrap_notifier_test.rb 0 → 100644
@@ -0,0 +1,68 @@ @@ -0,0 +1,68 @@
  1 +require File.dirname(__FILE__) + '/../test_helper'
  2 +
  3 +class ScrapNotifierTest < Test::Unit::TestCase
  4 + FIXTURES_PATH = File.dirname(__FILE__) + '/../fixtures'
  5 + CHARSET = "utf-8"
  6 +
  7 + def setup
  8 + ActionMailer::Base.delivery_method = :test
  9 + ActionMailer::Base.perform_deliveries = true
  10 + ActionMailer::Base.deliveries = []
  11 + @sender = create_user('user_scrap_sender_test').person
  12 + @receiver = create_user('user_scrap_receiver_test').person
  13 + end
  14 +
  15 + should 'deliver mail after leave scrap' do
  16 + assert_difference ActionMailer::Base.deliveries, :size do
  17 + Scrap.create!(:sender => @sender, :receiver => @receiver, :content => 'Hi man!')
  18 + end
  19 + end
  20 +
  21 + should 'deliver mail even if it is a reply' do
  22 + s = Scrap.create!(:sender => @sender, :receiver => @receiver, :content => 'Hi man!')
  23 + assert_difference ActionMailer::Base.deliveries, :size do
  24 + s.replies << Scrap.new(:sender => @sender, :receiver => @receiver, :content => 'Hi again man!')
  25 + end
  26 + end
  27 +
  28 + should 'deliver mail to receiver of the scrap' do
  29 + Scrap.create!(:sender => @sender, :receiver => @receiver, :content => 'Hi man!')
  30 + sent = ActionMailer::Base.deliveries.first
  31 + assert_equal [@receiver.email], sent.to
  32 + end
  33 +
  34 + should 'display sender name in delivered mail' do
  35 + Scrap.create!(:sender => @sender, :receiver => @receiver, :content => 'Hi man!')
  36 + sent = ActionMailer::Base.deliveries.first
  37 + assert_match /user_scrap_sender_test/, sent.body
  38 + end
  39 +
  40 + should 'display scrap content in delivered mail' do
  41 + Scrap.create!(:sender => @sender, :receiver => @receiver, :content => 'Hi man!')
  42 + sent = ActionMailer::Base.deliveries.first
  43 + assert_match /Hi man!/, sent.body
  44 + end
  45 +
  46 + should 'display receiver wall link in delivered mail' do
  47 + Scrap.create!(:sender => @sender, :receiver => @receiver, :content => 'Hi man!')
  48 + sent = ActionMailer::Base.deliveries.first
  49 + assert_match /\/profile\/user_scrap_receiver_test#profile-wall/, sent.body
  50 + end
  51 +
  52 + should 'not deliver mail if notify receiver and sender are the same person' do
  53 + assert_no_difference ActionMailer::Base.deliveries, :size do
  54 + Scrap.create!(:sender => @sender, :receiver => @sender, :content => 'Hi myself!')
  55 + end
  56 + end
  57 +
  58 + private
  59 +
  60 + def read_fixture(action)
  61 + IO.readlines("#{FIXTURES_PATH}/mail_sender/#{action}")
  62 + end
  63 +
  64 + def encode(subject)
  65 + quoted_printable(subject, CHARSET)
  66 + end
  67 +
  68 +end