Commit 70396fe6af3f0d00c78dcfd76135a56107e46713
Exists in
master
and in
12 other branches
Merge branch 'event_block_improvements' into 'master'
Event block improvements See #724 See merge request !190
Showing
4 changed files
with
67 additions
and
6 deletions
Show diff stats
src/noosfero-spb/software_communities/lib/software_events_block.rb
1 | 1 | class SoftwareEventsBlock < Block |
2 | 2 | |
3 | + settings_items :amount_of_events, :type => :integer, :default => 3 | |
4 | + attr_accessible :amount_of_events | |
5 | + | |
6 | + validates :amount_of_events, | |
7 | + :presence => true, :numericality => { | |
8 | + greater_than_or_equal_to: 1 | |
9 | + } | |
10 | + | |
3 | 11 | def self.description |
4 | 12 | _('Software community events') |
5 | 13 | end |
... | ... | @@ -29,7 +37,7 @@ class SoftwareEventsBlock < Block |
29 | 37 | |
30 | 38 | def get_events |
31 | 39 | yesterday = DateTime.yesterday.end_of_day |
32 | - self.owner.events.where("end_date > ? OR end_date IS NULL", yesterday).order(:start_date) | |
40 | + self.owner.events.where("start_date > ?", yesterday).order(:start_date, :id).limit(self.amount_of_events) | |
33 | 41 | end |
34 | 42 | |
35 | 43 | def get_events_except event_slug="" | ... | ... |
src/noosfero-spb/software_communities/test/functional/software_communities_plugin_profile_controller_test.rb
... | ... | @@ -57,6 +57,37 @@ class SoftwareCommunitiesPluginProfileControllerTest < ActionController::TestCas |
57 | 57 | assert_equal "Could not find the download file", session[:notice] |
58 | 58 | end |
59 | 59 | |
60 | + should "display limited community events" do | |
61 | + @e1 = Event.new :name=>"Event 1", :body=>"Event 1 body", | |
62 | + :start_date=>DateTime.now, | |
63 | + :end_date=>(DateTime.now + 1.month) | |
64 | + | |
65 | + @e2 = Event.new :name=>"Event 2", :body=>"Event 2 body", | |
66 | + :start_date=>(DateTime.now + 10.days), | |
67 | + :end_date=>(DateTime.now + 11.days) | |
68 | + | |
69 | + @e3 = Event.new :name=>"Event 3", :body=>"Event 3 body", | |
70 | + :start_date=>(DateTime.now + 20.days), | |
71 | + :end_date=>(DateTime.now + 30.days) | |
72 | + | |
73 | + @software.community.events << @e1 | |
74 | + @software.community.events << @e2 | |
75 | + @software.community.events << @e3 | |
76 | + @software.community.save! | |
77 | + | |
78 | + events_block = SoftwareEventsBlock.new | |
79 | + events_block.amount_of_events = 2 | |
80 | + events_block.display = "always" | |
81 | + box = MainBlock.last.box | |
82 | + events_block.box = box | |
83 | + events_block.save! | |
84 | + | |
85 | + get :index, :profile=>@software.community.identifier | |
86 | + assert_tag :tag => 'div', :attributes => { :class => 'software-community-events-block' }, :descendant => { :tag => 'a', :content => 'Event 1' } | |
87 | + assert_tag :tag => 'div', :attributes => { :class => 'software-community-events-block' }, :descendant => { :tag => 'a', :content => 'Event 2' } | |
88 | + assert_no_tag :tag => 'div', :attributes => { :class => 'software-community-events-block' }, :descendant => { :tag => 'a', :content => 'Event 3' } | |
89 | + end | |
90 | + | |
60 | 91 | should "notice when given invalid download params" do |
61 | 92 | download_block = DownloadBlock.last |
62 | 93 | get :download_file, :profile=>@software.community.identifier, | ... | ... |
src/noosfero-spb/software_communities/test/unit/software_events_block_test.rb
... | ... | @@ -27,29 +27,40 @@ class SoftwareEventsBlockTest < ActiveSupport::TestCase |
27 | 27 | :start_date=>(DateTime.now), :end_date=>(DateTime.now) |
28 | 28 | |
29 | 29 | @e5 = Event.new :name=>"Event 5", :body=>"Event 5 body", |
30 | - :start_date=>(DateTime.now - 5.days) | |
30 | + :start_date=>(DateTime.now + 5.days) | |
31 | + | |
32 | + @e6 = Event.new :name=>"Event 6", :body=>"Event 5 body", | |
33 | + :start_date=>(DateTime.now) | |
31 | 34 | |
32 | 35 | @community.events << @e1 |
33 | 36 | @community.events << @e2 |
34 | 37 | @community.events << @e3 |
35 | 38 | @community.events << @e4 |
36 | 39 | @community.events << @e5 |
40 | + @community.events << @e6 | |
37 | 41 | @community.save! |
38 | 42 | end |
39 | 43 | |
40 | - should "give community events that have not yet finished ordered by start date" do | |
44 | + should "get events with start date equals or bigger than current day ordered by start date" do | |
41 | 45 | events = @software_events_block.get_events |
42 | 46 | |
47 | + assert_equal false, events.include?(@e2) | |
43 | 48 | assert_equal false, events.include?(@e3) |
49 | + | |
50 | + assert_equal true, events.include?(@e1) | |
44 | 51 | assert_equal true, events.include?(@e4) |
45 | - assert_equal @e2, events.first | |
46 | - assert_equal @e1, events.last | |
52 | + assert_equal true, events.include?(@e5) | |
53 | + assert_equal true, events.include?(@e6) | |
54 | + | |
55 | + assert_equal @e1, events.first | |
56 | + assert_equal @e5, events.last | |
47 | 57 | end |
48 | 58 | |
49 | 59 | should "include community events that have no end date" do |
50 | 60 | events = @software_events_block.get_events |
51 | 61 | |
52 | 62 | assert_equal true, events.include?(@e5) |
63 | + assert_equal true, events.include?(@e6) | |
53 | 64 | end |
54 | 65 | |
55 | 66 | should "give community events except by a event with a given slug" do |
... | ... | @@ -69,8 +80,11 @@ class SoftwareEventsBlockTest < ActiveSupport::TestCase |
69 | 80 | should "tell if there are events to be displayed when given a event page slug" do |
70 | 81 | update_all_events (DateTime.now - 2.days), (DateTime.now - 1.day) |
71 | 82 | |
83 | + assert_equal false, @software_events_block.has_events_to_display? | |
84 | + | |
72 | 85 | last_event = @community.events.last |
73 | - last_event.end_date = DateTime.now + 10.days | |
86 | + last_event.start_date = DateTime.now | |
87 | + last_event.end_date = DateTime.now + 1.day | |
74 | 88 | last_event.save! |
75 | 89 | |
76 | 90 | assert_equal true, @software_events_block.has_events_to_display? | ... | ... |
src/noosfero-spb/software_communities/views/box_organizer/_software_events_block.html.erb
0 → 100644
... | ... | @@ -0,0 +1,8 @@ |
1 | +<div id='edit-software-events-block' class='formfieldline'> | |
2 | + <%= label_tag 'block_amount_of_events', _('Amount of events to display:') %> | |
3 | + <span class='hint' title=" <%= _('This field must contain values bigger than 0') %>"> (?) </span> | |
4 | + <div class='formfield'> | |
5 | + <%= number_field_tag 'block[amount_of_events]', @block.amount_of_events, min: 1, max: 100 %> | |
6 | + </div> | |
7 | +</div> | |
8 | + | ... | ... |