Commit 7f93cfa3bf15cd347a5d5ca0d126a5941344c9fc
1 parent
c3c68ac2
Exists in
staging
and in
42 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 | 1 | class ProfileController < ApplicationController |
| 2 | + | |
| 2 | 3 | needs_profile |
| 4 | + before_filter :check_public_profile | |
| 3 | 5 | |
| 4 | 6 | helper TagsHelper |
| 5 | 7 | |
| ... | ... | @@ -31,4 +33,13 @@ class ProfileController < ApplicationController |
| 31 | 33 | def favorite_enterprises |
| 32 | 34 | @favorite_enterprises = profile.favorite_enterprises |
| 33 | 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 | 45 | end | ... | ... |
app/models/profile.rb
| ... | ... | @@ -35,6 +35,8 @@ class Profile < ActiveRecord::Base |
| 35 | 35 | |
| 36 | 36 | acts_as_having_settings :field => :data |
| 37 | 37 | |
| 38 | + settings_items :public_profile, :public_content, :type => :boolean, :default => true | |
| 39 | + | |
| 38 | 40 | acts_as_mappable :default_units => :kms |
| 39 | 41 | |
| 40 | 42 | # Valid identifiers must match this format. | ... | ... |
test/functional/content_viewer_controller_test.rb
| ... | ... | @@ -229,4 +229,31 @@ class ContentViewerControllerTest < Test::Unit::TestCase |
| 229 | 229 | assert_tag :tag => 'div', :attributes => { :class => 'article-tags' }, :descendant => { :content => /This article's tags:/ } |
| 230 | 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 | 259 | end | ... | ... |
test/functional/profile_controller_test.rb
| ... | ... | @@ -187,4 +187,10 @@ class ProfileControllerTest < Test::Unit::TestCase |
| 187 | 187 | assert_no_tag :tag => 'a', :content => 'Leave this community' |
| 188 | 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 | 196 | end | ... | ... |
test/functional/profile_editor_controller_test.rb
| ... | ... | @@ -192,6 +192,23 @@ class ProfileEditorControllerTest < Test::Unit::TestCase |
| 192 | 192 | assert_tag :tag => 'input', :attributes => { :name => 'profile_data[info][contact_person]', :value => 'my contact' } |
| 193 | 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 | 212 | should 'show error messages for' |
| 196 | 213 | |
| 197 | 214 | end | ... | ... |
test/unit/profile_test.rb
| ... | ... | @@ -467,6 +467,26 @@ class ProfileTest < Test::Unit::TestCase |
| 467 | 467 | assert_not_includes c.members, p |
| 468 | 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 | 490 | private |
| 471 | 491 | |
| 472 | 492 | def assert_invalid_identifier(id) | ... | ... |