Commit 0f48036de78b00c85367bdfb023b95110d274857

Authored by AntonioTerceiro
1 parent 446eea30

ActionItem22: making tests pass



git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@1112 3f533792-8f58-4932-b0fe-aaf55b0a4547
app/models/comment.rb
... ... @@ -2,4 +2,17 @@ class Comment < ActiveRecord::Base
2 2 validates_presence_of :title, :body
3 3 belongs_to :article
4 4 belongs_to :author, :class_name => 'Person', :foreign_key => 'author_id'
  5 +
  6 + # unauthenticated authors:
  7 + validates_presence_of :name, :if => (lambda { |record| !record.email.blank? })
  8 + validates_presence_of :email, :if => (lambda { |record| !record.name.blank? })
  9 +
  10 + # require either a recognized author or an external person
  11 + validates_presence_of :author_id, :if => (lambda { |rec| rec.name.blank? && rec.email.blank? })
  12 + validates_each :name do |rec,attribute,value|
  13 + if rec.author_id && (!rec.name.blank? || !rec.email.blank?)
  14 + rec.errors.add(:name, _('%{fn} can only be informed for unauthenticated authors'))
  15 + end
  16 + end
  17 +
5 18 end
... ...
test/test_helper.rb
... ... @@ -98,6 +98,12 @@ class Test::Unit::TestCase
98 98 assert !object.errors.invalid?(attribute), "Attribute \"#{attribute.to_s}\" expected to accept value #{test_value.inspect}"
99 99 end
100 100  
  101 + def assert_optional(object, attribute)
  102 + object.send("#{attribute}=", nil)
  103 + object.valid?
  104 + assert !object.errors.invalid?(attribute)
  105 + end
  106 +
101 107 private
102 108  
103 109 def uses_host(name)
... ...
test/unit/comment_test.rb
... ... @@ -34,7 +34,29 @@ class CommentTest < Test::Unit::TestCase
34 34 end
35 35  
36 36 should 'record unauthenticated author' do
37   - flunk 'not yet'
  37 +
  38 + assert_optional Comment.new, :name
  39 + assert_optional Comment.new, :email
  40 +
  41 + # if given name, require email
  42 + c1 = Comment.new
  43 + c1.name = 'My Name'
  44 + assert_mandatory c1, :email
  45 +
  46 + # if given email, require name
  47 + c2 = Comment.new
  48 + c2.email = 'my@email.com'
  49 + assert_mandatory c2, :name
  50 + end
  51 +
  52 + should 'accept either an authenticated or unauthenticated author' do
  53 + assert_mandatory Comment.new, :author_id
  54 +
  55 + c1 = Comment.new
  56 + c1.author = create_user('someperson').person
  57 + c1.name = 'my name'
  58 + c1.valid?
  59 + assert c1.errors.invalid?(:name)
38 60 end
39 61  
40 62 end
... ...