Commit 339df62d33ed7e1fd046e68821b7928f06bd822b

Authored by Daniela Feitosa
1 parent 2e89b866

Enhancements on privacy settings

Added tests
Added background on edition of profile to be easier to know which field
the checkbox is related

(ActionItem1717)
app/helpers/profile_editor_helper.rb
... ... @@ -147,7 +147,7 @@ module ProfileEditorHelper
147 147  
148 148 def unchangeable_privacy_field(profile)
149 149 if profile.public?
150   - labelled_check_box(_('Public'), '', '', true, :disabled => true)
  150 + labelled_check_box(_('Public'), '', '', true, :disabled => true, :title => _('This field must be public'), :class => 'disabled')
151 151 else
152 152 ''
153 153 end
... ...
app/helpers/profile_helper.rb
1 1 module ProfileHelper
2 2  
3 3 def display_field(title, profile, field, force = false)
4   - if (!force && field.to_s != 'email' && !profile.active_fields.include?(field.to_s)) ||
5   - ((profile.active_fields.include?(field.to_s) || field.to_s == 'email') && !profile.public_fields.include?(field.to_s) && (!user || (user != profile && !user.is_a_friend?(profile))))
  4 + if (!force && !profile.active_fields.include?(field.to_s)) ||
  5 + (profile.active_fields.include?(field.to_s) && !profile.public_fields.include?(field.to_s) && (!user || (user != profile && !user.is_a_friend?(profile))))
6 6 return ''
7 7 end
8 8 value = profile.send(field)
... ... @@ -28,4 +28,14 @@ module ProfileHelper
28 28 end
29 29 end
30 30  
  31 + def display_work_info(profile)
  32 + organization = display_field(_('Organization:'), profile, :organization)
  33 + organization_site = display_field(_('Organization website:'), profile, :organization_website) { |url| link_to(url, url) }
  34 + if organization.blank? && organization_site.blank?
  35 + ''
  36 + else
  37 + content_tag('tr', content_tag('th', _('Work'), { :colspan => 2 })) + organization + organization_site
  38 + end
  39 + end
  40 +
31 41 end
... ...
app/models/person.rb
... ... @@ -178,7 +178,8 @@ class Person < Profile
178 178 include MaybeAddHttp
179 179  
180 180 def active_fields
181   - environment ? environment.active_person_fields : []
  181 + fields = environment ? environment.active_person_fields : []
  182 + fields << 'email'
182 183 end
183 184  
184 185 def required_fields
... ...
app/views/profile/_person_profile.rhtml
... ... @@ -16,14 +16,7 @@
16 16 <%= display_contact profile %>
17 17  
18 18 <% cache_timeout(profile.relationships_cache_key, 4.hours) do %>
19   - <% if !(profile.organization.blank? && profile.organization_website.blank?) && (profile.active_fields.include?('organization') || profile.active_fields.include?('organization_website')) %>
20   - <tr>
21   - <th colspan='2'><%= _('Work')%></th>
22   - </tr>
23   - <% end %>
24   - <%= display_field(_('Organization:'), profile, :organization) %>
25   - <%= display_field(_('Organization website:'), profile, :organization_website) { |url| link_to(url, url) }%>
26   -
  19 + <%= display_work_info profile %>
27 20  
28 21 <% if !environment.enabled?('disable_asset_enterprises') && !profile.enterprises.empty? %>
29 22 <tr>
... ... @@ -51,6 +44,6 @@
51 44  
52 45 <%= render :partial => 'common' %>
53 46  
54   - </table>
55   -<% end %>
  47 + <% end %>
  48 +</table>
56 49  
... ...
public/stylesheets/application.css
... ... @@ -6107,14 +6107,17 @@ li.profile-activity-item.upload_image .activity-gallery-images-count-1 img {
6107 6107 display: table-row;
6108 6108 }
6109 6109  
  6110 +.field-with-privacy-selector:hover {
  6111 + background-color: #F0F0F0;
  6112 +}
  6113 +
6110 6114 .controller-profile_editor #profile-data .field-with-privacy-selector .formfieldline {
6111   - display: table-cell;
6112 6115 width: auto;
6113 6116 }
6114 6117  
6115 6118 .field-privacy-selector {
6116 6119 display: table-cell;
6117   - vertical-align: bottom;
  6120 + vertical-align: middle;
6118 6121 text-align: center;
6119 6122 width: 100px;
6120 6123 }
... ...
test/unit/application_helper_test.rb
... ... @@ -379,8 +379,10 @@ class ApplicationHelperTest &lt; ActiveSupport::TestCase
379 379 controller.stubs(:action_name).returns('edit')
380 380  
381 381 profile = Person.new
382   - profile.expects(:active_fields).returns(['field'])
383   - assert_equal 'SIGNUP_FIELD', optional_field(profile, 'field', 'SIGNUP_FIELD')
  382 + profile.stubs(:active_fields).returns(['field'])
  383 +
  384 + expects(:profile_field_privacy_selector).with(profile, 'field').returns('')
  385 + assert_tag_in_string optional_field(profile, 'field', 'EDIT_FIELD'), :tag => 'div', :content => 'EDIT_FIELD', :attributes => {:class => 'field-with-privacy-selector'}
384 386 end
385 387  
386 388 should 'not display active fields' do
... ... @@ -394,7 +396,7 @@ class ApplicationHelperTest &lt; ActiveSupport::TestCase
394 396  
395 397 profile = Person.new
396 398 profile.expects(:active_fields).returns([])
397   - assert_equal '', optional_field(profile, 'field', 'SIGNUP_FIELD')
  399 + assert_equal '', optional_field(profile, 'field', 'EDIT_FIELD')
398 400 end
399 401  
400 402 should 'display required fields' do
... ... @@ -406,11 +408,13 @@ class ApplicationHelperTest &lt; ActiveSupport::TestCase
406 408 controller.stubs(:controller_name).returns('')
407 409 controller.stubs(:action_name).returns('edit')
408 410  
409   - stubs(:required).with('SIGNUP_FIELD').returns('<span>SIGNUP_FIELD</span>')
410 411 profile = Person.new
411   - profile.expects(:active_fields).returns(['field'])
  412 + profile.stubs(:active_fields).returns(['field'])
412 413 profile.expects(:required_fields).returns(['field'])
413   - assert_equal '<span>SIGNUP_FIELD</span>', optional_field(profile, 'field', 'SIGNUP_FIELD')
  414 +
  415 + stubs(:required).with(anything).returns('<span>EDIT_FIELD</span>')
  416 + expects(:profile_field_privacy_selector).with(profile, 'field').returns('')
  417 + assert_equal '<span>EDIT_FIELD</span>', optional_field(profile, 'field', 'EDIT_FIELD')
414 418 end
415 419  
416 420 should 'base theme uses default icon theme' do
... ...
test/unit/person_test.rb
... ... @@ -441,6 +441,14 @@ class PersonTest &lt; ActiveSupport::TestCase
441 441 assert_equal e.active_person_fields, person.active_fields
442 442 end
443 443  
  444 + should 'return email as active_person_fields' do
  445 + e = Environment.default
  446 + e.expects(:active_person_fields).returns(['nickname']).at_least_once
  447 + person = Person.new(:environment => e)
  448 +
  449 + assert_equal ['nickname', 'email'], person.active_fields
  450 + end
  451 +
444 452 should 'return required_person_fields' do
445 453 e = Environment.default
446 454 e.expects(:required_person_fields).returns(['cell_phone', 'comercial_phone']).at_least_once
... ...
test/unit/profile_helper_test.rb
... ... @@ -2,6 +2,10 @@ require File.dirname(__FILE__) + &#39;/../test_helper&#39;
2 2  
3 3 class ProfileHelperTest < ActiveSupport::TestCase
4 4  
  5 + include ProfileHelper
  6 + include ApplicationHelper
  7 + include ActionView::Helpers::TagHelper
  8 +
5 9 def setup
6 10 @profile = mock
7 11 @helper = mock
... ... @@ -9,8 +13,85 @@ class ProfileHelperTest &lt; ActiveSupport::TestCase
9 13 end
10 14 attr_reader :profile, :helper
11 15  
12   - def test_true
13   - assert true
  16 + should 'not display field if field is not active and not forced' do
  17 + profile.expects(:active_fields).returns([])
  18 + assert_equal '', display_field('Title', profile, 'field')
  19 + end
  20 +
  21 + should 'display field if field is not active but is forced' do
  22 + profile.expects(:active_fields).returns([])
  23 + profile.expects(:field).returns('value')
  24 + assert_match /Title.*value/, display_field('Title', profile, 'field', true)
  25 + end
  26 +
  27 + should 'not display field if field is active but not public and not logged in' do
  28 + profile.stubs(:active_fields).returns(['field'])
  29 + profile.expects(:public_fields).returns([])
  30 + @controller = mock
  31 + @controller.stubs(:user).returns(nil)
  32 + assert_equal '', display_field('Title', profile, 'field')
  33 + end
  34 +
  35 + should 'not display field if field is active but not public and user is not friend' do
  36 + profile.stubs(:active_fields).returns(['field'])
  37 + profile.expects(:public_fields).returns([])
  38 + user = mock
  39 + user.expects(:is_a_friend?).with(profile).returns(false)
  40 + @controller = mock
  41 + @controller.stubs(:user).returns(user)
  42 + assert_equal '', display_field('Title', profile, 'field')
  43 + end
  44 +
  45 + should 'display field if field is active and not public but user is profile owner' do
  46 + profile.stubs(:active_fields).returns(['field'])
  47 + profile.expects(:public_fields).returns([])
  48 + profile.expects(:field).returns('value')
  49 + @controller = mock
  50 + @controller.stubs(:user).returns(profile)
  51 + assert_match /Title.*value/, display_field('Title', profile, 'field', true)
  52 + end
  53 +
  54 + should 'display field if field is active and not public but user is a friend' do
  55 + profile.stubs(:active_fields).returns(['field'])
  56 + profile.expects(:public_fields).returns([])
  57 + profile.expects(:field).returns('value')
  58 + user = mock
  59 + user.expects(:is_a_friend?).with(profile).returns(true)
  60 + @controller = mock
  61 + @controller.stubs(:user).returns(user)
  62 + assert_match /Title.*value/, display_field('Title', profile, 'field', true)
  63 + end
  64 +
  65 + should 'not display work info if field is active but not public and user is not friend' do
  66 + profile.stubs(:active_fields).returns(['organization', 'organization_website'])
  67 + profile.expects(:public_fields).returns([]).times(2)
  68 + user = mock
  69 + user.expects(:is_a_friend?).with(profile).returns(false).times(2)
  70 + @controller = mock
  71 + @controller.stubs(:user).returns(user)
  72 + assert_equal '', display_work_info(profile)
  73 + end
  74 +
  75 + should 'display work info if field is active and not public but user is profile owner' do
  76 + profile.stubs(:active_fields).returns(['organization', 'organization_website'])
  77 + profile.expects(:public_fields).returns([]).times(2)
  78 + profile.expects(:organization).returns('Organization Name')
  79 + profile.expects(:organization_website).returns('')
  80 + @controller = mock
  81 + @controller.stubs(:user).returns(profile)
  82 + assert_match /Work.*Organization Name/, display_work_info(profile)
  83 + end
  84 +
  85 + should 'display work info if field is active and not public but user is a friend' do
  86 + profile.stubs(:active_fields).returns(['organization', 'organization_website'])
  87 + profile.expects(:public_fields).returns([]).times(2)
  88 + profile.expects(:organization).returns('Organization Name')
  89 + profile.expects(:organization_website).returns('')
  90 + user = mock
  91 + user.expects(:is_a_friend?).with(profile).returns(true).times(2)
  92 + @controller = mock
  93 + @controller.stubs(:user).returns(user)
  94 + assert_match /Work.*Organization Name/, display_work_info(profile)
14 95 end
15 96  
16 97 end
... ...