Commit 7c8e3b6858c950b237146db765c6da4281209166

Authored by Rodrigo Souto
1 parent 6d2a0edf

rails3: fix mailing tests

app/mailers/mailing.rb 0 → 100644
... ... @@ -0,0 +1,65 @@
  1 +require 'mailing_job'
  2 +
  3 +class Mailing < ActiveRecord::Base
  4 +
  5 + attr_accessible :subject, :body
  6 + validates_presence_of :source_id, :subject, :body
  7 + belongs_to :source, :foreign_key => :source_id, :polymorphic => true
  8 + belongs_to :person
  9 +
  10 + has_many :mailing_sents
  11 +
  12 + xss_terminate :only => [ :subject, :body ], :with => 'white_list', :on => 'validation'
  13 +
  14 + after_create do |mailing|
  15 + mailing.schedule
  16 + end
  17 +
  18 + def schedule
  19 + Delayed::Job.enqueue MailingJob.new(self.id)
  20 + end
  21 +
  22 + def generate_from
  23 + "#{source.name} <#{source.contact_email}>"
  24 + end
  25 +
  26 + def generate_subject
  27 + '[%s] %s' % [source.name, subject]
  28 + end
  29 +
  30 + def signature_message
  31 + _('Sent by Noosfero.')
  32 + end
  33 +
  34 + def url
  35 + ''
  36 + end
  37 +
  38 + def deliver
  39 + each_recipient do |recipient|
  40 + begin
  41 + Mailing::Sender.notification(self, recipient.email).deliver
  42 + self.mailing_sents.create(:person => recipient)
  43 + rescue Exception
  44 + # FIXME should not discard errors silently. An idea is to collect all
  45 + # errors and generate a task (notification) for the +source+
  46 + # (environment/organization) listing these errors.
  47 + end
  48 + end
  49 + end
  50 +
  51 + class Sender < ActionMailer::Base
  52 + def notification(mailing, recipient)
  53 + @message = mailing.body
  54 + @signature_message = mailing.signature_message
  55 + @url = mailing.url
  56 + mail(
  57 + :content_type => 'text/html',
  58 + :recipients => recipient,
  59 + :from => mailing.generate_from,
  60 + :reply_to => mailing.person.email,
  61 + :subject => mailing.generate_subject
  62 + )
  63 + end
  64 + end
  65 +end
... ...
app/models/mailing.rb
... ... @@ -1,63 +0,0 @@
1   -require 'mailing_job'
2   -
3   -class Mailing < ActiveRecord::Base
4   -
5   - attr_accessible :subject, :body
6   - validates_presence_of :source_id, :subject, :body
7   - belongs_to :source, :foreign_key => :source_id, :polymorphic => true
8   - belongs_to :person
9   -
10   - has_many :mailing_sents
11   -
12   - xss_terminate :only => [ :subject, :body ], :with => 'white_list', :on => 'validation'
13   -
14   - after_create do |mailing|
15   - mailing.schedule
16   - end
17   -
18   - def schedule
19   - Delayed::Job.enqueue MailingJob.new(self.id)
20   - end
21   -
22   - def generate_from
23   - "#{source.name} <#{source.contact_email}>"
24   - end
25   -
26   - def generate_subject
27   - '[%s] %s' % [source.name, subject]
28   - end
29   -
30   - def signature_message
31   - _('Sent by Noosfero.')
32   - end
33   -
34   - def url
35   - ''
36   - end
37   -
38   - def deliver
39   - each_recipient do |recipient|
40   - begin
41   - Mailing::Sender.deliver_mail(self, recipient.email)
42   - self.mailing_sents.create(:person => recipient)
43   - rescue Exception
44   - # FIXME should not discard errors silently. An idea is to collect all
45   - # errors and generate a task (notification) for the +source+
46   - # (environment/organization) listing these errors.
47   - end
48   - end
49   - end
50   -
51   - class Sender < ActionMailer::Base
52   - def mail(mailing, recipient)
53   - content_type 'text/html'
54   - recipients recipient
55   - from mailing.generate_from
56   - reply_to mailing.person.email
57   - subject mailing.generate_subject
58   - body :message => mailing.body,
59   - :signature_message => mailing.signature_message,
60   - :url => mailing.url
61   - end
62   - end
63   -end
app/views/mailing/sender/mail.html.erb
... ... @@ -1,17 +0,0 @@
1   -<!DOCTYPE html>
2   -<html>
3   - <head>
4   - <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
5   - </head>
6   - <body>
7   - <%= word_wrap(@message) %>
8   - <p>
9   - --<br/>
10   - <%= @signature_message %><br/>
11   - <%= @url %>
12   - </p>
13   - </body>
14   -</html>
15   -
16   -
17   -
app/views/mailing/sender/notification.html.erb 0 → 100644
... ... @@ -0,0 +1,17 @@
  1 +<!DOCTYPE html>
  2 +<html>
  3 + <head>
  4 + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  5 + </head>
  6 + <body>
  7 + <%= word_wrap(@message) %>
  8 + <p>
  9 + --<br/>
  10 + <%= @signature_message %><br/>
  11 + <%= @url %>
  12 + </p>
  13 + </body>
  14 +</html>
  15 +
  16 +
  17 +
... ...
test/unit/mailing_test.rb
... ... @@ -51,50 +51,50 @@ class MailingTest &lt; ActiveSupport::TestCase
51 51 end
52 52  
53 53 should 'return source' do
54   - mailing = Mailing.create(:source => environment, :subject => 'Hello', :body => 'We have some news')
  54 + mailing = create(Mailing, :source => environment, :subject => 'Hello', :body => 'We have some news')
55 55 assert_equal environment, Mailing.find(mailing.id).source
56 56 end
57 57  
58 58 should 'return source name' do
59   - mailing = Mailing.new(:source => environment)
  59 + mailing = build(Mailing, :source => environment)
60 60 assert_equal environment.name, mailing.source.name
61 61 end
62 62  
63 63 should 'return source with source_id' do
64   - mailing = Mailing.new(:source => environment)
  64 + mailing = build(Mailing, :source => environment)
65 65 assert_equal environment, mailing.source
66 66 end
67 67  
68 68 should 'return person with person_id' do
69 69 person = Person['user_one']
70   - mailing = Mailing.new(:source => environment, :person => person)
  70 + mailing = build(Mailing, :source => environment, :person => person)
71 71 assert_equal person, mailing.person
72 72 end
73 73  
74 74 should 'display name and email on generate_from' do
75 75 person = Person['user_one']
76   - mailing = Mailing.new(:source => environment, :person => person)
  76 + mailing = build(Mailing, :source => environment, :person => person)
77 77 assert_equal "#{environment.name} <#{environment.contact_email}>", mailing.generate_from
78 78 end
79 79  
80 80 should 'generate subject' do
81   - mailing = Mailing.new(:source => environment, :subject => 'Hello :)')
  81 + mailing = build(Mailing, :source => environment, :subject => 'Hello :)')
82 82 assert_equal "[#{environment.name}] #{mailing.subject}", mailing.generate_subject
83 83 end
84 84  
85 85 should 'return signature message' do
86   - mailing = Mailing.new(:source => environment)
  86 + mailing = build(Mailing, :source => environment)
87 87 assert_equal 'Sent by Noosfero.', mailing.signature_message
88 88 end
89 89  
90 90 should 'return blank string on url' do
91   - mailing = Mailing.new(:source => environment)
92   - environment.domains << Domain.create(:name => 'noosfero.net', :is_default => true)
  91 + mailing = build(Mailing, :source => environment)
  92 + environment.domains << create(Domain, :name => 'noosfero.net', :is_default => true)
93 93 assert_equal '', mailing.url
94 94 end
95 95  
96 96 should 'process the entire batch even if individual emails crash' do
97   - mailing = Mailing.new(:source => environment, :person => Person['user_one'], :body => 'test', :subject => 'test')
  97 + mailing = build(Mailing, :source => environment, :person => Person['user_one'], :body => 'test', :subject => 'test')
98 98 def mailing.each_recipient
99 99 user_one = Person['user_one']
100 100 user_two = Person['user_two']
... ...