Commit 1f9140cd38a89fe45b7b3fa14dbba49101de72b3
Committed by
Antonio Terceiro
1 parent
f72561ee
Exists in
master
and in
29 other branches
Allowing private users/organizations to be viewed
* Added migration to add visible to profiles * Some improvements on profile screen * A private profile displays a different profile screen * added profile image, name, description and message * added link to join if profile is a community * added link to "add friend" if profile is a person * Added description in profile * Added field description to organization and person form * Removed link and added button on not_found page * Added css for not access_denied message * Changed css for flash messages * Recent articles doens't list private profile's articles * Private profiles are listed on blocks and searches * Invisible profiles are never listed * Join community popup will be displayed if profile is private * Join community popup will not be displayed if profile is invisible * If an organization is private, it is also closed
Showing
50 changed files
with
717 additions
and
209 deletions
Show diff stats
app/controllers/public/content_viewer_controller.rb
... | ... | @@ -47,7 +47,13 @@ class ContentViewerController < ApplicationController |
47 | 47 | end |
48 | 48 | |
49 | 49 | if !@page.display_to?(user) |
50 | - render_access_denied(_('You are not allowed to view this content. You can contact the owner of this profile to request access then.')) | |
50 | + if profile.display_info_to?(user) || !profile.visible? | |
51 | + message = _('You are not allowed to view this content. You can contact the owner of this profile to request access then.') | |
52 | + render_access_denied(message) | |
53 | + elsif !profile.public? | |
54 | + redirect_to :controller => 'profile', :action => 'index', :profile => profile.identifier | |
55 | + end | |
56 | + return | |
51 | 57 | end |
52 | 58 | |
53 | 59 | # At this point the page will be showed | ... | ... |
app/controllers/public/profile_controller.rb
1 | 1 | class ProfileController < PublicController |
2 | 2 | |
3 | 3 | needs_profile |
4 | - before_filter :check_access_to_profile | |
4 | + before_filter :check_access_to_profile, :except => [:join, :refuse_join, :refuse_for_now, :index] | |
5 | 5 | before_filter :store_before_join, :only => [:join] |
6 | 6 | before_filter :login_required, :only => [:join, :refuse_join, :leave] |
7 | 7 | |
... | ... | @@ -9,6 +9,9 @@ class ProfileController < PublicController |
9 | 9 | |
10 | 10 | def index |
11 | 11 | @tags = profile.article_tags |
12 | + unless profile.display_info_to?(user) | |
13 | + profile.visible? ? private_profile : invisible_profile | |
14 | + end | |
12 | 15 | end |
13 | 16 | |
14 | 17 | def tags |
... | ... | @@ -112,7 +115,7 @@ class ProfileController < PublicController |
112 | 115 | |
113 | 116 | def check_access_to_profile |
114 | 117 | unless profile.display_info_to?(user) |
115 | - render_access_denied(_("Sorry, this profile was defined as private by its owner. You'll not be able to view content here unless the profile owner adds you."), _("Oops ... you cannot go ahead here")) | |
118 | + redirect_to :action => 'index' | |
116 | 119 | end |
117 | 120 | end |
118 | 121 | |
... | ... | @@ -130,6 +133,21 @@ class ProfileController < PublicController |
130 | 133 | end |
131 | 134 | end |
132 | 135 | |
136 | + def private_profile | |
137 | + if profile.person? | |
138 | + @action = :add_friend | |
139 | + @message = _("The content here is available to %s's friends only." % profile.short_name) | |
140 | + else | |
141 | + @action = :join | |
142 | + @message = _('The contents in this community is available to members only.') | |
143 | + end | |
144 | + @no_design_blocks = true | |
145 | + end | |
146 | + | |
147 | + def invisible_profile | |
148 | + render_access_denied(_("Sorry, this profile was defined as private by its owner. You'll not be able to view content here unless the profile owner adds adds you."), _("Oops ... you cannot go ahead here")) | |
149 | + end | |
150 | + | |
133 | 151 | def per_page |
134 | 152 | Noosfero::Constants::PROFILE_PER_PAGE |
135 | 153 | end | ... | ... |
app/models/article.rb
... | ... | @@ -125,8 +125,9 @@ class Article < ActiveRecord::Base |
125 | 125 | "advertise = ? AND |
126 | 126 | public_article = ? AND |
127 | 127 | published = ? AND |
128 | + profiles.visible = ? AND | |
128 | 129 | profiles.public_profile = ? AND |
129 | - ((articles.type != ? and articles.type != ? and articles.type != ?) OR articles.type is NULL)", true, true, true, true, 'UploadedFile', 'RssFeed', 'Blog' | |
130 | + ((articles.type != ? and articles.type != ? and articles.type != ?) OR articles.type is NULL)", true, true, true, true, true, 'UploadedFile', 'RssFeed', 'Blog' | |
130 | 131 | ], |
131 | 132 | :include => 'profile', |
132 | 133 | :order => 'articles.published_at desc, articles.id desc' |
... | ... | @@ -220,6 +221,8 @@ class Article < ActiveRecord::Base |
220 | 221 | false |
221 | 222 | end |
222 | 223 | |
224 | + named_scope :folders, :conditions => { :type => ['Folder', 'Blog'] } | |
225 | + | |
223 | 226 | def display_to?(user) |
224 | 227 | if self.public_article |
225 | 228 | self.profile.display_info_to?(user) |
... | ... | @@ -249,7 +252,7 @@ class Article < ActiveRecord::Base |
249 | 252 | end |
250 | 253 | |
251 | 254 | def public? |
252 | - profile.public? && public_article | |
255 | + profile.visible? && profile.public? && public_article | |
253 | 256 | end |
254 | 257 | |
255 | 258 | def copy(options) | ... | ... |
app/models/communities_block.rb
... | ... | @@ -34,9 +34,9 @@ class CommunitiesBlock < ProfileListBlock |
34 | 34 | |
35 | 35 | def profile_count |
36 | 36 | if owner.kind_of?(Environment) |
37 | - owner.communities.count(:conditions => { :public_profile => true }) | |
37 | + owner.communities.count(:conditions => { :visible => true }) | |
38 | 38 | else |
39 | - owner.communities(:public_profile => true).count | |
39 | + owner.communities(:visible => true).count | |
40 | 40 | end |
41 | 41 | end |
42 | 42 | |
... | ... | @@ -49,9 +49,9 @@ class CommunitiesBlock < ProfileListBlock |
49 | 49 | # FIXME when owner is an environment (i.e. listing communities globally |
50 | 50 | # this can become SLOW) |
51 | 51 | if block.owner.kind_of?(Environment) |
52 | - Community.find(:all, :conditions => {:environment_id => block.owner.id, :public_profile => true}, :limit => block.limit, :order => 'random()').map(&:id) | |
52 | + block.owner.communities.all(:conditions => {:visible => true}, :limit => block.limit, :order => 'random()').map(&:id) | |
53 | 53 | else |
54 | - block.owner.communities.select(&:public_profile).map(&:id) | |
54 | + block.owner.communities(:visible => true).map(&:id) | |
55 | 55 | end |
56 | 56 | end |
57 | 57 | end | ... | ... |
app/models/community.rb
... | ... | @@ -2,7 +2,6 @@ class Community < Organization |
2 | 2 | N_('Community') |
3 | 3 | N_('Language') |
4 | 4 | |
5 | - settings_items :description | |
6 | 5 | settings_items :language |
7 | 6 | settings_items :zip_code, :city, :state, :country |
8 | 7 | |
... | ... | @@ -28,7 +27,6 @@ class Community < Organization |
28 | 27 | state |
29 | 28 | country |
30 | 29 | zip_code |
31 | - description | |
32 | 30 | language |
33 | 31 | ] |
34 | 32 | ... | ... |
app/models/enterprises_block.rb
... | ... | @@ -30,9 +30,9 @@ class EnterprisesBlock < ProfileListBlock |
30 | 30 | |
31 | 31 | def profile_count |
32 | 32 | if owner.kind_of?(Environment) |
33 | - owner.enterprises.count(:conditions => { :public_profile => true }) | |
33 | + owner.enterprises.count(:conditions => { :visible => true }) | |
34 | 34 | else |
35 | - owner.enterprises(:public_profile => true).count | |
35 | + owner.enterprises(:visible => true).count | |
36 | 36 | end |
37 | 37 | |
38 | 38 | end |
... | ... | @@ -46,9 +46,9 @@ class EnterprisesBlock < ProfileListBlock |
46 | 46 | # FIXME when owner is an environment (i.e. listing enterprises globally |
47 | 47 | # this can become SLOW) |
48 | 48 | if block.owner.kind_of?(Environment) |
49 | - Enterprise.find(:all, :conditions => {:environment_id => block.owner.id, :public_profile => true}, :limit => block.limit, :order => 'random()').map(&:id) | |
49 | + block.owner.enterprises.all(:conditions => {:visible => true}, :limit => block.limit, :order => 'random()').map(&:id) | |
50 | 50 | else |
51 | - block.owner.enterprises.select(&:public_profile).map(&:id) | |
51 | + block.owner.enterprises.select(&:visible).map(&:id) | |
52 | 52 | end |
53 | 53 | end |
54 | 54 | end | ... | ... |
app/models/environment.rb
... | ... | @@ -683,11 +683,11 @@ class Environment < ActiveRecord::Base |
683 | 683 | |
684 | 684 | def create_templates |
685 | 685 | pre = self.name.to_slug + '_' |
686 | - ent_id = Enterprise.create!(:name => 'Enterprise template', :identifier => pre + 'enterprise_template', :environment => self, :public_profile => false).id | |
687 | - com_id = Community.create!(:name => 'Community template', :identifier => pre + 'community_template', :environment => self, :public_profile => false).id | |
686 | + ent_id = Enterprise.create!(:name => 'Enterprise template', :identifier => pre + 'enterprise_template', :environment => self, :visible => false).id | |
687 | + com_id = Community.create!(:name => 'Community template', :identifier => pre + 'community_template', :environment => self, :visible => false).id | |
688 | 688 | pass = Digest::MD5.hexdigest rand.to_s |
689 | 689 | user = User.create!(:login => (pre + 'person_template'), :email => (pre + 'template@template.noo'), :password => pass, :password_confirmation => pass, :environment => self).person |
690 | - user.public_profile = false | |
690 | + user.visible = false | |
691 | 691 | user.save! |
692 | 692 | usr_id = user.id |
693 | 693 | self.settings[:enterprise_template_id] = ent_id | ... | ... |
app/models/environment_statistics_block.rb
... | ... | @@ -13,9 +13,9 @@ class EnvironmentStatisticsBlock < Block |
13 | 13 | end |
14 | 14 | |
15 | 15 | def content |
16 | - users = owner.people.count(:conditions => { :public_profile => true }) | |
17 | - enterprises = owner.enterprises.count(:conditions => { :public_profile => true }) | |
18 | - communities = owner.communities.count(:conditions => { :public_profile => true }) | |
16 | + users = owner.people.visible.count | |
17 | + enterprises = owner.enterprises.visible.count | |
18 | + communities = owner.communities.visible.count | |
19 | 19 | |
20 | 20 | info = [ |
21 | 21 | n_('One user', '%{num} users', users) % { :num => users }, | ... | ... |
app/models/friends_block.rb
app/models/members_block.rb
... | ... | @@ -20,7 +20,7 @@ class MembersBlock < ProfileListBlock |
20 | 20 | end |
21 | 21 | |
22 | 22 | def profile_count |
23 | - owner.members.select {|member| member.public_profile? }.count | |
23 | + owner.members.select {|member| member.visible? }.count | |
24 | 24 | end |
25 | 25 | |
26 | 26 | def profile_finder |
... | ... | @@ -30,7 +30,7 @@ class MembersBlock < ProfileListBlock |
30 | 30 | # Finds random members, up to the limit. |
31 | 31 | class Finder < ProfileListBlock::Finder |
32 | 32 | def ids |
33 | - block.owner.members.map(&:id) | |
33 | + block.owner.members.select {|member| member.visible? }.map(&:id) | |
34 | 34 | end |
35 | 35 | end |
36 | 36 | ... | ... |
app/models/organization.rb
... | ... | @@ -6,6 +6,10 @@ class Organization < Profile |
6 | 6 | closed |
7 | 7 | end |
8 | 8 | |
9 | + before_save do |organization| | |
10 | + organization.closed = true if !organization.public_profile? | |
11 | + end | |
12 | + | |
9 | 13 | settings_items :moderated_articles, :type => :boolean, :default => false |
10 | 14 | def moderated_articles? |
11 | 15 | moderated_articles |
... | ... | @@ -47,6 +51,7 @@ class Organization < Profile |
47 | 51 | contact_person |
48 | 52 | contact_phone |
49 | 53 | contact_email |
54 | + description | |
50 | 55 | legal_form |
51 | 56 | economic_activity |
52 | 57 | management_information | ... | ... |
app/models/people_block.rb
... | ... | @@ -18,7 +18,7 @@ class PeopleBlock < ProfileListBlock |
18 | 18 | |
19 | 19 | class Finder < ProfileListBlock::Finder |
20 | 20 | def ids |
21 | - Person.find(:all, :select => 'id', :conditions => { :environment_id => block.owner.id, :public_profile => true}, :limit => block.limit, :order => 'random()') | |
21 | + block.owner.people.visible.all(:limit => block.limit, :order => 'random()').map(&:id) | |
22 | 22 | end |
23 | 23 | end |
24 | 24 | |
... | ... | @@ -29,7 +29,7 @@ class PeopleBlock < ProfileListBlock |
29 | 29 | end |
30 | 30 | |
31 | 31 | def profile_count |
32 | - owner.people.count(:conditions => {:public_profile => true}) | |
32 | + owner.people.visible.count | |
33 | 33 | end |
34 | 34 | |
35 | 35 | end | ... | ... |
app/models/person.rb
... | ... | @@ -66,6 +66,7 @@ class Person < Profile |
66 | 66 | custom_formation |
67 | 67 | contact_phone |
68 | 68 | contact_information |
69 | + description | |
69 | 70 | ] |
70 | 71 | |
71 | 72 | def self.fields |
... | ... | @@ -121,6 +122,7 @@ class Person < Profile |
121 | 122 | end |
122 | 123 | |
123 | 124 | def memberships(conditions = {}) |
125 | + # FIXME this should be a proper ActiveRecord relationship! | |
124 | 126 | Profile.find( |
125 | 127 | :all, |
126 | 128 | :conditions => self.class.conditions_for_profiles(conditions, self), |
... | ... | @@ -236,7 +238,7 @@ class Person < Profile |
236 | 238 | has_and_belongs_to_many :refused_communities, :class_name => 'Community', :join_table => 'refused_join_community' |
237 | 239 | |
238 | 240 | def ask_to_join?(community) |
239 | - return false if !community.public_profile | |
241 | + return false if !community.visible? | |
240 | 242 | return false if memberships.include?(community) |
241 | 243 | return false if AddMember.find(:first, :conditions => {:requestor_id => self.id, :target_id => community.id}) |
242 | 244 | !refused_communities.include?(community) | ... | ... |
app/models/profile.rb
... | ... | @@ -53,6 +53,8 @@ class Profile < ActiveRecord::Base |
53 | 53 | |
54 | 54 | acts_as_taggable |
55 | 55 | |
56 | + named_scope :visible, :conditions => { :visible => true } | |
57 | + | |
56 | 58 | # FIXME ugly workaround |
57 | 59 | def self.human_attribute_name(attrib) |
58 | 60 | _(self.superclass.human_attribute_name(attrib)) |
... | ... | @@ -73,6 +75,9 @@ class Profile < ActiveRecord::Base |
73 | 75 | acts_as_having_settings :field => :data |
74 | 76 | |
75 | 77 | settings_items :public_content, :type => :boolean, :default => true |
78 | + settings_items :description | |
79 | + | |
80 | + validates_length_of :description, :maximum => 550, :allow_nil => true | |
76 | 81 | |
77 | 82 | acts_as_mappable :default_units => :kms |
78 | 83 | |
... | ... | @@ -283,7 +288,7 @@ class Profile < ActiveRecord::Base |
283 | 288 | self.save_without_validation! |
284 | 289 | end |
285 | 290 | |
286 | - xss_terminate :only => [ :name, :nickname, :address, :contact_phone ] | |
291 | + xss_terminate :only => [ :name, :nickname, :address, :contact_phone, :description ] | |
287 | 292 | xss_terminate :only => [ :custom_footer, :custom_header ], :with => 'white_list' |
288 | 293 | |
289 | 294 | # returns the contact email for this profile. |
... | ... | @@ -508,15 +513,10 @@ private :generate_url, :url_options |
508 | 513 | # returns +true+ if the given +user+ can see profile information about this |
509 | 514 | # +profile+, and +false+ otherwise. |
510 | 515 | def display_info_to?(user) |
511 | - if self.public_profile | |
516 | + if self.public? | |
512 | 517 | true |
513 | 518 | else |
514 | - if user.nil? | |
515 | - false | |
516 | - else | |
517 | - # other possibilities would come here | |
518 | - (user == self) || (user.is_admin?(self.environment)) || (user.memberships.include?(self)) | |
519 | - end | |
519 | + display_private_info_to?(user) | |
520 | 520 | end |
521 | 521 | end |
522 | 522 | |
... | ... | @@ -587,7 +587,11 @@ private :generate_url, :url_options |
587 | 587 | end |
588 | 588 | |
589 | 589 | def public? |
590 | - public_profile | |
590 | + visible && public_profile | |
591 | + end | |
592 | + | |
593 | + def privacy_setting | |
594 | + self.public? ? _('Public profile') : _('Private profile') | |
591 | 595 | end |
592 | 596 | |
593 | 597 | def themes |
... | ... | @@ -623,7 +627,11 @@ private :generate_url, :url_options |
623 | 627 | end |
624 | 628 | |
625 | 629 | def folders |
626 | - self.articles.find(:all, :conditions => ['type in (?)', ['Folder', 'Blog']]) | |
630 | + articles.folders | |
631 | + end | |
632 | + | |
633 | + def image_galleries | |
634 | + folders.select { |folder| folder.display_as_gallery?} | |
627 | 635 | end |
628 | 636 | |
629 | 637 | def blocks_to_expire_cache |
... | ... | @@ -668,4 +676,13 @@ private :generate_url, :url_options |
668 | 676 | self.update_attribute(:layout_template, template) |
669 | 677 | end |
670 | 678 | |
679 | + protected | |
680 | + | |
681 | + def display_private_info_to?(user) | |
682 | + if user.nil? | |
683 | + false | |
684 | + else | |
685 | + (user == self) || (user.is_admin?(self.environment)) || (user.memberships.include?(self)) | |
686 | + end | |
687 | + end | |
671 | 688 | end | ... | ... |
app/models/profile_list_block.rb
... | ... | @@ -42,7 +42,7 @@ class ProfileListBlock < Block |
42 | 42 | rand(top) |
43 | 43 | end |
44 | 44 | def ids |
45 | - Profile.find(:all, :limit => block.limit, :order => 'random()', :conditions => {:environment_id => block.owner.id, :public_profile => true}).map(&:id) | |
45 | + block.owner.profiles.visible.all(:limit => block.limit, :order => 'random()').map(&:id) | |
46 | 46 | end |
47 | 47 | end |
48 | 48 | |
... | ... | @@ -90,7 +90,7 @@ class ProfileListBlock < Block |
90 | 90 | end |
91 | 91 | |
92 | 92 | def profile_count |
93 | - owner.profiles.count(:conditions => {:public_profile => true}) | |
93 | + owner.profiles.visible.count | |
94 | 94 | end |
95 | 95 | |
96 | 96 | end | ... | ... |
app/views/blocks/my_network/person.rhtml
... | ... | @@ -3,7 +3,7 @@ |
3 | 3 | content_tag('b', owner.articles.count), owner.public_profile_url.merge(:action => 'sitemap') ) %></li> |
4 | 4 | <li><%= link_to(n__('One friend', '%s friends', owner.friends.count) % |
5 | 5 | content_tag('b', owner.friends.count), owner.public_profile_url.merge(:action => 'friends')) %></li> |
6 | - <li><%= link_to(n__('One community', '%{num} communities', owner.communities.size) % | |
6 | + <li><%= link_to(n__('One community', '%{num} communities', owner.communities(:visible => true).size) % | |
7 | 7 | {:num => content_tag('b', owner.communities.size)}, owner.public_profile_url.merge(:action => 'communities')) %></li> |
8 | 8 | <li><%= link_to(n_('One tag', '%s tags', owner.article_tags.size) % |
9 | 9 | content_tag('b', owner.article_tags.size), owner.public_profile_url.merge(:action => 'tags')) %></li> | ... | ... |
app/views/profile/_organization.rhtml
1 | 1 | <tr> |
2 | 2 | <th colspan='2'><%= _('Basic information')%></th> |
3 | 3 | </tr> |
4 | -<%= display_field(_('Name:'), profile, :name) { |name| link_to name, profile.url } %> | |
4 | +<%= display_field(_('Description:'), profile, :description) if !@action %> | |
5 | + | |
5 | 6 | <tr> |
6 | - <td></td> | |
7 | + <td class='field-name'><%= _('Members') %></td> | |
7 | 8 | <td> |
8 | - <%= link_to _('Members') + " (%s)" % profile.members.count, :controller => 'profile', :action => 'members' %> | |
9 | + <%= link_to profile.members.count, :controller => 'profile', :action => 'members' %> | |
9 | 10 | </td> |
10 | 11 | </tr> |
12 | + | |
13 | +<%= display_field(_('Type:'), profile, :privacy_setting, true) %> | |
14 | + | |
15 | +<%= display_field(_('Location:'), profile, :location, true) %> | |
16 | + | |
17 | +<tr> | |
18 | + <td class='field-name'><%= _('Created at:') %></td> | |
19 | + <td><%= show_date(profile.created_at) %></td> | |
20 | +</tr> | |
21 | + | |
11 | 22 | <% if profile.kind_of?(Enterprise) && !profile.environment.enabled?('disable_products_for_enterprises') %> |
12 | 23 | <tr> |
13 | 24 | <td></td> |
... | ... | @@ -16,3 +27,10 @@ |
16 | 27 | </td> |
17 | 28 | </tr> |
18 | 29 | <% end %> |
30 | + | |
31 | +<tr> | |
32 | + <td class='field-name'><%= _('Administrators:') %></td> | |
33 | + <td> | |
34 | + <%= profile.admins.map { |admin| link_to(admin.short_name, admin.url)}.join(', ') %> | |
35 | + </td> | |
36 | +</tr> | ... | ... |
app/views/profile/_person.rhtml
1 | 1 | <tr> |
2 | 2 | <th colspan='2'><%= _('Basic information')%></th> |
3 | 3 | </tr> |
4 | -<%= display_field(_('Name:'), profile, :name, true) { |name| link_to name, profile.url } %> | |
4 | +<%= display_field(_('About:'), profile, :description) if !@action %> | |
5 | 5 | <%= display_field(_('Sex:'), profile, :sex) { |gender| { 'male' => _('Male'), 'female' => _('Female') }[gender] } %> |
6 | 6 | <%= display_field(_('Date of birth:'), profile, :birth_date) { |date| show_date(date) }%> |
7 | 7 | <%= display_field(_('Location:'), profile, :location, true) %> |
8 | 8 | |
9 | +<%= display_field(_('Type:'), profile, :privacy_setting, true) %> | |
10 | + | |
11 | +<tr> | |
12 | + <td class='field-name'><%= _('Created at:') %></td> | |
13 | + <td><%= show_date(profile.created_at) %></td> | |
14 | +</tr> | |
15 | + | |
9 | 16 | <% if profile == user || profile.friends.include?(user) %> |
10 | 17 | <tr> |
11 | 18 | <th colspan='2'><%= _('Contact')%></th> |
... | ... | @@ -42,12 +49,12 @@ |
42 | 49 | <th colspan='2'><%= _('Network')%></th> |
43 | 50 | </tr> |
44 | 51 | <tr> |
45 | - <td></td> | |
46 | - <td><%= link_to __('Friends') + (' (%d)' % profile.friends.count), { :controller => 'profile', :action => 'friends' } %></td> | |
52 | + <td><%= __('Friends') + ':' %></td> | |
53 | + <td><%= link_to profile.friends.count, { :controller => 'profile', :action => 'friends' } %></td> | |
47 | 54 | </tr> |
48 | 55 | <tr> |
49 | - <td></td> | |
50 | - <td><%= link_to __('Communities') + (' (%d)' % profile.communities.count), :controller => "profile", :action => 'communities' %></td> | |
56 | + <td><%= __('Communities') + ':' %></td> | |
57 | + <td><%= link_to profile.communities.count, :controller => "profile", :action => 'communities' %></td> | |
51 | 58 | </tr> |
52 | 59 | |
53 | 60 | <% if !environment.enabled?('disable_categories') && !profile.interests.empty? %> | ... | ... |
... | ... | @@ -0,0 +1,17 @@ |
1 | +<div class='profile-picture' style='float: left; margin-top: 5px'> | |
2 | + <%= profile_image(profile, :big) %> | |
3 | +</div> | |
4 | + | |
5 | +<div class='private-profile-message'><%= @message %></div> | |
6 | +<div class='private-profile-description'><%= profile.description %></div> | |
7 | + | |
8 | +<% button_bar do %> | |
9 | + <% if @action == :join && logged_in? %> | |
10 | + <%= lightbox_link_to content_tag('span', _('Join')), profile.join_url, :class => 'button with-text icon-add', :title => _('Join this community') %> | |
11 | + <% end %> | |
12 | + <% if @action == :add_friend && logged_in? && !user.already_request_friendship?(profile) %> | |
13 | + <%= link_to content_tag('span', __('Add friend')), user.url.merge(:controller => 'friends', :action => 'add', :id => profile.id), :class => 'button with-text icon-add' %> | |
14 | + <% end %> | |
15 | + <%= button :back, _('Go back'), :back %> | |
16 | + <%= button :home, _("Go to %s home page") % environment.name, :controller => 'home' %> | |
17 | +<% end %> | ... | ... |
app/views/profile/index.rhtml
... | ... | @@ -4,38 +4,66 @@ |
4 | 4 | </div> |
5 | 5 | <% end %> |
6 | 6 | |
7 | -<h1><%= _("%s's profile") % profile.name %></h1> | |
7 | +<h1><%= profile.name %></h1> | |
8 | + | |
9 | +<% if @action %> | |
10 | + <%= render :partial => 'private_profile' %> | |
11 | +<% end %> | |
8 | 12 | |
9 | 13 | <table class='profile'> |
10 | 14 | <%= render :partial => partial_for_class(profile.class) %> |
11 | - <% cache_timeout(profile.identifier + '-profile-general-info', 4.hours.from_now) do %> | |
12 | - <tr> | |
13 | - <th colspan='2'> | |
14 | - <%= _('Content') %> | |
15 | - </th> | |
16 | - </tr> | |
17 | - <tr> | |
18 | - <td> | |
19 | - <%= _('Content published:') %> | |
20 | - </td> | |
21 | - <td> | |
22 | - <%= link_to _('Site map'), :controller => 'profile', :action => 'sitemap' %> | |
23 | - </td> | |
24 | - </tr> | |
25 | - <tr> | |
26 | - <td> | |
27 | - </td> | |
28 | - <td> | |
29 | - <%= link_to _('Events'), :controller => 'events', :action => 'events' %> | |
30 | - </td> | |
31 | - </tr> | |
32 | - <tr> | |
33 | - <td> | |
34 | - <%= _('Tags:') %> | |
35 | - </td> | |
36 | - <td> | |
37 | - <%= tag_cloud @tags, :id, { :action => 'tag' }, :max_size => 18, :min_size => 10%> | |
38 | - </td> | |
39 | - </tr> | |
15 | + | |
16 | + <% unless @action %> | |
17 | + <% cache_timeout(profile.identifier + '-profile-general-info', 4.hours.from_now) do %> | |
18 | + <tr> | |
19 | + <th colspan='2'> | |
20 | + <%= _('Content') %> | |
21 | + </th> | |
22 | + </tr> | |
23 | + | |
24 | + <% profile.blogs.each do |blog| %> | |
25 | + <tr> | |
26 | + <td><%= blog.name + ':' %></td> | |
27 | + <td> | |
28 | + <%= link_to(n_('One post', '%{num} posts', blog.posts.count) % { :num => blog.posts.count }, blog.url) %> | |
29 | + </td> | |
30 | + </tr> | |
31 | + <% end %> | |
32 | + <% profile.image_galleries.each do |gallery| %> | |
33 | + <tr> | |
34 | + <td><%= gallery.name + ':' %></td> | |
35 | + <td> | |
36 | + <%= link_to(n_('One picture', '%{num} pictures', gallery.images.count) % { :num => gallery.images.count }, gallery.url) %> | |
37 | + </td> | |
38 | + </tr> | |
39 | + <% end %> | |
40 | + | |
41 | + <tr> | |
42 | + <td><%= _('Events:') %></td> | |
43 | + <td> | |
44 | + <%= link_to profile.events.count, :controller => 'events', :action => 'events' %> | |
45 | + </td> | |
46 | + </tr> | |
47 | + <tr> | |
48 | + <td> | |
49 | + <%= _('Tags:') %> | |
50 | + </td> | |
51 | + <td> | |
52 | + <%= tag_cloud @tags, :id, { :action => 'tag' }, :max_size => 18, :min_size => 10%> | |
53 | + </td> | |
54 | + </tr> | |
55 | + | |
56 | + <% if !environment.enabled?('disable_categories') && !profile.interests.empty? %> | |
57 | + <tr> | |
58 | + <th colspan='2'><%= _('Interests') %></th> | |
59 | + </tr> | |
60 | + <% profile.interests.each do |item| %> | |
61 | + <tr> | |
62 | + <td></td> | |
63 | + <td><%= link_to item.name, :controller => 'search', :action => 'category_index', :category_path => item.explode_path %></td> | |
64 | + </tr> | |
65 | + <% end %> | |
66 | + <% end %> | |
67 | + <% end %> | |
40 | 68 | <% end %> |
41 | 69 | </table> | ... | ... |
app/views/profile_editor/_person_form.rhtml
... | ... | @@ -9,6 +9,7 @@ |
9 | 9 | </div> |
10 | 10 | <% end %> |
11 | 11 | |
12 | +<%= optional_field(@person, 'description', f.text_area(:description, :rows => 5)) %> | |
12 | 13 | <%= optional_field(@person, 'preferred_domain', select_preferred_domain(:profile_data)) %> |
13 | 14 | <%= optional_field(@person, 'contact_information', f.text_field(:contact_information)) %> |
14 | 15 | <%= optional_field(@person, 'contact_phone', labelled_form_field(_('Home phone'), text_field(:profile_data, :contact_phone))) %> | ... | ... |
app/views/profile_editor/edit.rhtml
... | ... | @@ -35,13 +35,13 @@ |
35 | 35 | <td> <%= _('Activate Intranet access (restricted area only for me)') %> </td><td><%= _('Yes') %></td><td><%= _('Yes') %></td> |
36 | 36 | </tr> |
37 | 37 | <tr> |
38 | - <td> <%= _('Show my website to all internet users') %> </td><td><%= _('Yes') %></td><td><%= _('No') %></td> | |
38 | + <td> <%= _('Include my contact in directory of people') %> </td><td><%= _('Yes') %></td><td><%= _('Yes') %></td> | |
39 | 39 | </tr> |
40 | 40 | <tr> |
41 | - <td> <%= _('Show my website to my contacts (persons)') %> </td><td><%= _('Yes') %></td><td><%= _('Yes') %></td> | |
41 | + <td> <%= _('Show my contents to all internet users') %> </td><td><%= _('Yes') %></td><td><%= _('No') %></td> | |
42 | 42 | </tr> |
43 | 43 | <tr> |
44 | - <td> <%= _('Include my contact in directory of people') %> </td><td><%= _('Yes') %></td><td><%= _('No') %></td> | |
44 | + <td> <%= _('Show my contents to my friends (person)') %> </td><td><%= _('Yes') %></td><td><%= _('Yes') %></td> | |
45 | 45 | </tr> |
46 | 46 | </table> |
47 | 47 | <% else %> |
... | ... | @@ -63,13 +63,13 @@ |
63 | 63 | <td> <%= _('Activate Intranet access (restricted area only for members)') %> </td><td><%= _('Yes') %></td><td><%= _('Yes') %></td> |
64 | 64 | </tr> |
65 | 65 | <tr> |
66 | - <td> <%= _('Show website of this group to all internet users') %> </td><td><%= _('Yes') %></td><td><%= _('No') %></td> | |
66 | + <td> <%= _('Include this group directory of groups') %> </td><td><%= _('Yes') %></td><td><%= _('Yes') %></td> | |
67 | 67 | </tr> |
68 | 68 | <tr> |
69 | - <td> <%= _('Show my website to members') %> </td><td><%= _('Yes') %></td><td><%= _('Yes') %></td> | |
69 | + <td> <%= _('Show content of this group to all internet users') %> </td><td><%= _('Yes') %></td><td><%= _('No') %></td> | |
70 | 70 | </tr> |
71 | 71 | <tr> |
72 | - <td> <%= _('Include this group directory of groups') %> </td><td><%= _('Yes') %></td><td><%= _('No') %></td> | |
72 | + <td> <%= _('Show content of this group to members') %> </td><td><%= _('Yes') %></td><td><%= _('Yes') %></td> | |
73 | 73 | </tr> |
74 | 74 | </table> |
75 | 75 | <% end %> | ... | ... |
app/views/search/_display_results.rhtml
... | ... | @@ -45,7 +45,7 @@ |
45 | 45 | <ul> |
46 | 46 | <% hit_pos = 0 %> |
47 | 47 | <% results.each do |hit| %> |
48 | - <% next if hit.respond_to?(:public?) && !hit.public? %> | |
48 | + <% next if hit.respond_to?(:visible) && !hit.visible? %> | |
49 | 49 | <%= render :partial => partial_for_class(hit.class), |
50 | 50 | |
51 | 51 | :object => hit, | ... | ... |
app/views/shared/_custom_fields.rhtml
1 | 1 | <% if profile.community? %> |
2 | - <%= optional_field(profile, 'description', f.text_area(:description, :rows => 5)) %> | |
3 | 2 | <%= optional_field(profile, 'language', f.text_field(:language), only_required) %> |
4 | 3 | <% end %> |
5 | 4 | |
5 | +<%= optional_field(profile, 'description', f.text_area(:description, :rows => 5)) %> <!-- , :maxlength => 10 --> | |
6 | 6 | <%= optional_field(profile, 'contact_person', f.text_field(:contact_person), only_required) %> |
7 | 7 | <%= optional_field(profile, 'contact_email', f.text_field(:contact_email), only_required) %> |
8 | 8 | <%= optional_field(profile, 'contact_phone', f.text_field(:contact_phone), only_required) %> | ... | ... |
app/views/shared/access_denied.rhtml
... | ... | @@ -9,9 +9,11 @@ |
9 | 9 | <p><%= _("If you are supposed to have access to this area, you'll probably want to talk to the people responsible and ask them to give you access.") %></p> |
10 | 10 | <% end %> |
11 | 11 | |
12 | - <ul> | |
13 | - <li><%= link_to _('Go to the site home page'), :controller => 'home' %></li> | |
14 | - <li><%= link_to _('Go back'), :back %></li> | |
15 | - </ul> | |
12 | + <hr/> | |
13 | + | |
14 | + <% button_bar do %> | |
15 | + <%= button :back, _('Go back'), :back %> | |
16 | + <%= button :home, _('Go to the site home page'), :controller => 'home' %> | |
17 | + <% end %> | |
16 | 18 | |
17 | 19 | </div> | ... | ... |
app/views/shared/not_found.rhtml
... | ... | @@ -4,8 +4,8 @@ |
4 | 4 | <%= _('You may have clicked an expired link or mistyped the address.') %> |
5 | 5 | <%= _('If you clicked a link that was in another site, or was given to you by someone else, it would be nice if you tell them that their link is not valid anymore.') %> |
6 | 6 | </p> |
7 | - <ul> | |
8 | - <li><%= link_to _('Go to the site home page'), :controller => 'home' %></li> | |
9 | - <li><%= link_to _('Go back'), :back %></li> | |
10 | - </ul> | |
7 | + <% button_bar do %> | |
8 | + <%= button :back, _('Go back'), :back %> | |
9 | + <%= button :home, _('Go to %s home page') % environment.name, :controller => 'home' %> | |
10 | + <% end %> | |
11 | 11 | </div> | ... | ... |
db/schema.rb
... | ... | @@ -9,7 +9,7 @@ |
9 | 9 | # |
10 | 10 | # It's strongly recommended to check this file into your version control system. |
11 | 11 | |
12 | -ActiveRecord::Schema.define(:version => 79) do | |
12 | +ActiveRecord::Schema.define(:version => 80) do | |
13 | 13 | |
14 | 14 | create_table "article_versions", :force => true do |t| |
15 | 15 | t.integer "article_id" |
... | ... | @@ -270,6 +270,7 @@ ActiveRecord::Schema.define(:version => 79) do |
270 | 270 | t.date "birth_date" |
271 | 271 | t.integer "preferred_domain_id" |
272 | 272 | t.datetime "updated_at" |
273 | + t.boolean "visible", :default => true | |
273 | 274 | end |
274 | 275 | |
275 | 276 | add_index "profiles", ["environment_id"], :name => "index_profiles_on_environment_id" | ... | ... |
... | ... | @@ -0,0 +1,68 @@ |
1 | +Feature: my_network_block | |
2 | + As a blog owner | |
3 | + I want to see a summary of my network | |
4 | + | |
5 | + Background: | |
6 | + Given the following users | |
7 | + | login | name | | |
8 | + | joaosilva | Joao Silva | | |
9 | + And the following blocks | |
10 | + | owner | type | | |
11 | + | joaosilva | MyNetworkBlock | | |
12 | + And the following communities | |
13 | + | identifier | name | public_profile | | |
14 | + | public-community | Public Community | true | | |
15 | + | |
16 | + Scenario: display how many public/private communities I am member | |
17 | + Given the following communities | |
18 | + | identifier | name | owner | public_profile | | |
19 | + | other-public-community | Other Public Community | joaosilva | true | | |
20 | + | private-community | Private Community | joaosilva | false | | |
21 | + And I am logged in as "joaosilva" | |
22 | + And I am on Joao Silva's homepage | |
23 | + Then I should see "2 communities" | |
24 | + When I go to Public Community's homepage | |
25 | + And I follow "Join" | |
26 | + And I press "Yes, I want to join." | |
27 | + When I go to Joao Silva's homepage | |
28 | + Then I should see "3 communities" | |
29 | + | |
30 | + Scenario: not display how many invisible communities I am member | |
31 | + Given the following communities | |
32 | + | identifier | name | owner | visible | | |
33 | + | visible-community | Visible Community | joaosilva | true | | |
34 | + | not-visible-community | Not Visible Community | joaosilva | false | | |
35 | + And I am logged in as "joaosilva" | |
36 | + And I am on Joao Silva's homepage | |
37 | + Then I should see "One community" | |
38 | + When I go to Public Community's homepage | |
39 | + And I follow "Join" | |
40 | + And I press "Yes, I want to join." | |
41 | + When I go to Joao Silva's homepage | |
42 | + Then I should see "2 communities" | |
43 | + | |
44 | + Scenario: display how many public/private friends I have | |
45 | + Given the following users | |
46 | + | login | name | public_profile | | |
47 | + | mariasilva | Maria Silva | true | | |
48 | + | josesilva | Jose Silva | false | | |
49 | + And "joaosilva" is friend of "mariasilva" | |
50 | + And I am logged in as "joaosilva" | |
51 | + And I am on Joao Silva's homepage | |
52 | + Then I should see "1 friend" | |
53 | + And "joaosilva" is friend of "josesilva" | |
54 | + When I go to Joao Silva's homepage | |
55 | + Then I should see "2 friends" | |
56 | + | |
57 | + Scenario: not display how many invisible friends I have | |
58 | + Given the following users | |
59 | + | login | name | visible | | |
60 | + | mariasilva | Maria Silva | true | | |
61 | + | josesilva | Jose Silva | false | | |
62 | + And "joaosilva" is friend of "mariasilva" | |
63 | + And I am logged in as "joaosilva" | |
64 | + When I go to Joao Silva's homepage | |
65 | + Then I should see "1 friend" | |
66 | + And "joaosilva" is friend of "josesilva" | |
67 | + When I go to Joao Silva's homepage | |
68 | + Then I should see "1 friend" | ... | ... |
... | ... | @@ -0,0 +1,31 @@ |
1 | +Feature: private profiles | |
2 | + As a profile administrator | |
3 | + I want to set it to private | |
4 | + So that only members/friends can view its contents | |
5 | + | |
6 | + Background: | |
7 | + Given the following community | |
8 | + | identifier | name | public_profile | | |
9 | + | safernet | Safernet | false | | |
10 | + And the following users | |
11 | + | login | public_profile | | |
12 | + | joao | true | | |
13 | + | shygirl | false | | |
14 | + | |
15 | + Scenario: joining a private community | |
16 | + Given I am logged in as "joao" | |
17 | + When I go to Safernet's homepage | |
18 | + Then I should see "members only" | |
19 | + When I follow "Join" | |
20 | + And I press "Yes, I want to join" | |
21 | + And "joao" is accepted on community "Safernet" | |
22 | + Then "joao" should be a member of "Safernet" | |
23 | + When I go to Safernet's homepage | |
24 | + And I should not see "members only" | |
25 | + | |
26 | + Scenario: adding a friend with private profile | |
27 | + Given I am logged in as "joao" | |
28 | + When I go to shygirl's homepage | |
29 | + Then I should see "friends only" | |
30 | + When I follow "Add friend" | |
31 | + And I press "Yes, I want" | ... | ... |
features/publish_article.feature
... | ... | @@ -27,7 +27,7 @@ Feature: publish article |
27 | 27 | And I press "Publish" |
28 | 28 | And I am on Sample Community's homepage |
29 | 29 | And I follow "View profile" |
30 | - And I follow "Site map" | |
30 | + And I go to Sample Community's sitemap | |
31 | 31 | When I follow "Sample Article" |
32 | 32 | Then I should see "This is the first published article" |
33 | 33 | |
... | ... | @@ -82,11 +82,11 @@ Feature: publish article |
82 | 82 | Then I should see "Validation failed: Slug (the code generated from the article name) is already being used by another article.:" |
83 | 83 | And I am on Another Community1's homepage |
84 | 84 | And I follow "View profile" |
85 | - When I follow "Site map" | |
85 | + When I go to Another Community1's sitemap | |
86 | 86 | Then I should see "Sample Article" |
87 | 87 | And I am on Another Community2's homepage |
88 | 88 | And I follow "View profile" |
89 | - When I follow "Site map" | |
89 | + When I go to Another Community2's sitemap | |
90 | 90 | Then I should see "Sample Article" |
91 | 91 | |
92 | 92 | Scenario: publishing articles with the same name in a moderated community | ... | ... |
features/step_definitions/noosfero_steps.rb
... | ... | @@ -101,6 +101,12 @@ Then /^"(.+)" should be a member of "(.+)"$/ do |person,profile| |
101 | 101 | Profile.find_by_name(profile).members.should include(Person.find_by_name(person)) |
102 | 102 | end |
103 | 103 | |
104 | +When /^"(.*)" is accepted on community "(.*)"$/ do |person, community| | |
105 | + person = Person.find_by_name(person) | |
106 | + community = Community.find_by_name(community) | |
107 | + community.affiliate(person, Profile::Roles.member(community.environment.id)) | |
108 | +end | |
109 | + | |
104 | 110 | Given /^"(.+)" is admin of "(.+)"$/ do |person, organization| |
105 | 111 | org = Profile.find_by_name(organization) |
106 | 112 | user = Profile.find_by_name(person) |
... | ... | @@ -135,3 +141,7 @@ end |
135 | 141 | Given /^(.+) is member of (.+)$/ do |person, group| |
136 | 142 | Organization[group].add_member(Person[person]) |
137 | 143 | end |
144 | + | |
145 | +Given /^"(.+)" is friend of "(.+)"$/ do |person, friend| | |
146 | + Person[person].add_friend(Person[friend]) | |
147 | +end | ... | ... |
features/support/paths.rb
public/images/icons-app/alert-icon.png
1 KB
public/stylesheets/common.css
... | ... | @@ -31,9 +31,6 @@ code, pre { color: #666; } |
31 | 31 | padding: 0em; |
32 | 32 | } |
33 | 33 | |
34 | -#notice { | |
35 | - cursor: pointer; | |
36 | -} | |
37 | 34 | |
38 | 35 | #environment_identification { |
39 | 36 | position: absolute !important; |
... | ... | @@ -134,9 +131,8 @@ div#notice { |
134 | 131 | left: 50%; |
135 | 132 | margin-left: -200px; |
136 | 133 | width: 400px; |
137 | - border: 1px solid #545454; | |
138 | - background: #ffffa9; | |
139 | - padding: 10px; | |
134 | + border: 1px solid #ddd; | |
135 | + background: #ffd; | |
140 | 136 | } |
141 | 137 | |
142 | 138 | /* * * Generic Content Formating * * */ |
... | ... | @@ -280,6 +276,7 @@ td.field-name { |
280 | 276 | color: #888; |
281 | 277 | width: 150px; |
282 | 278 | text-align: left; |
279 | + vertical-align: top; | |
283 | 280 | } |
284 | 281 | |
285 | 282 | table.profile th { |
... | ... | @@ -495,8 +492,7 @@ div.pending-tasks { |
495 | 492 | #content #not-found h1, |
496 | 493 | #content #access-denied h1 { |
497 | 494 | text-align: left; |
498 | - background: url(../images/icons-app/alert-icon.png) no-repeat; | |
499 | - padding-left: 30px; | |
495 | + margin-top: 0px; | |
500 | 496 | } |
501 | 497 | |
502 | 498 | #content #not-found p, |
... | ... | @@ -504,6 +500,11 @@ div.pending-tasks { |
504 | 500 | text-align: justify; |
505 | 501 | } |
506 | 502 | |
503 | +#content #not-found .button-bar, | |
504 | +#content #access-denied .button-bar { | |
505 | + margin-bottom: 0px; | |
506 | +} | |
507 | + | |
507 | 508 | /**** Signup wizard ****/ |
508 | 509 | |
509 | 510 | #wizard-iframe { | ... | ... |
public/stylesheets/controller_profile.css
... | ... | @@ -9,3 +9,28 @@ |
9 | 9 | #pagination-profiles .pagination span { |
10 | 10 | display: inline; |
11 | 11 | } |
12 | + | |
13 | +.no-boxes { | |
14 | + margin: 0px 260px 0px 260px; | |
15 | +} | |
16 | + | |
17 | +#content .no-boxes h1 { | |
18 | + margin: 1px 0px 1px 160px; | |
19 | +} | |
20 | + | |
21 | +#content .no-boxes h1, | |
22 | +#content .no-boxes table th { | |
23 | + text-align: left; | |
24 | +} | |
25 | + | |
26 | +.private-profile-message { | |
27 | + font-style: italic; | |
28 | + border: 1px solid #ddd; | |
29 | + background: #ffd; | |
30 | + padding: 10px; | |
31 | +} | |
32 | + | |
33 | +.private-profile-message, | |
34 | +.private-profile-description { | |
35 | + margin: 5px 0px 5px 160px; | |
36 | +} | ... | ... |
test/functional/content_viewer_controller_test.rb
... | ... | @@ -577,9 +577,7 @@ class ContentViewerControllerTest < Test::Unit::TestCase |
577 | 577 | |
578 | 578 | should 'deny access before trying SSL when SSL is disabled' do |
579 | 579 | @controller.expects(:redirect_to_ssl).returns(false) |
580 | - profile = create_user('testuser').person | |
581 | - profile.public_profile = false | |
582 | - profile.save! | |
580 | + profile = create_user('testuser', {}, :visible => false).person | |
583 | 581 | |
584 | 582 | get :view_page, :profile => 'testuser', :page => profile.home_page.explode_path |
585 | 583 | assert_response 403 | ... | ... |
test/functional/profile_controller_test.rb
... | ... | @@ -136,7 +136,7 @@ class ProfileControllerTest < Test::Unit::TestCase |
136 | 136 | should 'show friends link to person' do |
137 | 137 | person = create_user('person_1').person |
138 | 138 | get :index, :profile => person.identifier |
139 | - assert_tag :tag => 'a', :content => /Friends/, :attributes => { :href => /profile\/#{person.identifier}\/friends$/ } | |
139 | + assert_tag :tag => 'a', :content => /#{profile.friends.count}/, :attributes => { :href => /profile\/#{person.identifier}\/friends$/ } | |
140 | 140 | end |
141 | 141 | |
142 | 142 | should 'display tag for profile' do |
... | ... | @@ -223,6 +223,9 @@ class ProfileControllerTest < Test::Unit::TestCase |
223 | 223 | |
224 | 224 | should 'check access before displaying profile' do |
225 | 225 | Person.any_instance.expects(:display_info_to?).with(anything).returns(false) |
226 | + @profile.visible = false | |
227 | + @profile.save | |
228 | + | |
226 | 229 | get :index, :profile => @profile.identifier |
227 | 230 | assert_response 403 |
228 | 231 | end |
... | ... | @@ -299,12 +302,6 @@ class ProfileControllerTest < Test::Unit::TestCase |
299 | 302 | assert_no_tag :tag => 'a', :attributes => { :href => '/catalog/my-test-enterprise'}, :content => /Products\/Services/ |
300 | 303 | end |
301 | 304 | |
302 | - should 'display "Site map" link for profiles' do | |
303 | - profile = create_user('testmapuser').person | |
304 | - get :index, :profile => profile.identifier | |
305 | - assert_tag :tag => 'a', :content => "Site map", :attributes => { :href => '/profile/testmapuser/sitemap' } | |
306 | - end | |
307 | - | |
308 | 305 | should 'list top level articles in sitemap' do |
309 | 306 | get :sitemap, :profile => 'testuser' |
310 | 307 | assert_equal @profile.top_level_articles, assigns(:articles) | ... | ... |
test/unit/article_test.rb
... | ... | @@ -177,9 +177,17 @@ class ArticleTest < Test::Unit::TestCase |
177 | 177 | end |
178 | 178 | |
179 | 179 | should 'not show documents from a private profile as recent' do |
180 | - p = create_user('usr1').person | |
181 | - p.public_profile = false | |
182 | - p.save! | |
180 | + p = fast_create(Person, :public_profile => false) | |
181 | + Article.destroy_all | |
182 | + | |
183 | + first = p.articles.build(:name => 'first', :published => true); first.save! | |
184 | + second = p.articles.build(:name => 'second', :published => false); second.save! | |
185 | + | |
186 | + assert_equal [ ], Article.recent(nil) | |
187 | + end | |
188 | + | |
189 | + should 'not show documents from a invisible profile as recent' do | |
190 | + p = fast_create(Person, :visible => false) | |
183 | 191 | Article.destroy_all |
184 | 192 | |
185 | 193 | first = p.articles.build(:name => 'first', :published => true); first.save! |
... | ... | @@ -520,6 +528,15 @@ class ArticleTest < Test::Unit::TestCase |
520 | 528 | assert !a2.public? |
521 | 529 | end |
522 | 530 | |
531 | + should 'respond to public? as false if profile is invisible' do | |
532 | + profile = fast_create(Profile, :visible => false) | |
533 | + article1 = fast_create(Article, :profile_id => profile.id) | |
534 | + article2 = fast_create(Article, :profile_id => profile.id, :public_article => false) | |
535 | + | |
536 | + assert !article1.public? | |
537 | + assert !article2.public? | |
538 | + end | |
539 | + | |
523 | 540 | should 'save as private' do |
524 | 541 | profile = Profile.create!(:name => 'test profile', :identifier => 'test_profile') |
525 | 542 | folder = Folder.create!(:name => 'my_intranet', :profile => profile, :public_article => false) | ... | ... |
test/unit/communities_block_test.rb
... | ... | @@ -30,19 +30,19 @@ class CommunitiesBlockTest < Test::Unit::TestCase |
30 | 30 | owner = mock |
31 | 31 | block.expects(:owner).at_least_once.returns(owner) |
32 | 32 | |
33 | - member1 = mock; member1.stubs(:id).returns(1); member1.stubs(:public_profile).returns(true) | |
34 | - member2 = mock; member2.stubs(:id).returns(2); member2.stubs(:public_profile).returns(true) | |
35 | - member3 = mock; member3.stubs(:id).returns(3); member3.stubs(:public_profile).returns(true) | |
33 | + community1 = mock; community1.stubs(:id).returns(1); community1.stubs(:visible).returns(true) | |
34 | + community2 = mock; community2.stubs(:id).returns(2); community2.stubs(:visible).returns(true) | |
35 | + community3 = mock; community3.stubs(:id).returns(3); community3.stubs(:visible).returns(true) | |
36 | 36 | |
37 | - owner.expects(:communities).returns([member1, member2, member3]) | |
37 | + owner.expects(:communities).returns([community1, community2, community3]) | |
38 | 38 | |
39 | 39 | block.profile_finder.expects(:pick_random).with(3).returns(2) |
40 | 40 | block.profile_finder.expects(:pick_random).with(2).returns(0) |
41 | 41 | |
42 | - Profile.expects(:find).with(3).returns(member3) | |
43 | - Profile.expects(:find).with(1).returns(member1) | |
42 | + Profile.expects(:find).with(3).returns(community3) | |
43 | + Profile.expects(:find).with(1).returns(community1) | |
44 | 44 | |
45 | - assert_equal [member3, member1], block.profiles | |
45 | + assert_equal [community3, community1], block.profiles | |
46 | 46 | end |
47 | 47 | |
48 | 48 | should 'link to all communities of profile' do |
... | ... | @@ -72,28 +72,43 @@ class CommunitiesBlockTest < Test::Unit::TestCase |
72 | 72 | assert_equal '', block.footer |
73 | 73 | end |
74 | 74 | |
75 | - should 'not list non-public communities' do | |
75 | + should 'list non-public communities' do | |
76 | 76 | user = create_user('testuser').person |
77 | 77 | |
78 | - public_community = Community.create!(:name => 'test community 1', :identifier => 'comm1', :environment => Environment.default) | |
78 | + public_community = fast_create(Community, :environment_id => Environment.default.id) | |
79 | 79 | public_community.add_member(user) |
80 | 80 | |
81 | - private_community = Community.create!(:name => 'test community 2', :identifier => 'comm2', :environment => Environment.default, :public_profile => false) | |
81 | + private_community = fast_create(Community, :environment_id => Environment.default.id, :public_profile => false) | |
82 | 82 | private_community.add_member(user) |
83 | 83 | |
84 | 84 | block = CommunitiesBlock.new |
85 | 85 | block.expects(:owner).at_least_once.returns(user) |
86 | 86 | |
87 | - assert_equal [public_community], block.profiles | |
87 | + assert_equivalent [public_community, private_community], block.profiles | |
88 | + end | |
89 | + | |
90 | + should 'not list non-visible communities' do | |
91 | + user = create_user('testuser').person | |
92 | + | |
93 | + visible_community = fast_create(Community, :environment_id => Environment.default.id) | |
94 | + visible_community.add_member(user) | |
95 | + | |
96 | + not_visible_community = fast_create(Community, :environment_id => Environment.default.id, :visible => false) | |
97 | + not_visible_community.add_member(user) | |
98 | + | |
99 | + block = CommunitiesBlock.new | |
100 | + block.expects(:owner).at_least_once.returns(user) | |
101 | + | |
102 | + assert_equal [visible_community], block.profiles | |
88 | 103 | end |
89 | 104 | |
90 | 105 | should 'count number of owner communities' do |
91 | 106 | user = create_user('testuser').person |
92 | 107 | |
93 | - community1 = Community.create!(:name => 'test community 1', :identifier => 'comm1', :environment => Environment.default, :public_profile => true) | |
108 | + community1 = fast_create(Community, :environment_id => Environment.default.id, :visible => true) | |
94 | 109 | community1.add_member(user) |
95 | 110 | |
96 | - community2 = Community.create!(:name => 'test community 2', :identifier => 'comm2', :environment => Environment.default, :public_profile => true) | |
111 | + community2 = fast_create(Community, :environment_id => Environment.default.id, :visible => true) | |
97 | 112 | community2.add_member(user) |
98 | 113 | |
99 | 114 | block = CommunitiesBlock.new |
... | ... | @@ -102,22 +117,37 @@ class CommunitiesBlockTest < Test::Unit::TestCase |
102 | 117 | assert_equal 2, block.profile_count |
103 | 118 | end |
104 | 119 | |
105 | - should 'not count non-public profile communities' do | |
120 | + should 'count non-public profile communities' do | |
106 | 121 | user = create_user('testuser').person |
107 | 122 | |
108 | - community_public = Community.create!(:name => 'tcommunity 1', :identifier => 'comm1', :environment => Environment.default, :public_profile => true) | |
123 | + community_public = fast_create(Community, :environment_id => Environment.default.id, :public_profile => true) | |
109 | 124 | community_public.add_member(user) |
110 | 125 | |
111 | - community_private = Community.create!(:name => ' community 2', :identifier => 'comm2', :environment => Environment.default, :public_profile => false) | |
126 | + community_private = fast_create(Community, :environment_id => Environment.default.id, :public_profile => false) | |
112 | 127 | community_private.add_member(user) |
113 | 128 | |
114 | 129 | block = CommunitiesBlock.new |
115 | 130 | block.expects(:owner).at_least_once.returns(user) |
116 | 131 | |
132 | + assert_equal 2, block.profile_count | |
133 | + end | |
134 | + | |
135 | + should 'not count non-visible profile communities' do | |
136 | + user = create_user('testuser').person | |
137 | + | |
138 | + visible_community = Community.create!(:name => 'tcommunity 1', :identifier => 'comm1', :environment => Environment.default, :visible => true) | |
139 | + visible_community.add_member(user) | |
140 | + | |
141 | + not_visible_community = Community.create!(:name => ' community 2', :identifier => 'comm2', :environment => Environment.default, :visible => false) | |
142 | + not_visible_community.add_member(user) | |
143 | + | |
144 | + block = CommunitiesBlock.new | |
145 | + block.expects(:owner).at_least_once.returns(user) | |
146 | + | |
117 | 147 | assert_equal 1, block.profile_count |
118 | 148 | end |
119 | 149 | |
120 | - should 'not count non-public environment communities' do | |
150 | + should 'count non-public environment communities' do | |
121 | 151 | community_public = Community.create!(:name => 'tcommunity 1', :identifier => 'comm1', :environment => Environment.default, :public_profile => true) |
122 | 152 | |
123 | 153 | community_private = Community.create!(:name => ' community 2', :identifier => 'comm2', :environment => Environment.default, :public_profile => false) |
... | ... | @@ -125,6 +155,17 @@ class CommunitiesBlockTest < Test::Unit::TestCase |
125 | 155 | block = CommunitiesBlock.new |
126 | 156 | block.expects(:owner).at_least_once.returns(Environment.default) |
127 | 157 | |
158 | + assert_equal 2, block.profile_count | |
159 | + end | |
160 | + | |
161 | + should 'not count non-visible environment communities' do | |
162 | + visible_community = Community.create!(:name => 'tcommunity 1', :identifier => 'comm1', :environment => Environment.default, :visible => true) | |
163 | + | |
164 | + not_visible_community = Community.create!(:name => ' community 2', :identifier => 'comm2', :environment => Environment.default, :visible => false) | |
165 | + | |
166 | + block = CommunitiesBlock.new | |
167 | + block.expects(:owner).at_least_once.returns(Environment.default) | |
168 | + | |
128 | 169 | assert_equal 1, block.profile_count |
129 | 170 | end |
130 | 171 | ... | ... |
test/unit/enterprises_block_test.rb
... | ... | @@ -29,9 +29,9 @@ class EnterprisesBlockTest < Test::Unit::TestCase |
29 | 29 | owner = mock |
30 | 30 | block.expects(:owner).at_least_once.returns(owner) |
31 | 31 | |
32 | - member1 = stub(:id => 1, :public_profile => true ) | |
33 | - member2 = stub(:id => 2, :public_profile => true ) | |
34 | - member3 = stub(:id => 3, :public_profile => true ) | |
32 | + member1 = stub(:id => 1, :visible => true ) | |
33 | + member2 = stub(:id => 2, :visible => true ) | |
34 | + member3 = stub(:id => 3, :visible => true ) | |
35 | 35 | |
36 | 36 | owner.expects(:enterprises).returns([member1, member2, member3]) |
37 | 37 | |
... | ... | @@ -44,31 +44,58 @@ class EnterprisesBlockTest < Test::Unit::TestCase |
44 | 44 | assert_equal [member3, member1], block.profiles |
45 | 45 | end |
46 | 46 | |
47 | - should 'not list private enterprises in environment' do | |
48 | - env = Environment.create!(:name => 'test env') | |
49 | - p1 = Enterprise.create!(:name => 'test1', :identifier => 'test1', :environment_id => env.id, :public_profile => true) | |
50 | - p2 = Enterprise.create!(:name => 'test2', :identifier => 'test2', :environment_id => env.id, :public_profile => false) #private profile | |
47 | + should 'list private enterprises in environment' do | |
48 | + env = Environment.create!(:name => 'test_env') | |
49 | + enterprise1 = fast_create(Enterprise, :environment_id => env.id, :public_profile => true) | |
50 | + enterprise2 = fast_create(Enterprise, :environment_id => env.id, :public_profile => false) #private profile | |
51 | + block = EnterprisesBlock.new | |
52 | + env.boxes.first.blocks << block | |
53 | + block.save! | |
54 | + ids = block.profile_finder.ids | |
55 | + assert_includes ids, enterprise1.id | |
56 | + assert_includes ids, enterprise2.id | |
57 | + end | |
58 | + | |
59 | + should 'not list invisible enterprises in environment' do | |
60 | + env = Environment.create!(:name => 'test_env') | |
61 | + enterprise1 = fast_create(Enterprise, :environment_id => env.id, :visible => true) | |
62 | + enterprise2 = fast_create(Enterprise, :environment_id => env.id, :visible => false) #invisible profile | |
51 | 63 | block = EnterprisesBlock.new |
52 | 64 | env.boxes.first.blocks << block |
53 | 65 | block.save! |
54 | 66 | ids = block.profile_finder.ids |
55 | - assert_includes ids, p1.id | |
56 | - assert_not_includes ids, p2.id | |
67 | + assert_includes ids, enterprise1.id | |
68 | + assert_not_includes ids, enterprise2.id | |
57 | 69 | end |
58 | 70 | |
59 | - should 'not list private enterprises in profile' do | |
60 | - person = create_user('test_user').person | |
61 | - e1 = Enterprise.create!(:name => 'test1', :identifier => 'test1', :public_profile => true) | |
62 | - role = Profile::Roles.member(e1.environment.id) | |
63 | - e1.affiliate(person, role) | |
64 | - e2 = Enterprise.create!(:name => 'test2', :identifier => 'test2', :public_profile => false) #private profile | |
65 | - e2.affiliate(person, role) | |
71 | + should 'list private enterprises in profile' do | |
72 | + person = create_user('testuser').person | |
73 | + enterprise1 = fast_create(Enterprise, :public_profile => true) | |
74 | + role = Profile::Roles.member(enterprise1.environment.id) | |
75 | + enterprise1.affiliate(person, role) | |
76 | + enterprise2 = fast_create(Enterprise, :public_profile => false) | |
77 | + enterprise2.affiliate(person, role) | |
66 | 78 | block = EnterprisesBlock.new |
67 | 79 | person.boxes.first.blocks << block |
68 | 80 | block.save! |
69 | 81 | ids = block.profile_finder.ids |
70 | - assert_includes ids, e1.id | |
71 | - assert_not_includes ids, e2.id | |
82 | + assert_includes ids, enterprise1.id | |
83 | + assert_includes ids, enterprise2.id | |
84 | + end | |
85 | + | |
86 | + should 'not list invisible enterprises in profile' do | |
87 | + person = create_user('testuser').person | |
88 | + enterprise1 = fast_create(Enterprise, :visible => true) | |
89 | + role = Profile::Roles.member(enterprise1.environment.id) | |
90 | + enterprise1.affiliate(person, role) | |
91 | + enterprise2 = fast_create(Enterprise, :visible => false) | |
92 | + enterprise2.affiliate(person, role) | |
93 | + block = EnterprisesBlock.new | |
94 | + person.boxes.first.blocks << block | |
95 | + block.save! | |
96 | + ids = block.profile_finder.ids | |
97 | + assert_includes ids, enterprise1.id | |
98 | + assert_not_includes ids, enterprise2.id | |
72 | 99 | end |
73 | 100 | |
74 | 101 | should 'link to all enterprises for profile' do |
... | ... | @@ -114,14 +141,31 @@ class EnterprisesBlockTest < Test::Unit::TestCase |
114 | 141 | assert_equal 2, block.profile_count |
115 | 142 | end |
116 | 143 | |
117 | - should 'not count non-public person enterprises' do | |
118 | - user = create_user('testuser').person | |
144 | + should 'count non-public person enterprises' do | |
145 | + user = fast_create(Person) | |
119 | 146 | |
120 | - ent1 = Enterprise.create!(:name => 'test enterprise 1', :identifier => 'ent1', :environment => Environment.default, :public_profile => true) | |
147 | + ent1 = fast_create(Enterprise, :public_profile => true) | |
121 | 148 | ent1.expects(:closed?).returns(false) |
122 | 149 | ent1.add_member(user) |
123 | 150 | |
124 | - ent2 = Enterprise.create!(:name => 'test enterprise 2', :identifier => 'ent2', :environment => Environment.default, :public_profile => false) | |
151 | + ent2 = fast_create(Enterprise, :public_profile => false) | |
152 | + ent2.expects(:closed?).returns(false) | |
153 | + ent2.add_member(user) | |
154 | + | |
155 | + block = EnterprisesBlock.new | |
156 | + block.expects(:owner).at_least_once.returns(user) | |
157 | + | |
158 | + assert_equal 2, block.profile_count | |
159 | + end | |
160 | + | |
161 | + should 'not count non-visible person enterprises' do | |
162 | + user = fast_create(Person) | |
163 | + | |
164 | + ent1 = fast_create(Enterprise, :visible => true) | |
165 | + ent1.expects(:closed?).returns(false) | |
166 | + ent1.add_member(user) | |
167 | + | |
168 | + ent2 = fast_create(Enterprise, :visible => false) | |
125 | 169 | ent2.expects(:closed?).returns(false) |
126 | 170 | ent2.add_member(user) |
127 | 171 | |
... | ... | @@ -131,11 +175,22 @@ class EnterprisesBlockTest < Test::Unit::TestCase |
131 | 175 | assert_equal 1, block.profile_count |
132 | 176 | end |
133 | 177 | |
134 | - should 'not count non-public environment enterprises' do | |
135 | - env = Environment.create!(:name => 'test_env') | |
136 | - ent1 = Enterprise.create!(:name => 'test enterprise 1', :identifier => 'ent1', :environment => env, :public_profile => true) | |
137 | 178 | |
138 | - ent2 = Enterprise.create!(:name => 'test enterprise 2', :identifier => 'ent2', :environment => env, :public_profile => false) | |
179 | + should 'count non-public environment enterprises' do | |
180 | + env = fast_create(Environment) | |
181 | + ent1 = fast_create(Enterprise, :environment_id => env.id, :public_profile => true) | |
182 | + ent2 = fast_create(Enterprise, :environment_id => env.id, :public_profile => false) | |
183 | + | |
184 | + block = EnterprisesBlock.new | |
185 | + block.expects(:owner).at_least_once.returns(env) | |
186 | + | |
187 | + assert_equal 2, block.profile_count | |
188 | + end | |
189 | + | |
190 | + should 'not count non-visible environment enterprises' do | |
191 | + env = Environment.create!(:name => 'test_env') | |
192 | + ent1 = Enterprise.create!(:name => 'test enterprise 1', :identifier => 'ent1', :environment => env, :visible => true) | |
193 | + ent2 = Enterprise.create!(:name => 'test enterprise 2', :identifier => 'ent2', :environment => env, :visible => false) | |
139 | 194 | |
140 | 195 | block = EnterprisesBlock.new |
141 | 196 | block.expects(:owner).at_least_once.returns(env) | ... | ... |
test/unit/environment_statistics_block_test.rb
... | ... | @@ -37,7 +37,7 @@ class EnvironmentStatisticsBlockTest < Test::Unit::TestCase |
37 | 37 | assert_match(/One community/, content) |
38 | 38 | end |
39 | 39 | |
40 | - should 'generate statistics but not for private profiles' do | |
40 | + should 'generate statistics including private profiles' do | |
41 | 41 | env = create(Environment) |
42 | 42 | user1 = create_user('testuser1', :environment_id => env.id) |
43 | 43 | user2 = create_user('testuser2', :environment_id => env.id) |
... | ... | @@ -55,6 +55,29 @@ class EnvironmentStatisticsBlockTest < Test::Unit::TestCase |
55 | 55 | |
56 | 56 | content = block.content |
57 | 57 | |
58 | + assert_match /2 enterprises/, content | |
59 | + assert_match /3 users/, content | |
60 | + assert_match /2 communities/, content | |
61 | + end | |
62 | + | |
63 | + should 'generate statistics but not for not visible profiles' do | |
64 | + env = create(Environment) | |
65 | + user1 = create_user('testuser1', :environment_id => env.id) | |
66 | + user2 = create_user('testuser2', :environment_id => env.id) | |
67 | + user3 = create_user('testuser3', :environment_id => env.id) | |
68 | + p = user3.person; p.visible = false; p.save! | |
69 | + | |
70 | + fast_create(Enterprise, :environment_id => env.id) | |
71 | + fast_create(Enterprise, :environment_id => env.id, :visible => false) | |
72 | + | |
73 | + fast_create(Community, :environment_id => env.id) | |
74 | + fast_create(Community, :environment_id => env.id, :visible => false) | |
75 | + | |
76 | + block = EnvironmentStatisticsBlock.new | |
77 | + env.boxes.first.blocks << block | |
78 | + | |
79 | + content = block.content | |
80 | + | |
58 | 81 | assert_match /One enterprise/, content |
59 | 82 | assert_match /2 users/, content |
60 | 83 | assert_match /One community/, content | ... | ... |
test/unit/environment_test.rb
... | ... | @@ -460,9 +460,9 @@ class EnvironmentTest < Test::Unit::TestCase |
460 | 460 | assert_kind_of Person, e.person_template |
461 | 461 | |
462 | 462 | # the templates must be private |
463 | - assert !e.enterprise_template.public? | |
464 | - assert !e.community_template.public? | |
465 | - assert !e.person_template.public? | |
463 | + assert !e.enterprise_template.visible? | |
464 | + assert !e.community_template.visible? | |
465 | + assert !e.person_template.visible? | |
466 | 466 | end |
467 | 467 | |
468 | 468 | should 'set templates' do | ... | ... |
test/unit/friends_block_test.rb
... | ... | @@ -62,10 +62,24 @@ class FriendsBlockTest < ActiveSupport::TestCase |
62 | 62 | assert_equal 3, block.profile_count |
63 | 63 | end |
64 | 64 | |
65 | - should 'count number of public people' do | |
65 | + should 'count number of public and private people' do | |
66 | 66 | owner = create_user('testuser1').person |
67 | - private_p = create_user('private', {}, {:public_profile => false}).person | |
68 | - public_p = create_user('public', {}, {:public_profile => true}).person | |
67 | + private_p = fast_create(Person, {:public_profile => false}) | |
68 | + public_p = fast_create(Person, {:public_profile => true}) | |
69 | + | |
70 | + owner.add_friend(private_p) | |
71 | + owner.add_friend(public_p) | |
72 | + | |
73 | + block = FriendsBlock.new | |
74 | + block.expects(:owner).returns(owner) | |
75 | + | |
76 | + assert_equal 2, block.profile_count | |
77 | + end | |
78 | + | |
79 | + should 'not count number of invisible people' do | |
80 | + owner = create_user('testuser1').person | |
81 | + private_p = fast_create(Person, {:visible => false}) | |
82 | + public_p = fast_create(Person, {:visible => true}) | |
69 | 83 | |
70 | 84 | owner.add_friend(private_p) |
71 | 85 | owner.add_friend(public_p) |
... | ... | @@ -75,4 +89,5 @@ class FriendsBlockTest < ActiveSupport::TestCase |
75 | 89 | |
76 | 90 | assert_equal 1, block.profile_count |
77 | 91 | end |
92 | + | |
78 | 93 | end | ... | ... |
test/unit/members_block_test.rb
... | ... | @@ -27,19 +27,16 @@ class MembersBlockTest < Test::Unit::TestCase |
27 | 27 | end |
28 | 28 | |
29 | 29 | should 'pick random members' do |
30 | - | |
31 | - profile = create_user('mytestuser').person | |
32 | 30 | block = MembersBlock.new |
33 | - block.box = profile.boxes.first | |
34 | 31 | block.limit = 2 |
35 | 32 | block.save! |
36 | 33 | |
37 | 34 | owner = mock |
38 | 35 | block.expects(:owner).returns(owner) |
39 | 36 | |
40 | - member1 = mock; member1.stubs(:id).returns(1) | |
41 | - member2 = mock; member2.stubs(:id).returns(2) | |
42 | - member3 = mock; member3.stubs(:id).returns(3) | |
37 | + member1 = stub(:id => 1, :visible? => true) | |
38 | + member2 = stub(:id => 2, :visible? => true) | |
39 | + member3 = stub(:id => 3, :visible? => true) | |
43 | 40 | |
44 | 41 | owner.expects(:members).returns([member1, member2, member3]) |
45 | 42 | |
... | ... | @@ -56,13 +53,13 @@ class MembersBlockTest < Test::Unit::TestCase |
56 | 53 | profile = create_user('mytestuser').person |
57 | 54 | owner = mock |
58 | 55 | |
59 | - member1 = mock; member1.stubs(:id).returns(1) | |
60 | - member2 = mock; member2.stubs(:id).returns(2) | |
61 | - member3 = mock; member3.stubs(:id).returns(3) | |
56 | + member1 = mock | |
57 | + member2 = mock | |
58 | + member3 = mock | |
62 | 59 | |
63 | - member1.stubs(:public_profile?).returns(true) | |
64 | - member2.stubs(:public_profile?).returns(true) | |
65 | - member3.stubs(:public_profile?).returns(true) | |
60 | + member1.stubs(:visible?).returns(true) | |
61 | + member2.stubs(:visible?).returns(true) | |
62 | + member3.stubs(:visible?).returns(true) | |
66 | 63 | |
67 | 64 | owner.expects(:members).returns([member1, member2, member3]) |
68 | 65 | |
... | ... | @@ -71,11 +68,26 @@ class MembersBlockTest < Test::Unit::TestCase |
71 | 68 | assert_equal 3, block.profile_count |
72 | 69 | end |
73 | 70 | |
74 | - should 'not count non-public community members' do | |
75 | - community = Community.create!(:name => 'tcommunity 1', :identifier => 'comm1', :environment => Environment.default) | |
71 | + should 'count non-public community members' do | |
72 | + community = fast_create(Community) | |
73 | + | |
74 | + private_p = fast_create(Person, :public_profile => false) | |
75 | + public_p = fast_create(Person, :public_profile => true) | |
76 | + | |
77 | + community.add_member(private_p) | |
78 | + community.add_member(public_p) | |
79 | + | |
80 | + block = MembersBlock.new | |
81 | + block.expects(:owner).at_least_once.returns(community) | |
82 | + | |
83 | + assert_equal 2, block.profile_count | |
84 | + end | |
85 | + | |
86 | + should 'not count non-visible community members' do | |
87 | + community = fast_create(Community) | |
76 | 88 | |
77 | - private_p = create_user('private', {}, {:public_profile => false}).person | |
78 | - public_p = create_user('public', {}, {:public_profile => true}).person | |
89 | + private_p = fast_create(Person, :visible => false) | |
90 | + public_p = fast_create(Person, :visible => true) | |
79 | 91 | |
80 | 92 | community.add_member(private_p) |
81 | 93 | community.add_member(public_p) |
... | ... | @@ -85,5 +97,6 @@ class MembersBlockTest < Test::Unit::TestCase |
85 | 97 | |
86 | 98 | assert_equal 1, block.profile_count |
87 | 99 | end |
100 | + | |
88 | 101 | end |
89 | 102 | ... | ... |
test/unit/organization_test.rb
... | ... | @@ -239,4 +239,13 @@ class OrganizationTest < Test::Unit::TestCase |
239 | 239 | end |
240 | 240 | end |
241 | 241 | |
242 | + should 'be closed if organization is not public' do | |
243 | + organization = fast_create(Organization) | |
244 | + assert !organization.closed | |
245 | + | |
246 | + organization.public_profile = false | |
247 | + organization.save! | |
248 | + | |
249 | + assert organization.closed | |
250 | + end | |
242 | 251 | end | ... | ... |
test/unit/people_block_test.rb
... | ... | @@ -25,10 +25,19 @@ class PeopleBlockTest < ActiveSupport::TestCase |
25 | 25 | |
26 | 26 | should 'list people' do |
27 | 27 | owner = Environment.create!(:name => 'test environment') |
28 | - Person.expects(:find).with(:all, :select => 'id', :conditions => { :environment_id => owner.id, :public_profile => true}, :limit => 6, :order => 'random()').returns([]) | |
29 | 28 | block = PeopleBlock.new |
30 | 29 | block.expects(:owner).returns(owner).at_least_once |
31 | - block.content | |
30 | + person1 = fast_create(Person, :environment_id => owner.id) | |
31 | + person2 = fast_create(Person, :environment_id => owner.id) | |
32 | + | |
33 | + expects(:profile_image_link).with(person1).returns(person1.name) | |
34 | + expects(:profile_image_link).with(person2).returns(person2.name) | |
35 | + expects(:block_title).with(anything).returns('') | |
36 | + | |
37 | + content = instance_eval(&block.content) | |
38 | + | |
39 | + assert_match(/#{person1.name}/, content) | |
40 | + assert_match(/#{person2.name}/, content) | |
32 | 41 | end |
33 | 42 | |
34 | 43 | should 'link to people directory' do |
... | ... | @@ -40,13 +49,27 @@ class PeopleBlockTest < ActiveSupport::TestCase |
40 | 49 | instance_eval(&block.footer) |
41 | 50 | end |
42 | 51 | |
43 | - should 'count number of public people' do | |
52 | + should 'count number of public and private people' do | |
53 | + env = Environment.create!(:name => 'test environment') | |
54 | + private_p = fast_create(Person, :environment_id => env.id, :public_profile => false) | |
55 | + public_p = fast_create(Person, :environment_id => env.id, :public_profile => true) | |
56 | + | |
57 | + env.boxes.first.blocks << block = PeopleBlock.new | |
58 | + assert_equal 2, block.profile_count | |
59 | + end | |
60 | + | |
61 | + should 'count number of visible people' do | |
44 | 62 | env = Environment.create!(:name => 'test environment') |
45 | - private_p = create_user('private', {:environment => env}, {:public_profile => false}) | |
46 | - public_p = create_user('public', {:environment => env}, {:public_profile => true}) | |
63 | + invisible_p = fast_create(Person, :environment_id => env.id, :visible => false) | |
64 | + visible_p = fast_create(Person, :environment_id => env.id, :visible => true) | |
47 | 65 | |
48 | 66 | env.boxes.first.blocks << block = PeopleBlock.new |
49 | 67 | assert_equal 1, block.profile_count |
50 | 68 | end |
51 | 69 | |
70 | + protected | |
71 | + | |
72 | + def content_tag(tag, text, options = {}) | |
73 | + text | |
74 | + end | |
52 | 75 | end | ... | ... |
test/unit/person_test.rb
... | ... | @@ -510,11 +510,18 @@ class PersonTest < Test::Unit::TestCase |
510 | 510 | assert !p.ask_to_join?(c) |
511 | 511 | end |
512 | 512 | |
513 | - should 'not ask to join if community is not public' do | |
514 | - p = create_user('test_user').person | |
515 | - c = Community.create!(:name => 'Test community', :identifier => 'test_community', :public_profile => false) | |
513 | + should 'ask to join if community is not public' do | |
514 | + person = fast_create(Person) | |
515 | + community = fast_create(Community, :public_profile => false) | |
516 | 516 | |
517 | - assert !p.ask_to_join?(c) | |
517 | + assert person.ask_to_join?(community) | |
518 | + end | |
519 | + | |
520 | + should 'not ask to join if community is not visible' do | |
521 | + person = fast_create(Person) | |
522 | + community = fast_create(Community, :visible => false) | |
523 | + | |
524 | + assert !person.ask_to_join?(community) | |
518 | 525 | end |
519 | 526 | |
520 | 527 | should 'save organization_website with http' do | ... | ... |
test/unit/profile_list_block_test.rb
... | ... | @@ -42,17 +42,30 @@ class ProfileListBlockTest < Test::Unit::TestCase |
42 | 42 | assert_kind_of String, instance_eval(&block.content) |
43 | 43 | end |
44 | 44 | |
45 | - should 'not list private profiles' do | |
45 | + should 'list private profiles' do | |
46 | 46 | env = Environment.create!(:name => 'test env') |
47 | - p1 = Profile.create!(:name => 'test1', :identifier => 'test1', :environment => env) | |
48 | - p2 = Profile.create!(:name => 'test2', :identifier => 'test2', :environment => env, :public_profile => false) # private profile | |
47 | + profile1 = fast_create(Profile, :environment_id => env.id) | |
48 | + profile2 = fast_create(Profile, :environment_id => env.id, :public_profile => false) # private profile | |
49 | 49 | block = ProfileListBlock.new |
50 | 50 | env.boxes.first.blocks << block |
51 | 51 | block.save! |
52 | 52 | |
53 | 53 | ids = block.profile_finder.ids |
54 | - assert_includes ids, p1.id | |
55 | - assert_not_includes ids, p2.id | |
54 | + assert_includes ids, profile1.id | |
55 | + assert_includes ids, profile2.id | |
56 | + end | |
57 | + | |
58 | + should 'not list invisible profiles' do | |
59 | + env = Environment.create!(:name => 'test env') | |
60 | + profile1 = fast_create(Profile, :environment_id => env.id) | |
61 | + profile2 = fast_create(Profile, :environment_id => env.id, :visible => false) # not visible profile | |
62 | + block = ProfileListBlock.new | |
63 | + env.boxes.first.blocks << block | |
64 | + block.save! | |
65 | + | |
66 | + ids = block.profile_finder.ids | |
67 | + assert_includes ids, profile1.id | |
68 | + assert_not_includes ids, profile2.id | |
56 | 69 | end |
57 | 70 | |
58 | 71 | should 'use finders to find profiles to be listed' do |
... | ... | @@ -83,21 +96,40 @@ class ProfileListBlockTest < Test::Unit::TestCase |
83 | 96 | assert_equal '0 members', block.view_title |
84 | 97 | end |
85 | 98 | |
86 | - should 'count number of public profiles' do | |
99 | + should 'count number of public and private profiles' do | |
87 | 100 | env = Environment.create!(:name => 'test env') |
88 | 101 | block = ProfileListBlock.new |
89 | 102 | env.boxes.first.blocks << block |
90 | 103 | block.save! |
91 | 104 | |
92 | - priv_p = create_user('private', {:environment => env}, {:public_profile => false}) | |
93 | - pub_p = create_user('public', {:environment => env}, {:public_profile => true}) | |
105 | + priv_p = fast_create(Person, :environment_id => env.id, :public_profile => false) | |
106 | + pub_p = fast_create(Person, :environment_id => env.id, :public_profile => true) | |
94 | 107 | |
95 | - priv_c = Community.create!(:name => 'com 1', :public_profile => false, :environment => env) | |
96 | - pub_c = Community.create!(:name => 'com 2', :public_profile => true , :environment => env) | |
108 | + priv_c = fast_create(Community, :public_profile => false, :environment_id => env.id) | |
109 | + pub_c = fast_create(Community, :public_profile => true , :environment_id => env.id) | |
97 | 110 | |
98 | - priv_e = Enterprise.create!(:name => 'ent 1', :identifier => 'ent1', :public_profile => false , :environment => env) | |
99 | - pub_e = Enterprise.create!(:name => 'ent 2', :identifier => 'ent2', :public_profile => true , :environment => env) | |
111 | + priv_e = fast_create(Enterprise, :public_profile => false , :environment_id => env.id) | |
112 | + pub_e = fast_create(Enterprise, :public_profile => true , :environment_id => env.id) | |
113 | + | |
114 | + assert_equal 6, block.profile_count | |
115 | + end | |
116 | + | |
117 | + should 'only count number of visible profiles' do | |
118 | + env = Environment.create!(:name => 'test env') | |
119 | + block = ProfileListBlock.new | |
120 | + env.boxes.first.blocks << block | |
121 | + block.save! | |
122 | + | |
123 | + priv_p = fast_create(Person, :environment_id => env.id, :visible => false) | |
124 | + pub_p = fast_create(Person, :environment_id => env.id, :visible => true) | |
125 | + | |
126 | + priv_c = fast_create(Community, :visible => false, :environment_id => env.id) | |
127 | + pub_c = fast_create(Community, :visible => true , :environment_id => env.id) | |
128 | + | |
129 | + priv_e = fast_create(Enterprise, :visible => false , :environment_id => env.id) | |
130 | + pub_e = fast_create(Enterprise, :visible => true , :environment_id => env.id) | |
100 | 131 | |
101 | 132 | assert_equal 3, block.profile_count |
102 | 133 | end |
134 | + | |
103 | 135 | end | ... | ... |
test/unit/profile_test.rb
... | ... | @@ -501,10 +501,10 @@ class ProfileTest < Test::Unit::TestCase |
501 | 501 | end |
502 | 502 | |
503 | 503 | should 'display private profile for members' do |
504 | - p = create_user('testuser').person | |
505 | - c = Community.create!(:name => 'my community', :public_profile => false) | |
504 | + p = fast_create(Person) | |
505 | + c = fast_create(Community, :public_profile => false) | |
506 | + c.expects(:closed).returns(false) | |
506 | 507 | c.add_member(p) |
507 | - | |
508 | 508 | assert c.display_info_to?(p) |
509 | 509 | end |
510 | 510 | |
... | ... | @@ -1509,6 +1509,14 @@ class ProfileTest < Test::Unit::TestCase |
1509 | 1509 | assert_equal false, Profile.is_available?('identifier-test', Environment.default) |
1510 | 1510 | end |
1511 | 1511 | |
1512 | + should 'not have long descriptions' do | |
1513 | + long_description = 'a' * 600 | |
1514 | + profile = Profile.new | |
1515 | + profile.description = long_description | |
1516 | + profile.valid? | |
1517 | + assert profile.errors.invalid?(:description) | |
1518 | + end | |
1519 | + | |
1512 | 1520 | private |
1513 | 1521 | |
1514 | 1522 | def assert_invalid_identifier(id) | ... | ... |