Commit 77b54988c00876752a94b8a2ddbc670f927fcf2c

Authored by Victor Costa
1 parent cdae5167

Validates that a track has at least one category

plugins/community_track/lib/community_track_plugin/track.rb
@@ -3,6 +3,12 @@ class CommunityTrackPlugin::Track < Folder @@ -3,6 +3,12 @@ class CommunityTrackPlugin::Track < Folder
3 settings_items :goals, :type => :string 3 settings_items :goals, :type => :string
4 settings_items :expected_results, :type => :string 4 settings_items :expected_results, :type => :string
5 5
  6 + validate :validate_categories
  7 +
  8 + def validate_categories
  9 + errors.add(:categories, _('should not be blank.')) if categories.empty? && pending_categorizations.blank?
  10 + end
  11 +
6 def self.icon_name(article = nil) 12 def self.icon_name(article = nil)
7 'community-track' 13 'community-track'
8 end 14 end
plugins/community_track/test/functional/community_track_plugin_cms_controller_test.rb
@@ -7,7 +7,7 @@ class CmsControllerTest < ActionController::TestCase @@ -7,7 +7,7 @@ class CmsControllerTest < ActionController::TestCase
7 7
8 def setup 8 def setup
9 @profile = fast_create(Community) 9 @profile = fast_create(Community)
10 - @track = CommunityTrackPlugin::Track.create!(:abstract => 'abstract', :body => 'body', :name => 'track', :profile => @profile) 10 + @track = create_track('track', @profile)
11 @step = CommunityTrackPlugin::Step.create!(:name => 'step1', :body => 'body', :profile => @profile, :parent => @track, :published => false, :end_date => Date.today, :start_date => Date.today) 11 @step = CommunityTrackPlugin::Step.create!(:name => 'step1', :body => 'body', :profile => @profile, :parent => @track, :published => false, :end_date => Date.today, :start_date => Date.today)
12 12
13 user = create_user('testinguser') 13 user = create_user('testinguser')
plugins/community_track/test/functional/community_track_plugin_content_viewer_controller_test.rb
@@ -11,10 +11,7 @@ class ContentViewerControllerTest < ActionController::TestCase @@ -11,10 +11,7 @@ class ContentViewerControllerTest < ActionController::TestCase
11 11
12 def setup 12 def setup
13 @profile = fast_create(Community) 13 @profile = fast_create(Community)
14 - @track = CommunityTrackPlugin::Track.create!(:abstract => 'abstract', :body => 'body', :name => 'track', :profile => @profile)  
15 - category = fast_create(Category, :name => "education")  
16 - @track.add_category(category)  
17 - 14 + @track = create_track('track', @profile)
18 @step = CommunityTrackPlugin::Step.create!(:name => 'step1', :body => 'body', :profile => @profile, :parent => @track, :published => false, :end_date => Date.today, :start_date => Date.today, :tool_type => TinyMceArticle.name) 15 @step = CommunityTrackPlugin::Step.create!(:name => 'step1', :body => 'body', :profile => @profile, :parent => @track, :published => false, :end_date => Date.today, :start_date => Date.today, :tool_type => TinyMceArticle.name)
19 16
20 user = create_user('testinguser') 17 user = create_user('testinguser')
@@ -110,7 +107,7 @@ class ContentViewerControllerTest < ActionController::TestCase @@ -110,7 +107,7 @@ class ContentViewerControllerTest < ActionController::TestCase
110 @block = CommunityTrackPlugin::TrackListBlock.create!(:box => box) 107 @block = CommunityTrackPlugin::TrackListBlock.create!(:box => box)
111 @profile.boxes << box 108 @profile.boxes << box
112 get :view_page, @step.url 109 get :view_page, @step.url
113 - assert_tag :tag => 'div', :attributes => { :class => 'item category_education' }, :descendant => { :tag => 'div', :attributes => { :class => 'steps' }, :descendant => { :tag => 'div', :attributes => { :class => "step #{@block.status_class(@step)}" } } } 110 + assert_tag :tag => 'div', :attributes => { :class => "item category_#{@track.category_name}" }, :descendant => { :tag => 'div', :attributes => { :class => 'steps' }, :descendant => { :tag => 'div', :attributes => { :class => "step #{@block.status_class(@step)}" } } }
114 end 111 end
115 112
116 should 'render tracks in track card list block' do 113 should 'render tracks in track card list block' do
@@ -118,8 +115,8 @@ class ContentViewerControllerTest &lt; ActionController::TestCase @@ -118,8 +115,8 @@ class ContentViewerControllerTest &lt; ActionController::TestCase
118 @block = CommunityTrackPlugin::TrackCardListBlock.create!(:box => box) 115 @block = CommunityTrackPlugin::TrackCardListBlock.create!(:box => box)
119 @profile.boxes << box 116 @profile.boxes << box
120 get :view_page, @step.url 117 get :view_page, @step.url
121 - assert_tag :tag => 'div', :attributes => { :class => 'item_card category_education' }, :descendant => { :tag => 'div', :attributes => { :class => 'track_content' } }  
122 - assert_tag :tag => 'div', :attributes => { :class => 'item_card category_education' }, :descendant => { :tag => 'div', :attributes => { :class => 'track_stats' } } 118 + assert_tag :tag => 'div', :attributes => { :class => "item_card category_#{@track.category_name}" }, :descendant => { :tag => 'div', :attributes => { :class => 'track_content' } }
  119 + assert_tag :tag => 'div', :attributes => { :class => "item_card category_#{@track.category_name}" }, :descendant => { :tag => 'div', :attributes => { :class => 'track_stats' } }
123 end 120 end
124 121
125 should 'render link to display more tracks in track list block' do 122 should 'render link to display more tracks in track list block' do
@@ -127,9 +124,7 @@ class ContentViewerControllerTest &lt; ActionController::TestCase @@ -127,9 +124,7 @@ class ContentViewerControllerTest &lt; ActionController::TestCase
127 @block = CommunityTrackPlugin::TrackCardListBlock.create!(:box => box) 124 @block = CommunityTrackPlugin::TrackCardListBlock.create!(:box => box)
128 @profile.boxes << box 125 @profile.boxes << box
129 126
130 - (@block.limit+1).times do |i|  
131 - CommunityTrackPlugin::Track.create!(:abstract => 'abstract', :body => 'body', :name => "track#{i}", :profile => @profile)  
132 - end 127 + (@block.limit+1).times { |i| create_track("track#{i}", @profile) }
133 128
134 get :view_page, @step.url 129 get :view_page, @step.url
135 assert_tag :tag => 'div', :attributes => { :id => "track_list_more_#{@block.id}" }, :descendant => { :tag => 'div', :attributes => { :class => 'more' } } 130 assert_tag :tag => 'div', :attributes => { :id => "track_list_more_#{@block.id}" }, :descendant => { :tag => 'div', :attributes => { :class => 'more' } }
@@ -142,9 +137,7 @@ class ContentViewerControllerTest &lt; ActionController::TestCase @@ -142,9 +137,7 @@ class ContentViewerControllerTest &lt; ActionController::TestCase
142 @block.more_another_page = true 137 @block.more_another_page = true
143 @block.save! 138 @block.save!
144 139
145 - (@block.limit+1).times do |i|  
146 - CommunityTrackPlugin::Track.create!(:abstract => 'abstract', :body => 'body', :name => "track#{i}", :profile => @profile)  
147 - end 140 + (@block.limit+1).times { |i| create_track("track#{i}", @profile) }
148 141
149 get :view_page, @step.url 142 get :view_page, @step.url
150 assert_tag :tag => 'div', :attributes => { :id => "track_list_more_#{@block.id}" }, :descendant => { :tag => 'div', :attributes => { :class => 'view_all' } } 143 assert_tag :tag => 'div', :attributes => { :id => "track_list_more_#{@block.id}" }, :descendant => { :tag => 'div', :attributes => { :class => 'view_all' } }
plugins/community_track/test/functional/community_track_plugin_myprofile_controller_test.rb
@@ -12,7 +12,7 @@ class CommunityTrackPluginMyprofileControllerTest &lt; ActionController::TestCase @@ -12,7 +12,7 @@ class CommunityTrackPluginMyprofileControllerTest &lt; ActionController::TestCase
12 @response = ActionController::TestResponse.new 12 @response = ActionController::TestResponse.new
13 13
14 @profile = fast_create(Community) 14 @profile = fast_create(Community)
15 - @track = CommunityTrackPlugin::Track.create!(:abstract => 'abstract', :body => 'body', :name => 'track', :profile => @profile) 15 + @track = create_track('track', @profile)
16 16
17 @user = create_user('testinguser') 17 @user = create_user('testinguser')
18 login_as(@user.login) 18 login_as(@user.login)
plugins/community_track/test/functional/community_track_plugin_public_controller_test.rb
@@ -8,7 +8,7 @@ class CommunityTrackPluginPublicControllerTest &lt; ActionController::TestCase @@ -8,7 +8,7 @@ class CommunityTrackPluginPublicControllerTest &lt; ActionController::TestCase
8 8
9 def setup 9 def setup
10 @community = fast_create(Community) 10 @community = fast_create(Community)
11 - @track = CommunityTrackPlugin::Track.create!(:abstract => 'abstract', :body => 'body', :name => 'track', :profile => @community) 11 + @track = create_track('track', @community)
12 12
13 box = fast_create(Box, :owner_id => @community.id, :owner_type => 'Community') 13 box = fast_create(Box, :owner_id => @community.id, :owner_type => 'Community')
14 @card_block = CommunityTrackPlugin::TrackCardListBlock.create!(:box => box) 14 @card_block = CommunityTrackPlugin::TrackCardListBlock.create!(:box => box)
@@ -26,17 +26,13 @@ class CommunityTrackPluginPublicControllerTest &lt; ActionController::TestCase @@ -26,17 +26,13 @@ class CommunityTrackPluginPublicControllerTest &lt; ActionController::TestCase
26 end 26 end
27 27
28 should 'display tracks with page size' do 28 should 'display tracks with page size' do
29 - 20.times do |i|  
30 - track = CommunityTrackPlugin::Track.create!(:abstract => 'abstract', :body => 'body', :name => "track#{i}", :profile => @community)  
31 - end 29 + 20.times { |i| create_track("track#{i}", @community) }
32 xhr :get, :view_tracks, :id => @block.id, :page => 1, :per_page => 10 30 xhr :get, :view_tracks, :id => @block.id, :page => 1, :per_page => 10
33 assert_equal 10, @response.body.scan(/item/).size 31 assert_equal 10, @response.body.scan(/item/).size
34 end 32 end
35 33
36 should 'default page size is the block limit' do 34 should 'default page size is the block limit' do
37 - 20.times do |i|  
38 - track = CommunityTrackPlugin::Track.create!(:abstract => 'abstract', :body => 'body', :name => "track#{i}", :profile => @community)  
39 - end 35 + 20.times { |i| create_track("track#{i}", @community) }
40 xhr :get, :view_tracks, :id => @block.id, :page => 1 36 xhr :get, :view_tracks, :id => @block.id, :page => 1
41 assert_equal @block.limit, @response.body.scan(/item/).size 37 assert_equal @block.limit, @response.body.scan(/item/).size
42 end 38 end
@@ -47,9 +43,7 @@ class CommunityTrackPluginPublicControllerTest &lt; ActionController::TestCase @@ -47,9 +43,7 @@ class CommunityTrackPluginPublicControllerTest &lt; ActionController::TestCase
47 end 43 end
48 44
49 should 'show more link in all tracks if there is no more tracks to show' do 45 should 'show more link in all tracks if there is no more tracks to show' do
50 - 10.times do |i|  
51 - CommunityTrackPlugin::Track.create!(:abstract => 'abstract', :body => 'body', :name => "track#{i}", :profile => @community)  
52 - end 46 + 10.times { |i| create_track("track#{i}", @community) }
53 get :all_tracks, :id => @block.id 47 get :all_tracks, :id => @block.id
54 assert assigns['show_more'] 48 assert assigns['show_more']
55 assert_match /track_list_more_#{@block.id}/, @response.body 49 assert_match /track_list_more_#{@block.id}/, @response.body
plugins/community_track/test/test_helper.rb
1 require File.dirname(__FILE__) + '/../../../test/test_helper' 1 require File.dirname(__FILE__) + '/../../../test/test_helper'
  2 +
  3 +def create_track(name, profile)
  4 + track = CommunityTrackPlugin::Track.new(:abstract => 'abstract', :body => 'body', :name => name, :profile => profile)
  5 + track.add_category(fast_create(Category))
  6 + track.save!
  7 + track
  8 +end
plugins/community_track/test/unit/community_track_plugin/step_test.rb
@@ -4,7 +4,11 @@ class StepTest &lt; ActiveSupport::TestCase @@ -4,7 +4,11 @@ class StepTest &lt; ActiveSupport::TestCase
4 4
5 def setup 5 def setup
6 @profile = fast_create(Community) 6 @profile = fast_create(Community)
7 - @track = CommunityTrackPlugin::Track.create(:profile_id => @profile.id, :name => 'track') 7 + @track = CommunityTrackPlugin::Track.new(:profile_id => @profile.id, :name => 'track')
  8 + @category = fast_create(Category)
  9 + @track.add_category(@category)
  10 + @track.save!
  11 +
8 @step = CommunityTrackPlugin::Step.new(:name => 'Step', :body => 'body', :profile => @profile, :parent => @track, :published => false, :end_date => Date.today, :start_date => Date.today) 12 @step = CommunityTrackPlugin::Step.new(:name => 'Step', :body => 'body', :profile => @profile, :parent => @track, :published => false, :end_date => Date.today, :start_date => Date.today)
9 Delayed::Job.destroy_all 13 Delayed::Job.destroy_all
10 end 14 end
plugins/community_track/test/unit/community_track_plugin/track_list_block_test.rb
@@ -3,13 +3,14 @@ require File.dirname(__FILE__) + &#39;/../../test_helper&#39; @@ -3,13 +3,14 @@ require File.dirname(__FILE__) + &#39;/../../test_helper&#39;
3 class TrackListBlockTest < ActiveSupport::TestCase 3 class TrackListBlockTest < ActiveSupport::TestCase
4 4
5 def setup 5 def setup
6 - @community = fast_create(Community)  
7 - @track = CommunityTrackPlugin::Track.create!(:abstract => 'abstract', :body => 'body', :name => 'track', :profile => @community)  
8 -  
9 - box = fast_create(Box, :owner_id => @community.id, :owner_type => @community.class.name) 6 + @profile = fast_create(Community)
  7 + @track = create_track('track', profile)
  8 + box = fast_create(Box, :owner_id => @profile.id, :owner_type => @profile.class.name)
10 @block = CommunityTrackPlugin::TrackListBlock.create!(:box => box) 9 @block = CommunityTrackPlugin::TrackListBlock.create!(:box => box)
11 end 10 end
12 11
  12 + attr_reader :profile
  13 +
13 should 'describe yourself' do 14 should 'describe yourself' do
14 assert CommunityTrackPlugin::TrackListBlock.description 15 assert CommunityTrackPlugin::TrackListBlock.description
15 end 16 end
@@ -23,38 +24,30 @@ class TrackListBlockTest &lt; ActiveSupport::TestCase @@ -23,38 +24,30 @@ class TrackListBlockTest &lt; ActiveSupport::TestCase
23 end 24 end
24 25
25 should 'list articles only of track type' do 26 should 'list articles only of track type' do
26 - article = fast_create(Article, :profile_id => @community.id)  
27 - assert_includes @community.articles, article 27 + article = fast_create(Article, :profile_id => profile.id)
  28 + assert_includes profile.articles, article
28 assert_equal [@track], @block.tracks 29 assert_equal [@track], @block.tracks
29 end 30 end
30 31
31 should 'list of articles be limited by block configuration' do 32 should 'list of articles be limited by block configuration' do
32 - (@block.limit + 1).times do |i|  
33 - track = CommunityTrackPlugin::Track.create!(:abstract => 'abstract', :body => 'body', :name => "track#{i}", :profile => @community)  
34 - end 33 + (@block.limit + 1).times { |i| create_track("track#{i}", profile) }
35 assert_equal @block.limit, @block.tracks.count 34 assert_equal @block.limit, @block.tracks.count
36 end 35 end
37 36
38 should 'return more link if has more tracks to show' do 37 should 'return more link if has more tracks to show' do
39 - @block.limit.times do |i|  
40 - track = CommunityTrackPlugin::Track.create!(:abstract => 'abstract', :body => 'body', :name => "track#{i}", :profile => @community)  
41 - end 38 + @block.limit.times { |i| create_track("track#{i}", profile) }
42 assert @block.footer 39 assert @block.footer
43 end 40 end
44 41
45 should 'do not return more link if there is no more tracks to show' do 42 should 'do not return more link if there is no more tracks to show' do
46 - (@block.limit-1).times do |i|  
47 - track = CommunityTrackPlugin::Track.create!(:abstract => 'abstract', :body => 'body', :name => "track#{i}", :profile => @community)  
48 - end 43 + (@block.limit-1).times { |i| create_track("track#{i}", profile) }
49 assert !@block.footer 44 assert !@block.footer
50 end 45 end
51 46
52 should 'count all tracks' do 47 should 'count all tracks' do
53 @block.owner.articles.destroy_all 48 @block.owner.articles.destroy_all
54 tracks_to_insert = @block.limit + 1 49 tracks_to_insert = @block.limit + 1
55 - tracks_to_insert.times do |i|  
56 - track = CommunityTrackPlugin::Track.create!(:abstract => 'abstract', :body => 'body', :name => "track#{i}", :profile => @community)  
57 - end 50 + tracks_to_insert.times { |i| create_track("track#{i}", profile) }
58 article = fast_create(Article, :profile_id => @block.owner.id) 51 article = fast_create(Article, :profile_id => @block.owner.id)
59 @block.reload 52 @block.reload
60 assert_includes @block.owner.articles, article 53 assert_includes @block.owner.articles, article
@@ -63,9 +56,7 @@ class TrackListBlockTest &lt; ActiveSupport::TestCase @@ -63,9 +56,7 @@ class TrackListBlockTest &lt; ActiveSupport::TestCase
63 56
64 should 'have a second page if there is more tracks than limit' do 57 should 'have a second page if there is more tracks than limit' do
65 @block.owner.articles.destroy_all 58 @block.owner.articles.destroy_all
66 - (@block.limit+1).times do |i|  
67 - track = CommunityTrackPlugin::Track.create!(:abstract => 'abstract', :body => 'body', :name => "track#{i}", :profile => @community)  
68 - end 59 + (@block.limit+1).times { |i| create_track("track#{i}", profile) }
69 assert @block.has_page?(2) 60 assert @block.has_page?(2)
70 assert !@block.has_page?(3) 61 assert !@block.has_page?(3)
71 end 62 end
@@ -74,9 +65,9 @@ class TrackListBlockTest &lt; ActiveSupport::TestCase @@ -74,9 +65,9 @@ class TrackListBlockTest &lt; ActiveSupport::TestCase
74 @block.owner.articles.destroy_all 65 @block.owner.articles.destroy_all
75 category = fast_create(Category) 66 category = fast_create(Category)
76 category2 = fast_create(Category) 67 category2 = fast_create(Category)
77 - track1 = CommunityTrackPlugin::Track.create!(:abstract => 'abstract', :body => 'body', :name => 'track1', :profile => @community)  
78 - track2 = CommunityTrackPlugin::Track.create!(:abstract => 'abstract', :body => 'body', :name => 'track2', :profile => @community)  
79 - track3 = CommunityTrackPlugin::Track.create!(:abstract => 'abstract', :body => 'body', :name => 'track3', :profile => @community) 68 + track1 = create_track("track1", profile)
  69 + track2 = create_track("track2", profile)
  70 + track3 = create_track("track3", profile)
80 track1.add_category(category) 71 track1.add_category(category)
81 @block.category_ids = [category.id] 72 @block.category_ids = [category.id]
82 assert_equal [track1], @block.all_tracks 73 assert_equal [track1], @block.all_tracks
@@ -85,8 +76,8 @@ class TrackListBlockTest &lt; ActiveSupport::TestCase @@ -85,8 +76,8 @@ class TrackListBlockTest &lt; ActiveSupport::TestCase
85 should 'return all tracks if block does not filter by category' do 76 should 'return all tracks if block does not filter by category' do
86 @block.owner.articles.destroy_all 77 @block.owner.articles.destroy_all
87 category = fast_create(Category) 78 category = fast_create(Category)
88 - track1 = CommunityTrackPlugin::Track.create!(:abstract => 'abstract', :body => 'body', :name => 'track1', :profile => @community)  
89 - track2 = CommunityTrackPlugin::Track.create!(:abstract => 'abstract', :body => 'body', :name => 'track2', :profile => @community) 79 + track1 = create_track("track1", profile)
  80 + track2 = create_track("track2", profile)
90 track1.add_category(category) 81 track1.add_category(category)
91 assert_includes @block.all_tracks, track1 82 assert_includes @block.all_tracks, track1
92 assert_includes @block.all_tracks, track2 83 assert_includes @block.all_tracks, track2
plugins/community_track/test/unit/community_track_plugin/track_test.rb
@@ -3,10 +3,10 @@ require File.dirname(__FILE__) + &#39;/../../test_helper&#39; @@ -3,10 +3,10 @@ require File.dirname(__FILE__) + &#39;/../../test_helper&#39;
3 class TrackTest < ActiveSupport::TestCase 3 class TrackTest < ActiveSupport::TestCase
4 4
5 def setup 5 def setup
6 - profile = fast_create(Community)  
7 - @track = CommunityTrackPlugin::Track.create!(:profile => profile, :name => 'track')  
8 - @step = CommunityTrackPlugin::Step.create!(:parent => @track, :start_date => Date.today, :end_date => Date.today, :name => 'step', :profile => profile)  
9 - @tool = fast_create(Article, :parent_id => @step.id, :profile_id => profile.id) 6 + @profile = fast_create(Community)
  7 + @track = create_track('track', @profile)
  8 + @step = CommunityTrackPlugin::Step.create!(:parent => @track, :start_date => Date.today, :end_date => Date.today, :name => 'step', :profile => @profile)
  9 + @tool = fast_create(Article, :parent_id => @step.id, :profile_id => @profile.id)
10 end 10 end
11 11
12 should 'describe yourself' do 12 should 'describe yourself' do
@@ -43,6 +43,7 @@ class TrackTest &lt; ActiveSupport::TestCase @@ -43,6 +43,7 @@ class TrackTest &lt; ActiveSupport::TestCase
43 top = fast_create(Category, :name => 'top category') 43 top = fast_create(Category, :name => 'top category')
44 category1 = fast_create(Category, :name => 'category1', :parent_id => top.id ) 44 category1 = fast_create(Category, :name => 'category1', :parent_id => top.id )
45 category2 = fast_create(Category, :name => 'category2', :parent_id => category1.id ) 45 category2 = fast_create(Category, :name => 'category2', :parent_id => category1.id )
  46 + @track.categories.delete_all
46 @track.add_category(category2, true) 47 @track.add_category(category2, true)
47 assert_equal 'top category', @track.category_name 48 assert_equal 'top category', @track.category_name
48 end 49 end
@@ -54,6 +55,7 @@ class TrackTest &lt; ActiveSupport::TestCase @@ -54,6 +55,7 @@ class TrackTest &lt; ActiveSupport::TestCase
54 55
55 should 'return category name of first category' do 56 should 'return category name of first category' do
56 category = fast_create(Category, :name => 'category') 57 category = fast_create(Category, :name => 'category')
  58 + @track.categories.delete_all
57 @track.add_category(category, true) 59 @track.add_category(category, true)
58 category2 = fast_create(Category, :name => 'category2') 60 category2 = fast_create(Category, :name => 'category2')
59 @track.add_category(category2, true) 61 @track.add_category(category2, true)
@@ -126,4 +128,15 @@ class TrackTest &lt; ActiveSupport::TestCase @@ -126,4 +128,15 @@ class TrackTest &lt; ActiveSupport::TestCase
126 assert_equal '', @track.first_paragraph 128 assert_equal '', @track.first_paragraph
127 end 129 end
128 130
  131 + should 'not be able to create a track without category' do
  132 + track = CommunityTrackPlugin::Track.create(:profile => @profile, :name => 'track')
  133 + assert track.errors.invalid?(:categories)
  134 + end
  135 +
  136 + should 'not be able to save a track without category' do
  137 + @track.categories.delete_all
  138 + @track.save
  139 + assert @track.errors.invalid?(:categories)
  140 + end
  141 +
129 end 142 end