Commit a9e829e6c307ca8a74c108244cc5d4b8823df82d
1 parent
9a5e1c66
Exists in
master
and in
29 other branches
ActionItem601: implemented "My Network" block
git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@2348 3f533792-8f58-4932-b0fe-aaf55b0a4547
Showing
9 changed files
with
109 additions
and
1 deletions
Show diff stats
app/controllers/my_profile/profile_design_controller.rb
| @@ -16,6 +16,7 @@ class ProfileDesignController < BoxOrganizerController | @@ -16,6 +16,7 @@ class ProfileDesignController < BoxOrganizerController | ||
| 16 | if profile.person? | 16 | if profile.person? |
| 17 | blocks << FriendsBlock | 17 | blocks << FriendsBlock |
| 18 | blocks << FavoriteEnterprisesBlock | 18 | blocks << FavoriteEnterprisesBlock |
| 19 | + blocks << MyNetworkBlock | ||
| 19 | end | 20 | end |
| 20 | 21 | ||
| 21 | # blocks exclusive for enterprises | 22 | # blocks exclusive for enterprises |
app/controllers/public/profile_controller.rb
| @@ -9,6 +9,10 @@ class ProfileController < ApplicationController | @@ -9,6 +9,10 @@ class ProfileController < ApplicationController | ||
| 9 | @tags = profile.tags | 9 | @tags = profile.tags |
| 10 | end | 10 | end |
| 11 | 11 | ||
| 12 | + def tags | ||
| 13 | + @tags = profile.tags | ||
| 14 | + end | ||
| 15 | + | ||
| 12 | def tag | 16 | def tag |
| 13 | @tag = params[:id] | 17 | @tag = params[:id] |
| 14 | @tagged = profile.find_tagged_with(@tag) | 18 | @tagged = profile.find_tagged_with(@tag) |
| @@ -0,0 +1,24 @@ | @@ -0,0 +1,24 @@ | ||
| 1 | +class MyNetworkBlock < Block | ||
| 2 | + | ||
| 3 | + include ActionController::UrlWriter | ||
| 4 | + | ||
| 5 | + def self.description | ||
| 6 | + _('A block that displays a summary of your network') | ||
| 7 | + end | ||
| 8 | + | ||
| 9 | + def default_title | ||
| 10 | + _('My network') | ||
| 11 | + end | ||
| 12 | + | ||
| 13 | + def content | ||
| 14 | + block_title(title) + | ||
| 15 | + content_tag( | ||
| 16 | + 'ul', | ||
| 17 | + content_tag('li', link_to(n_( 'One article published', '%d articles published', owner.articles.count) % owner.articles.count, owner.public_profile_url.merge(:action => 'sitemap') )) + | ||
| 18 | + content_tag('li', link_to(n__('One friend', '%d friends', owner.friends.count) % owner.friends.count, owner.public_profile_url.merge(:action => 'friends'))) + | ||
| 19 | + content_tag('li', link_to(n__('One community', '%d communities', owner.communities.count) % owner.communities.count, owner.public_profile_url.merge(:action => 'communities'))) + | ||
| 20 | + content_tag('li', link_to(n_('One tag', '%d tags', owner.tags.count) % owner.tags.count, owner.public_profile_url.merge(:action => 'tags'))) | ||
| 21 | + ) | ||
| 22 | + end | ||
| 23 | + | ||
| 24 | +end |
app/models/profile.rb
| @@ -278,7 +278,7 @@ class Profile < ActiveRecord::Base | @@ -278,7 +278,7 @@ class Profile < ActiveRecord::Base | ||
| 278 | end | 278 | end |
| 279 | 279 | ||
| 280 | # FIXME this can be SLOW | 280 | # FIXME this can be SLOW |
| 281 | - def tags(public_only = false) | 281 | + def tags |
| 282 | totals = {} | 282 | totals = {} |
| 283 | articles.each do |article| | 283 | articles.each do |article| |
| 284 | article.tags.each do |tag| | 284 | article.tags.each do |tag| |
lib/zen3_terminology.rb
| @@ -38,6 +38,10 @@ class Zen3Terminology < Noosfero::Terminology::Custom | @@ -38,6 +38,10 @@ class Zen3Terminology < Noosfero::Terminology::Custom | ||
| 38 | 'Favorite Enterprises' => N_('Favorite Organizations'), | 38 | 'Favorite Enterprises' => N_('Favorite Organizations'), |
| 39 | 'Enterprises in "%s"' => N_('Organizations in "%s"'), | 39 | 'Enterprises in "%s"' => N_('Organizations in "%s"'), |
| 40 | 'Register a new Enterprise' => N_('Register a new organization'), | 40 | 'Register a new Enterprise' => N_('Register a new organization'), |
| 41 | + 'One friend' => N_('One contact'), | ||
| 42 | + '%d friends' => N_('%d contacts'), | ||
| 43 | + 'One community' => N_('One group'), | ||
| 44 | + '%d communities' => N_('%d groups'), | ||
| 41 | }) | 45 | }) |
| 42 | end | 46 | end |
| 43 | 47 |
test/functional/profile_controller_test.rb
| @@ -249,4 +249,12 @@ class ProfileControllerTest < Test::Unit::TestCase | @@ -249,4 +249,12 @@ class ProfileControllerTest < Test::Unit::TestCase | ||
| 249 | assert_equal @profile.top_level_articles, assigns(:articles) | 249 | assert_equal @profile.top_level_articles, assigns(:articles) |
| 250 | end | 250 | end |
| 251 | 251 | ||
| 252 | + should 'list tags' do | ||
| 253 | + Person.any_instance.stubs(:tags).returns({ 'one' => 1, 'two' => 2}) | ||
| 254 | + get :tags, :profile => 'testuser' | ||
| 255 | + | ||
| 256 | + assert_tag :tag => 'div', :attributes => { :class => /main-block/ }, :descendant => { :tag => 'a', :attributes => { :href => '/profile/testuser/tag/one'} } | ||
| 257 | + assert_tag :tag => 'div', :attributes => { :class => /main-block/ }, :descendant => { :tag => 'a', :attributes => { :href => '/profile/testuser/tag/two'} } | ||
| 258 | + end | ||
| 259 | + | ||
| 252 | end | 260 | end |
| @@ -0,0 +1,60 @@ | @@ -0,0 +1,60 @@ | ||
| 1 | +require File.dirname(__FILE__) + '/../test_helper' | ||
| 2 | + | ||
| 3 | +class MyNetworkBlockTest < ActiveSupport::TestCase | ||
| 4 | + | ||
| 5 | + def setup | ||
| 6 | + @block = MyNetworkBlock.new | ||
| 7 | + @owner = Person.new(:identifier => 'testuser') | ||
| 8 | + @block.stubs(:owner).returns(@owner) | ||
| 9 | + | ||
| 10 | + owner.stubs(:environment).returns(Environment.default) | ||
| 11 | + end | ||
| 12 | + attr_reader :owner, :block | ||
| 13 | + | ||
| 14 | + should 'provide description' do | ||
| 15 | + assert_not_equal Block.description, MyNetworkBlock.description | ||
| 16 | + end | ||
| 17 | + | ||
| 18 | + should 'provide default title' do | ||
| 19 | + assert_not_equal Block.new.default_title, MyNetworkBlock.new.default_title | ||
| 20 | + end | ||
| 21 | + | ||
| 22 | + should 'count articles' do | ||
| 23 | + mock_articles = mock | ||
| 24 | + owner.stubs(:articles).returns(mock_articles) | ||
| 25 | + owner.stubs(:tags).returns({}) # don't let tags call articles | ||
| 26 | + mock_articles.stubs(:count).returns(5) | ||
| 27 | + | ||
| 28 | + assert_tag_in_string block.content, :tag => 'li', :descendant => { :tag => 'a', :content => '5 articles published', :attributes => { :href => /\/profile\/testuser\/sitemap$/ } } | ||
| 29 | + end | ||
| 30 | + | ||
| 31 | + should 'count friends' do | ||
| 32 | + mock_friends = mock | ||
| 33 | + owner.stubs(:friends).returns(mock_friends) | ||
| 34 | + mock_friends.stubs(:count).returns(8) | ||
| 35 | + | ||
| 36 | + assert_tag_in_string block.content, :tag => 'li', :descendant => { :tag => 'a', :content => '8 friends', :attributes => { :href => /\profile\/testuser\/friends/ }} | ||
| 37 | + end | ||
| 38 | + | ||
| 39 | + should 'count communities' do | ||
| 40 | + mock_communities = mock | ||
| 41 | + owner.stubs(:communities).returns(mock_communities) | ||
| 42 | + mock_communities.stubs(:count).returns(23) | ||
| 43 | + | ||
| 44 | + assert_tag_in_string block.content, :tag => 'li', :descendant => { :tag => 'a', :content => '23 communities', :attributes => { :href => /\profile\/testuser\/communities/ }} | ||
| 45 | + end | ||
| 46 | + | ||
| 47 | + should 'count tags' do | ||
| 48 | + mock_tags = mock | ||
| 49 | + owner.stubs(:tags).returns(mock_tags) | ||
| 50 | + mock_tags.stubs(:count).returns(436) | ||
| 51 | + | ||
| 52 | + assert_tag_in_string block.content, :tag => 'li', :descendant => { :tag => 'a', :content => '436 tags', :attributes => { :href => /\profile\/testuser\/tags/ }} | ||
| 53 | + end | ||
| 54 | + | ||
| 55 | + should 'display its title' do | ||
| 56 | + block.stubs(:title).returns('My Network') | ||
| 57 | + assert_tag_in_string block.content, :content => 'My Network' | ||
| 58 | + end | ||
| 59 | + | ||
| 60 | +end |
test/unit/profile_test.rb
| @@ -317,6 +317,10 @@ class ProfileTest < Test::Unit::TestCase | @@ -317,6 +317,10 @@ class ProfileTest < Test::Unit::TestCase | ||
| 317 | assert_equivalent [ third], profile.find_tagged_with('third-tag') | 317 | assert_equivalent [ third], profile.find_tagged_with('third-tag') |
| 318 | end | 318 | end |
| 319 | 319 | ||
| 320 | + should 'provide tag count' do | ||
| 321 | + assert_equal 0, Profile.new.tags.count | ||
| 322 | + end | ||
| 323 | + | ||
| 320 | should 'have administator role' do | 324 | should 'have administator role' do |
| 321 | Role.expects(:find_by_key).with('profile_admin').returns(Role.new) | 325 | Role.expects(:find_by_key).with('profile_admin').returns(Role.new) |
| 322 | assert_kind_of Role, Profile::Roles.admin | 326 | assert_kind_of Role, Profile::Roles.admin |