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 17  
18 18 def perform
19 19 person.user.enable_email!
  20 + User::Mailer.deliver_activation_email_notify(person.user)
20 21 end
21 22  
22 23 def sends_email?
... ...
app/models/user.rb
... ... @@ -39,17 +39,6 @@ class User < ActiveRecord::Base
39 39 @person_data || {}
40 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 42 def email_domain
54 43 self.person.preferred_domain && self.person.preferred_domain.name || self.environment.default_hostname(true)
55 44 end
... ...
test/unit/email_activation_test.rb
... ... @@ -2,6 +2,12 @@ require File.dirname(__FILE__) + '/../test_helper'
2 2  
3 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 11 should 'require a requestor' do
6 12 task = EmailActivation.new
7 13 task.valid?
... ... @@ -25,6 +31,15 @@ class EmailActivationTest &lt; Test::Unit::TestCase
25 31 assert ze.enable_email
26 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 43 should 'create only once pending task by user' do
29 44 ze = create_user('zezinho', :environment_id => Environment.default.id)
30 45 task = EmailActivation.new(:requestor => ze.person, :target => Environment.default)
... ...