diff --git a/app/models/members_block.rb b/app/models/members_block.rb new file mode 100644 index 0000000..8544493 --- /dev/null +++ b/app/models/members_block.rb @@ -0,0 +1,34 @@ +class MembersBlock < ProfileListBlock + + def self.description + _('A block that displays members.') + end + + def title + _('Members') + end + + def footer + profile = self.owner + lambda do + link_to _('All members'), :profile => profile.identifier, :controller => 'profile', :action => 'members' + end + end + + class Finder + + def initialize(members) + @members = members + end + + # FIXME optimize this !!! + def find(options) + Profile.find(:all, options.merge(:conditions => { :id => @members.map(&:id) })) + end + end + + def profile_finder + @profile_finder ||= Finder.new(owner.members) + end + +end diff --git a/test/unit/members_block_test.rb b/test/unit/members_block_test.rb new file mode 100644 index 0000000..4ecbc73 --- /dev/null +++ b/test/unit/members_block_test.rb @@ -0,0 +1,34 @@ +require File.dirname(__FILE__) + '/../test_helper' + +class MembersBlockTest < Test::Unit::TestCase + + should 'inherit from ProfileListBlock' do + assert_kind_of ProfileListBlock, MembersBlock.new + end + + should 'describe itself' do + assert_not_equal ProfileListBlock.description, MembersBlock.description + end + + should 'link to "all members" page' do + profile = create_user('mytestuser').person + block = MembersBlock.new + block.box = profile.boxes.first + block.save! + + expects(:_).with('All members').returns('All members') + expects(:link_to).with('All members' , :profile => 'mytestuser', :controller => 'profile', :action => 'members').returns('link-to-members') + + assert_equal 'link-to-members', instance_eval(&block.footer) + end + + should 'pick only members' do + profile = create_user('mytestuser').person + block = MembersBlock.new + block.box = profile.boxes.first + block.save! + + assert_equal profile.members, block.profiles + end + +end -- libgit2 0.21.2