Commit 0f48036de78b00c85367bdfb023b95110d274857
1 parent
446eea30
Exists in
master
and in
28 other branches
ActionItem22: making tests pass
git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@1112 3f533792-8f58-4932-b0fe-aaf55b0a4547
Showing
3 changed files
with
42 additions
and
1 deletions
Show diff stats
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 | ... | ... |