Commit a289c353d2f36a5aed97c27434ff058c6c634960

Authored by Antonio Terceiro
1 parent 924f3a20

ActionItem1219: deliver the e-mail after saving the model

Before the save transaction ends, postfix process will not have an
updated vision of the users table, and the e-mail will fail.
app/models/email_activation.rb
@@ -17,6 +17,7 @@ class EmailActivation < Task @@ -17,6 +17,7 @@ class EmailActivation < Task
17 17
18 def perform 18 def perform
19 person.user.enable_email! 19 person.user.enable_email!
  20 + User::Mailer.deliver_activation_email_notify(person.user)
20 end 21 end
21 22
22 def sends_email? 23 def sends_email?
app/models/user.rb
@@ -39,17 +39,6 @@ class User < ActiveRecord::Base @@ -39,17 +39,6 @@ class User < ActiveRecord::Base
39 @person_data || {} 39 @person_data || {}
40 end 40 end
41 41
42 - attr_accessor :had_email_disabled  
43 - before_update do |user|  
44 - user.had_email_disabled = !User.find(user.id).enable_email  
45 - true  
46 - end  
47 - after_update do |user|  
48 - if user.had_email_disabled && user.enable_email && !user.environment.nil?  
49 - User::Mailer.deliver_activation_email_notify(user)  
50 - end  
51 - end  
52 -  
53 def email_domain 42 def email_domain
54 self.person.preferred_domain && self.person.preferred_domain.name || self.environment.default_hostname(true) 43 self.person.preferred_domain && self.person.preferred_domain.name || self.environment.default_hostname(true)
55 end 44 end
test/unit/email_activation_test.rb
@@ -2,6 +2,12 @@ require File.dirname(__FILE__) + '/../test_helper' @@ -2,6 +2,12 @@ require File.dirname(__FILE__) + '/../test_helper'
2 2
3 class EmailActivationTest < Test::Unit::TestCase 3 class EmailActivationTest < Test::Unit::TestCase
4 4
  5 + def setup
  6 + ActionMailer::Base.delivery_method = :test
  7 + ActionMailer::Base.perform_deliveries = true
  8 + ActionMailer::Base.deliveries = []
  9 + end
  10 +
5 should 'require a requestor' do 11 should 'require a requestor' do
6 task = EmailActivation.new 12 task = EmailActivation.new
7 task.valid? 13 task.valid?
@@ -25,6 +31,15 @@ class EmailActivationTest &lt; Test::Unit::TestCase @@ -25,6 +31,15 @@ class EmailActivationTest &lt; Test::Unit::TestCase
25 assert ze.enable_email 31 assert ze.enable_email
26 end 32 end
27 33
  34 + should 'deliver email after enabling mailbox' do
  35 + ze = create_user('zezinho', :environment_id => Environment.default.id, :email => 'ze@example.com')
  36 + assert !ze.enable_email
  37 + task = EmailActivation.create!(:requestor => ze.person, :target => Environment.default)
  38 + task.finish
  39 +
  40 + assert_equal ['zezinho@colivre.net'], ActionMailer::Base.deliveries.first.to
  41 + end
  42 +
28 should 'create only once pending task by user' do 43 should 'create only once pending task by user' do
29 ze = create_user('zezinho', :environment_id => Environment.default.id) 44 ze = create_user('zezinho', :environment_id => Environment.default.id)
30 task = EmailActivation.new(:requestor => ze.person, :target => Environment.default) 45 task = EmailActivation.new(:requestor => ze.person, :target => Environment.default)