Commit 7f93cfa3bf15cd347a5d5ca0d126a5941344c9fc
1 parent
c3c68ac2
Exists in
master
and in
29 other branches
ActionItem295: switching profile visualization as public/private (still
missing user interface) git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@1801 3f533792-8f58-4932-b0fe-aaf55b0a4547
Showing
7 changed files
with
89 additions
and
0 deletions
Show diff stats
app/controllers/public/profile_controller.rb
| 1 | class ProfileController < ApplicationController | 1 | class ProfileController < ApplicationController |
| 2 | + | ||
| 2 | needs_profile | 3 | needs_profile |
| 4 | + before_filter :check_public_profile | ||
| 3 | 5 | ||
| 4 | helper TagsHelper | 6 | helper TagsHelper |
| 5 | 7 | ||
| @@ -31,4 +33,13 @@ class ProfileController < ApplicationController | @@ -31,4 +33,13 @@ class ProfileController < ApplicationController | ||
| 31 | def favorite_enterprises | 33 | def favorite_enterprises |
| 32 | @favorite_enterprises = profile.favorite_enterprises | 34 | @favorite_enterprises = profile.favorite_enterprises |
| 33 | end | 35 | end |
| 36 | + | ||
| 37 | + protected | ||
| 38 | + | ||
| 39 | + def check_public_profile | ||
| 40 | + if !profile.public_profile | ||
| 41 | + render :action => 'private_profile', :status => 403, :layout => false | ||
| 42 | + end | ||
| 43 | + end | ||
| 44 | + | ||
| 34 | end | 45 | end |
app/models/profile.rb
| @@ -35,6 +35,8 @@ class Profile < ActiveRecord::Base | @@ -35,6 +35,8 @@ class Profile < ActiveRecord::Base | ||
| 35 | 35 | ||
| 36 | acts_as_having_settings :field => :data | 36 | acts_as_having_settings :field => :data |
| 37 | 37 | ||
| 38 | + settings_items :public_profile, :public_content, :type => :boolean, :default => true | ||
| 39 | + | ||
| 38 | acts_as_mappable :default_units => :kms | 40 | acts_as_mappable :default_units => :kms |
| 39 | 41 | ||
| 40 | # Valid identifiers must match this format. | 42 | # Valid identifiers must match this format. |
test/functional/content_viewer_controller_test.rb
| @@ -229,4 +229,31 @@ class ContentViewerControllerTest < Test::Unit::TestCase | @@ -229,4 +229,31 @@ class ContentViewerControllerTest < Test::Unit::TestCase | ||
| 229 | assert_tag :tag => 'div', :attributes => { :class => 'article-tags' }, :descendant => { :content => /This article's tags:/ } | 229 | assert_tag :tag => 'div', :attributes => { :class => 'article-tags' }, :descendant => { :content => /This article's tags:/ } |
| 230 | end | 230 | end |
| 231 | 231 | ||
| 232 | + should 'not display articles from private content' do | ||
| 233 | + profile.articles.create!(:name => 'test') | ||
| 234 | + profile.update_attributes!(:public_content => false) | ||
| 235 | + | ||
| 236 | + get :view_page, :profile => profile.identifier, :page => [ 'test' ] | ||
| 237 | + assert_response 403 | ||
| 238 | + end | ||
| 239 | + | ||
| 240 | + #should 'display articles to its owner' do | ||
| 241 | + #profile.articles.create!(:name => 'test') | ||
| 242 | + #profile.update_attributes!(:public_content => false) | ||
| 243 | + | ||
| 244 | + #login_as(@profile.identifier) | ||
| 245 | + #get :view_page, :profile => profile.identifier, :page => [ 'test' ] | ||
| 246 | + #assert_response 200 | ||
| 247 | + #end | ||
| 248 | + | ||
| 249 | + #should 'display articles to profile members' do | ||
| 250 | + #c = Community.create!(:name => 'my community') | ||
| 251 | + #c.update_attributes!(:public_content => false) | ||
| 252 | + #c.add_member(@profile) | ||
| 253 | + | ||
| 254 | + #login_as(@profile.identifier) | ||
| 255 | + #get :view_page, :profile => profile.identifier, :page => [ 'test' ] | ||
| 256 | + #assert_response 200 | ||
| 257 | + #end | ||
| 258 | + | ||
| 232 | end | 259 | end |
test/functional/profile_controller_test.rb
| @@ -187,4 +187,10 @@ class ProfileControllerTest < Test::Unit::TestCase | @@ -187,4 +187,10 @@ class ProfileControllerTest < Test::Unit::TestCase | ||
| 187 | assert_no_tag :tag => 'a', :content => 'Leave this community' | 187 | assert_no_tag :tag => 'a', :content => 'Leave this community' |
| 188 | end | 188 | end |
| 189 | 189 | ||
| 190 | + should 'not display private profile' do | ||
| 191 | + @profile.update_attributes!(:public_profile => false) | ||
| 192 | + get :index, :profile => @profile.identifier | ||
| 193 | + assert_response 403 | ||
| 194 | + end | ||
| 195 | + | ||
| 190 | end | 196 | end |
test/functional/profile_editor_controller_test.rb
| @@ -192,6 +192,23 @@ class ProfileEditorControllerTest < Test::Unit::TestCase | @@ -192,6 +192,23 @@ class ProfileEditorControllerTest < Test::Unit::TestCase | ||
| 192 | assert_tag :tag => 'input', :attributes => { :name => 'profile_data[info][contact_person]', :value => 'my contact' } | 192 | assert_tag :tag => 'input', :attributes => { :name => 'profile_data[info][contact_person]', :value => 'my contact' } |
| 193 | end | 193 | end |
| 194 | 194 | ||
| 195 | + should 'display profile publication option in edit profile screen' do | ||
| 196 | + profile = Profile['ze'] | ||
| 197 | + get :edit, :profile => 'ze' | ||
| 198 | + assert_tag :tag => 'input', :attributes => { :type => 'checkbox', :checked => 'checked', :name => 'profile_data[public_profile]', :value => 'true' } | ||
| 199 | + assert_tag :tag => 'input', :attributes => { :type => 'hidden', :name => 'profile_data[public_profile]', :value => false } | ||
| 200 | + end | ||
| 201 | + | ||
| 202 | + should 'save profile publication option set to true' do | ||
| 203 | + post :edit, :profile => 'ze', :profile_data => { :public_profile => 'true' } | ||
| 204 | + assert_equal true, Profile['ze'].public_profile | ||
| 205 | + end | ||
| 206 | + | ||
| 207 | + should 'save profile publication option set to false' do | ||
| 208 | + post :edit, :profile => 'ze', :profile_data => { :public_profile => 'false' } | ||
| 209 | + assert_equal false, Profile['ze'].public_profile | ||
| 210 | + end | ||
| 211 | + | ||
| 195 | should 'show error messages for' | 212 | should 'show error messages for' |
| 196 | 213 | ||
| 197 | end | 214 | end |
test/unit/profile_test.rb
| @@ -467,6 +467,26 @@ class ProfileTest < Test::Unit::TestCase | @@ -467,6 +467,26 @@ class ProfileTest < Test::Unit::TestCase | ||
| 467 | assert_not_includes c.members, p | 467 | assert_not_includes c.members, p |
| 468 | end | 468 | end |
| 469 | 469 | ||
| 470 | + should 'have a public profile by default' do | ||
| 471 | + assert_equal true, Profile.new.public_profile | ||
| 472 | + end | ||
| 473 | + | ||
| 474 | + should 'be able to turn profile private' do | ||
| 475 | + p = Profile.new | ||
| 476 | + p.public_profile = false | ||
| 477 | + assert_equal false, p.public_profile | ||
| 478 | + end | ||
| 479 | + | ||
| 480 | + should 'have public content by default' do | ||
| 481 | + assert_equal true, Profile.new.public_content | ||
| 482 | + end | ||
| 483 | + | ||
| 484 | + should 'be able to turn content private' do | ||
| 485 | + p = Profile.new | ||
| 486 | + p.public_content = false | ||
| 487 | + assert_equal false, p.public_content | ||
| 488 | + end | ||
| 489 | + | ||
| 470 | private | 490 | private |
| 471 | 491 | ||
| 472 | def assert_invalid_identifier(id) | 492 | def assert_invalid_identifier(id) |