Commit 19ac13ef93744d1089346dbfb74f6bd0ee2c6a67
1 parent
e4a49c3b
Exists in
master
and in
29 other branches
ActionItem23: adding validations to RSS feed
git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@1130 3f533792-8f58-4932-b0fe-aaf55b0a4547
Showing
2 changed files
with
54 additions
and
0 deletions
Show diff stats
app/models/rss_feed.rb
| @@ -8,6 +8,7 @@ class RssFeed < Article | @@ -8,6 +8,7 @@ class RssFeed < Article | ||
| 8 | end | 8 | end |
| 9 | alias :settings :body | 9 | alias :settings :body |
| 10 | 10 | ||
| 11 | + # The maximum number of articles to be displayed in the RSS feed. | ||
| 11 | def limit | 12 | def limit |
| 12 | settings[:limit] | 13 | settings[:limit] |
| 13 | end | 14 | end |
| @@ -15,19 +16,32 @@ class RssFeed < Article | @@ -15,19 +16,32 @@ class RssFeed < Article | ||
| 15 | settings[:limit] = value | 16 | settings[:limit] = value |
| 16 | end | 17 | end |
| 17 | 18 | ||
| 19 | + # FIXME this should be validates_numericality_of, but Rails 1.2.6 does not | ||
| 20 | + # support validates_numericality_of with virtual attributes | ||
| 21 | + validates_format_of :limit, :with => /^[0-9]+$/, :if => :limit | ||
| 22 | + | ||
| 23 | + # determinates what to include in the feed. Possible values are +:all+ | ||
| 24 | + # (include everything from the profile) and :parent_and_children (include | ||
| 25 | + # only articles that are siblings of the feed). | ||
| 26 | + # | ||
| 27 | + # The feed itself is never included. | ||
| 18 | def include | 28 | def include |
| 19 | settings[:include] | 29 | settings[:include] |
| 20 | end | 30 | end |
| 21 | def include=(value) | 31 | def include=(value) |
| 22 | settings[:include] = value | 32 | settings[:include] = value |
| 23 | end | 33 | end |
| 34 | + validates_inclusion_of :include, :in => [ :all, :parent_and_children ], :if => :include | ||
| 24 | 35 | ||
| 36 | + # determinates what to include in the feed as items' description. Possible | ||
| 37 | + # values are +:body+ (default) and +:abstract+. | ||
| 25 | def feed_item_description | 38 | def feed_item_description |
| 26 | settings[:feed_item_description] | 39 | settings[:feed_item_description] |
| 27 | end | 40 | end |
| 28 | def feed_item_description=(value) | 41 | def feed_item_description=(value) |
| 29 | settings[:feed_item_description] = value | 42 | settings[:feed_item_description] = value |
| 30 | end | 43 | end |
| 44 | + validates_inclusion_of :feed_item_description, :in => [ :body, :abstract ], :if => :feed_item_description | ||
| 31 | 45 | ||
| 32 | # TODO | 46 | # TODO |
| 33 | def to_html | 47 | def to_html |
test/unit/rss_feed_test.rb
| @@ -124,6 +124,46 @@ class RssFeedTest < Test::Unit::TestCase | @@ -124,6 +124,46 @@ class RssFeedTest < Test::Unit::TestCase | ||
| 124 | feed.data | 124 | feed.data |
| 125 | end | 125 | end |
| 126 | 126 | ||
| 127 | + should 'limit should only accept integers' do | ||
| 128 | + feed = RssFeed.new | ||
| 129 | + feed.limit = 'text' | ||
| 130 | + feed.valid? | ||
| 131 | + assert feed.errors.invalid?(:limit) | ||
| 132 | + feed.limit = 10 | ||
| 133 | + feed.valid? | ||
| 134 | + assert !feed.errors.invalid?(:limit) | ||
| 135 | + end | ||
| 136 | + | ||
| 137 | + should 'allow only :parent_and_children and :all as include setting' do | ||
| 138 | + feed = RssFeed.new | ||
| 139 | + feed.include = :something_else | ||
| 140 | + feed.valid? | ||
| 141 | + assert feed.errors.invalid?(:include) | ||
| 142 | + | ||
| 143 | + feed.include = :parent_and_children | ||
| 144 | + feed.valid? | ||
| 145 | + assert !feed.errors.invalid?(:include) | ||
| 146 | + | ||
| 147 | + feed.include = :all | ||
| 148 | + feed.valid? | ||
| 149 | + assert !feed.errors.invalid?(:include) | ||
| 150 | + end | ||
| 151 | + | ||
| 152 | + should 'allow only :body and :abstract as feed_item_description' do | ||
| 153 | + feed = RssFeed.new | ||
| 154 | + feed.feed_item_description = :something_else | ||
| 155 | + feed.valid? | ||
| 156 | + assert feed.errors.invalid?(:feed_item_description) | ||
| 157 | + | ||
| 158 | + feed.feed_item_description = :body | ||
| 159 | + feed.valid? | ||
| 160 | + assert !feed.errors.invalid?(:feed_item_description) | ||
| 161 | + | ||
| 162 | + feed.feed_item_description = :abstract | ||
| 163 | + feed.valid? | ||
| 164 | + assert !feed.errors.invalid?(:feed_item_description) | ||
| 165 | + end | ||
| 166 | + | ||
| 127 | should 'provide proper short description' do | 167 | should 'provide proper short description' do |
| 128 | RssFeed.expects(:==).with(Article).returns(true).at_least_once | 168 | RssFeed.expects(:==).with(Article).returns(true).at_least_once |
| 129 | assert_not_equal Article.short_description, RssFeed.short_description | 169 | assert_not_equal Article.short_description, RssFeed.short_description |