Commit ec0761a4546cf4ebf56538d75d3fc67d6f65930f

Authored by JoenioCosta
1 parent 7f93cfa3

ActionItem380: moving all fields from PersonInfo and OrganizationInfo to profile…

… using settings_items

git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@1802 3f533792-8f58-4932-b0fe-aaf55b0a4547
app/controllers/my_profile/enterprise_editor_controller.rb
... ... @@ -16,7 +16,7 @@ class EnterpriseEditorController < MyProfileController
16 16  
17 17 # Saves the changes made in an enterprise
18 18 def update
19   - if @enterprise.update_attributes(params[:enterprise]) && @enterprise.organization_info.update_attributes(params[:organization_info])
  19 + if @enterprise.update_attributes(params[:enterprise])
20 20 redirect_to :action => 'index'
21 21 else
22 22 flash[:notice] = _('Could not update the enterprise')
... ...
app/controllers/my_profile/profile_editor_controller.rb
... ... @@ -11,12 +11,11 @@ class ProfileEditorController < MyProfileController
11 11 # edits the profile info (posts back)
12 12 def edit
13 13 if request.post?
14   - if profile.update_attributes(params[:profile_data]) and profile.info.save
  14 + if profile.update_attributes(params[:profile_data])
15 15 redirect_to :action => 'index'
16 16 end
17 17 else
18   - @info = profile.info
19   - render :action => @info.class.name.underscore
  18 + render :action => profile.class.name.underscore
20 19 end
21 20 end
22 21  
... ...
app/helpers/profile_helper.rb
1 1 module ProfileHelper
2 2  
3 3 def display_profile_info(profile)
4   - info = profile.info
5   - if info.nil?
6   - content_tag('div', _('This profile does not have any public information'))
7   - else
8   - table_rows = content_tag( 'tr',
9   - content_tag( 'th',
10   - "\n" +
11   - button( :edit, _('edit your information'), :controller => 'profile_editor', :action => 'edit' ) +
12   - "\n",
13   - :colspan => 2, :class => 'header' )
14   - ) + "\n"
15   - info.summary.each do |item|
16   - name = item[0]
17   - value = item[1]
18   - if value.is_a?(Proc)
19   - value = self.instance_eval(value)
20   - end
21   - table_rows << content_tag('tr', content_tag('th', name) + content_tag('td', value))
22   - table_rows << "\n"
  4 + table_rows = content_tag( 'tr',
  5 + content_tag( 'th',
  6 + "\n" +
  7 + button( :edit, _('edit your information'), :controller => 'profile_editor', :action => 'edit' ) +
  8 + "\n",
  9 + :colspan => 2, :class => 'header' )
  10 + ) + "\n"
  11 + profile.summary.each do |item|
  12 + name = item[0]
  13 + value = item[1]
  14 + if value.is_a?(Proc)
  15 + value = self.instance_eval(value)
23 16 end
24   -
25   - content_tag(
26   - 'table',
27   - table_rows,
28   - :class => 'profile_info'
29   - )
  17 + table_rows << content_tag('tr', content_tag('th', _(name)) + content_tag('td', value))
  18 + table_rows << "\n"
30 19 end
  20 +
  21 + content_tag(
  22 + 'table',
  23 + table_rows,
  24 + :class => 'profile_info'
  25 + )
31 26 end
32 27  
33 28 end
... ...
app/models/create_enterprise.rb
... ... @@ -112,13 +112,13 @@ class CreateEnterprise &lt; Task
112 112 enterprise.send("#{field}=", self.send(field))
113 113 end
114 114  
115   - organization_info_data = self.data.reject do |key,value|
  115 + organization_data = self.data.reject do |key,value|
116 116 profile_fields.include?(key.to_s)
117 117 end
118 118  
119 119 enterprise.user = self.requestor.user
120 120  
121   - enterprise.organization_info = OrganizationInfo.new(organization_info_data)
  121 + enterprise.update_attributes(organization_data)
122 122 enterprise.save!
123 123 end
124 124  
... ...
app/models/organization.rb
1   -# Represents any organization of the system and has an organization_info object to hold its info
  1 +# Represents any organization of the system
2 2 class Organization < Profile
3 3  
4   - has_one :organization_info
5   -
6 4 belongs_to :region
7 5  
8 6 has_one :validation_info
9 7  
10 8 has_many :validations, :class_name => 'CreateEnterprise', :foreign_key => :target_id
11 9  
12   - after_create do |org|
13   - OrganizationInfo.create!(:organization_id => org.id)
14   - end
15   -
16   - def contact_email
17   - self.organization_info ? self.organization_info.contact_email : nil
18   - end
19   -
20 10 def validation_methodology
21 11 self.validation_info ? self.validation_info.validation_methodology : nil
22 12 end
... ... @@ -45,8 +35,19 @@ class Organization &lt; Profile
45 35 !self.validation_info.nil?
46 36 end
47 37  
48   - def info
49   - organization_info
  38 + settings_items :contact_person, :contact_email, :acronym, :foundation_year, :legal_form, :economic_activity, :management_information, :validated
  39 +
  40 + validates_format_of :foundation_year, :with => Noosfero::Constants::INTEGER_FORMAT, :if => (lambda { |org| ! org.foundation_year.nil? })
  41 +
  42 + validates_format_of :contact_email, :with => Noosfero::Constants::EMAIL_FORMAT, :if => (lambda { |org| ! org.contact_email.nil? })
  43 +
  44 + xss_terminate :only => [ :acronym, :contact_person, :contact_email, :legal_form, :economic_activity, :management_information ]
  45 +
  46 + def summary
  47 + # FIXME diplays too few fields
  48 + ['acronym', 'foundation_year', 'contact_email'].map do |col|
  49 + [ col.humanize, self.send(col) ]
  50 + end
50 51 end
51 52  
52 53 # Yes, organizations have members.
... ...
app/models/organization_info.rb
... ... @@ -1,16 +0,0 @@
1   -class OrganizationInfo < ActiveRecord::Base
2   - belongs_to :organization
3   -
4   - validates_numericality_of :foundation_year, :only_integer => true, :allow_nil => true
5   -
6   - validates_format_of :contact_email, :with => Noosfero::Constants::EMAIL_FORMAT, :if => (lambda { |info| ! info.contact_email.nil? })
7   -
8   - xss_terminate :only => [ :acronym, :contact_person, :contact_email, :legal_form, :economic_activity, :management_information ]
9   -
10   - def summary
11   - # FIXME diplays too few fields
12   - [ 'acronym', 'foundation_year', 'contact_email'].map do |col|
13   - [ OrganizationInfo.columns_hash[col].human_name, self.send(col) ]
14   - end
15   - end
16   -end
app/models/person.rb
... ... @@ -21,8 +21,14 @@ class Person &lt; Profile
21 21 def remove_friend(friend)
22 22 friends.delete(friend)
23 23 end
24   -
25   - has_one :person_info
  24 +
  25 + settings_items :photo, :contact_information, :birth_date, :sex, :city, :state, :country
  26 +
  27 + def summary
  28 + ['name', 'contact_information', 'sex', 'birth_date', 'address', 'city', 'state', 'country'].map do |col|
  29 + [ col.humanize, self.send(col) ]
  30 + end
  31 + end
26 32  
27 33 def self.conditions_for_profiles(conditions, person)
28 34 new_conditions = sanitize_sql(['role_assignments.accessor_id = ?', person])
... ... @@ -50,20 +56,9 @@ class Person &lt; Profile
50 56  
51 57 alias :communities :community_memberships
52 58  
53   -
54   - def info
55   - person_info
56   - end
57   -
58 59 validates_presence_of :user_id
59 60 validates_uniqueness_of :user_id
60 61  
61   - def initialize(*args)
62   - super(*args)
63   - self.person_info ||= PersonInfo.new
64   - self.person_info.person = self
65   - end
66   -
67 62 def email
68 63 self.user.nil? ? nil : self.user.email
69 64 end
... ... @@ -105,7 +100,11 @@ class Person &lt; Profile
105 100 hacked_after_create :insert_default_homepage_and_feed
106 101  
107 102 def name
108   - person_info.nil? ? self[:name] : (person_info.name || self[:name])
  103 + if !self[:name].nil?
  104 + self[:name]
  105 + else
  106 + self.user ? self.user.login : nil
  107 + end
109 108 end
110 109  
111 110 has_and_belongs_to_many :favorite_enterprises, :class_name => 'Enterprise', :join_table => 'favorite_enteprises_people'
... ...
app/models/profile.rb
... ... @@ -96,7 +96,7 @@ class Profile &lt; ActiveRecord::Base
96 96 end
97 97  
98 98 validates_presence_of :identifier, :name
99   - validates_format_of :identifier, :with => IDENTIFIER_FORMAT, :message => "Identifier %s is invalid"
  99 + validates_format_of :identifier, :with => IDENTIFIER_FORMAT
100 100 validates_exclusion_of :identifier, :in => RESERVED_IDENTIFIERS
101 101 validates_uniqueness_of :identifier
102 102  
... ... @@ -121,32 +121,7 @@ class Profile &lt; ActiveRecord::Base
121 121 true
122 122 end
123 123  
124   - xss_terminate :only => [ :address, :contact_phone ]
125   -
126   - # Returns information about the profile's owner that was made public by
127   - # him/her.
128   - #
129   - # The returned value must be an object that responds to a method "summary",
130   - # which must return an array in the following format:
131   - #
132   - # [
133   - # [ 'First Field', first_field_value ],
134   - # [ 'Second Field', second_field_value ],
135   - # ]
136   - #
137   - # This information shall be used by user interface to present the
138   - # information.
139   - #
140   - # In this class, this method returns nil, what is interpreted as "no
141   - # information at all". Subclasses must override this method to provide their
142   - # specific information.
143   - def info
144   - nil
145   - end
146   -
147   - def info=(args = {})
148   - self.info.attributes = args if self.info
149   - end
  124 + xss_terminate :only => [ :name, :address, :contact_phone ]
150 125  
151 126 # returns the contact email for this profile. By default returns the the
152 127 # e-mail of the owner user.
... ...
app/views/account/user_info.rhtml
... ... @@ -3,7 +3,7 @@
3 3 <h2><%= _('Logged in as %s') % user.identifier %></h2>
4 4  
5 5 <ul>
6   - <li><%= _('User since %{year}/%{month}') % { :year => user.person_info.created_at.year, :month => user.person_info.created_at.month } %></li>
  6 + <li><%= _('User since %{year}/%{month}') % { :year => user.created_at.year, :month => user.created_at.month } %></li>
7 7 <li><%= link_to_homepage _('Homepage') %></li>
8 8 </ul>
9 9  
... ...
app/views/enterprise_editor/_form.rhtml
... ... @@ -8,22 +8,22 @@
8 8 <%= text_field 'enterprise', 'contact_phone', 'size' => 20 %></p>
9 9  
10 10 <p class='formfield text_field'><label for="contact_person"><%= _('Contact Person') %></label><br/>
11   -<%= text_field 'organization_info', 'contact_person', 'size' => 20 %></p>
  11 +<%= text_field 'enterprise', 'contact_person', 'size' => 20 %></p>
12 12  
13 13 <p class='formfield text_field'><label for="acronym"><%= _('Acronym') %></label><br/>
14   -<%= text_field 'organization_info', 'acronym', 'size' => 20 %></p>
  14 +<%= text_field 'enterprise', 'acronym', 'size' => 20 %></p>
15 15  
16 16 <p class='formfield text_field'><label for="foundation_year"><%= _('Foundation Year') %></label><br/>
17   -<%= text_field 'organization_info', 'foundation_year', 'size' => 20 %></p>
  17 +<%= text_field 'enterprise', 'foundation_year', 'size' => 20 %></p>
18 18  
19 19 <p class='formfield text_field'><label for="legal_form"><%= _('Legal Form') %></label><br/>
20   -<%= text_field 'organization_info', 'legal_form', 'size' => 20 %></p>
  20 +<%= text_field 'enterprise', 'legal_form', 'size' => 20 %></p>
21 21  
22 22 <p class='formfield text_field'><label for="economic_activity"><%= _('Economic Activity') %></label><br/>
23   -<%= text_field 'organization_info', 'economic_activity', 'size' => 20 %></p>
  23 +<%= text_field 'enterprise', 'economic_activity', 'size' => 20 %></p>
24 24  
25 25 <p class='formfield text_area'><label for="management_information"><%= _('Management Information') %></label><br/>
26   -<%= text_area 'organization_info', 'management_information', 'cols' => 40, 'rows' => 20 %></p>
  26 +<%= text_area 'enterprise', 'management_information', 'cols' => 40, 'rows' => 20 %></p>
27 27  
28 28 <p class='formfield select'><label for="validation_entity"><%= _('Validation Entity') %></label><br/>
29 29 <%= select 'validation_entity', 'id', @validation_entities.map{|v| [v.name, v.id]}, :include_blank => true %></p>
... ...
app/views/enterprise_editor/index.rhtml
... ... @@ -5,12 +5,12 @@
5 5 <p> <%= _('Identifier:') %> <%= @enterprise.identifier %> </p>
6 6 <p> <%= _('Address:') %> <%= @enterprise.address %> </p>
7 7 <p> <%= _('Contact phone:') %> <%= @enterprise.contact_phone %> </p>
8   -<p> <%= _('Contact person:') %> <%= @enterprise.organization_info.contact_person %> </p>
9   -<p> <%= _('Acronym:') %> <%= @enterprise.organization_info.acronym %> </p>
10   -<p> <%= _('Foundation year:') %> <%= @enterprise.organization_info.foundation_year %> </p>
11   -<p> <%= _('Legal Form:') %> <%= @enterprise.organization_info.legal_form %> </p>
12   -<p> <%= _('Economic activity:') %> <%= @enterprise.organization_info.economic_activity %> </p>
13   -<p> <%= _('Management infomation:') %> <%= @enterprise.organization_info.management_information %> </p>
  8 +<p> <%= _('Contact person:') %> <%= @enterprise.contact_person %> </p>
  9 +<p> <%= _('Acronym:') %> <%= @enterprise.acronym %> </p>
  10 +<p> <%= _('Foundation year:') %> <%= @enterprise.foundation_year %> </p>
  11 +<p> <%= _('Legal Form:') %> <%= @enterprise.legal_form %> </p>
  12 +<p> <%= _('Economic activity:') %> <%= @enterprise.economic_activity %> </p>
  13 +<p> <%= _('Management infomation:') %> <%= @enterprise.management_information %> </p>
14 14  
15 15 <%= link_to _('Edit enterprise'), :action => 'edit', :id => @enterprise %>
16 16 <%= help _('Change the information about the enterprise') %>
... ...
app/views/profile_editor/index.rhtml
... ... @@ -10,8 +10,6 @@
10 10  
11 11 <%= file_manager_button(_('Change your picture'), profile_icon(@profile, :portrait), :controller => 'profile_editor', :action => 'change_image') %>
12 12  
13   - <%# file_manager_button(_('Edit Profile'), 'icons-app/edit-profile.png', :controller => 'profile_editor', :action => 'edit') %>
14   -
15 13 <%= file_manager_button(_('Pending tasks'), 'icons-app/todo.png', :controller => 'tasks', :action => 'index') %>
16 14  
17 15 <%= file_manager_button(_('Edit Visual Design'), 'icons-app/design-editor.png', :controller => 'profile_design', :action => 'index') %>
... ...
app/views/profile_editor/organization.rhtml 0 → 100644
... ... @@ -0,0 +1,16 @@
  1 +<h1> <%= _('Edit organization info') %> </h1>
  2 +
  3 +<%= error_messages_for :profile %>
  4 +
  5 +<% labelled_form_for :profile_data, @profile do |f| %>
  6 + <%= f.text_field(:contact_person) %>
  7 + <%= f.text_field(:acronym) %>
  8 + <%= f.text_field(:foundation_year) %>
  9 + <%= f.text_field(:legal_form) %>
  10 + <%= f.text_field(:economic_activity) %>
  11 + <%= f.text_area(:management_information, :rows => 5) %>
  12 + <%= f.text_area(:description, :rows => 5) if @profile.kind_of?(Community) %>
  13 + <% button_bar do %>
  14 + <%= submit_button('save' , _('Save'), :cancel => {:action => 'index'}) %>
  15 + <% end %>
  16 +<% end %>
... ...
app/views/profile_editor/organization_info.rhtml
... ... @@ -1,18 +0,0 @@
1   -<h1> <%= _('Edit organization info') %> </h1>
2   -
3   -<%= error_messages_for :profile %>
4   -
5   -<% labelled_form_for :profile_data, @profile do |f| %>
6   - <%= f.text_area(:description, :rows => 5) if @profile.kind_of?(Community) %>
7   - <% labelled_fields_for 'profile_data[info]', @profile.organization_info do |i| %>
8   - <%= i.text_field(:contact_person) %>
9   - <%= i.text_field(:acronym) %>
10   - <%= i.text_field(:foundation_year) %>
11   - <%= i.text_field(:legal_form) %>
12   - <%= i.text_field(:economic_activity) %>
13   - <%= i.text_area(:management_information, :rows => 5) %>
14   - <% end %>
15   - <% button_bar do %>
16   - <%= submit_button('save' , _('Save'), :cancel => {:action => 'index'}) %>
17   - <% end %>
18   -<% end %>
app/views/profile_editor/person.rhtml 0 → 100644
... ... @@ -0,0 +1,19 @@
  1 +<h1><%= _('Edit person info') %></h1>
  2 +
  3 +<%= error_messages_for :profile %>
  4 +
  5 +<% labelled_form_for :profile, @profile do |f| %>
  6 + <%= f.text_field(:name) %>
  7 + <%= _('Sex: ') %>
  8 + <%= display_form_field(_('Male'), radio_button(:profile, :sex, 'male')) %>
  9 + <%= display_form_field(_('Female'), radio_button(:profile, :sex, 'female')) %>
  10 + <%= f.text_field(:city) %>
  11 + <%= f.text_field(:state) %>
  12 + <%= f.text_field(:country) %>
  13 + <% button_bar do %>
  14 + <%= submit_button('save', _('Save'), :cancel => {:action => 'index'}) %>
  15 + <% end %>
  16 +
  17 +<% end %>
  18 +
  19 +<%# = generate_form :info, @info, {...} %>
... ...
app/views/profile_editor/person_info.rhtml
... ... @@ -1,20 +0,0 @@
1   -<h1><%= _('Edit person info') %></h1>
2   -
3   -<%= error_messages_for :info %>
4   -
5   -<% labelled_form_for :info, @info do |f| %>
6   -
7   - <%= f.text_field(:name) %>
8   - <%= _('Sex: ') %>
9   - <%= display_form_field(_('Male'), radio_button(:info, :sex, 'male')) %>
10   - <%= display_form_field(_('Female'), radio_button(:info, :sex, 'female')) %>
11   - <%= f.text_field(:city) %>
12   - <%= f.text_field(:state) %>
13   - <%= f.text_field(:country) %>
14   - <% button_bar do %>
15   - <%= submit_button('save', _('Save'), :cancel => {:action => 'index'}) %>
16   - <% end %>
17   -
18   -<% end %>
19   -
20   -<%# = generate_form :info, @info, {...} %>
db/migrate/033_destroy_organization_and_person_infos.rb 0 → 100644
... ... @@ -0,0 +1,25 @@
  1 +class DestroyOrganizationAndPersonInfos < ActiveRecord::Migration
  2 + def self.up
  3 + Person.find(:all).each do |i|
  4 + i.name = i.info.name unless i.info.name.nil?
  5 + i.address = i.info.address unless i.info.address.nil?
  6 + for field in [ :photo, :contact_information, :birth_date, :sex, :city, :state, :country ] do
  7 + i.send("#{field}=", i.info.send(field))
  8 + end
  9 + i.save!
  10 + end
  11 + drop_table :person_infos
  12 +
  13 + Organization.find(:all).each do |i|
  14 + for field in [ :contact_person, :contact_email, :acronym, :foundation_year, :legal_form, :economic_activity, :management_information, :validated ] do
  15 + i.send("#{field}=", i.info.send(field))
  16 + end
  17 + i.save!
  18 + end
  19 + drop_table :organization_infos
  20 + end
  21 +
  22 + def self.down
  23 + raise "this migration can't be reverted"
  24 + end
  25 +end
... ...
lib/noosfero/constants.rb
1 1 module Noosfero::Constants
2 2 EMAIL_FORMAT = /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i
  3 + INTEGER_FORMAT = /\A\d+\Z/i
3 4 end
... ...
test/fixtures/organization_infos.yml
... ... @@ -1,6 +0,0 @@
1   -# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
2   -one:
3   - id: 1
4   - organization_id: 5
5   -two:
6   - id: 2
test/fixtures/person_infos.yml
... ... @@ -1,8 +0,0 @@
1   -person_info_for_ze:
2   - id: 1
3   - person_id: 4
4   - name: "Zé, José, Zezinho"
5   - address: "house of the hat"
6   - contact_information: "Pavilhão 9, Quadrante 13, Esquina com Avenida das Alamedas, 467, fundos, falar com Dona Ivete após as 16"
7   - created_at: '2007-12-01'
8   -
test/fixtures/profiles.yml
... ... @@ -26,6 +26,12 @@ ze:
26 26 user_id: 3
27 27 identifier: ze
28 28 environment_id: 1
  29 + data: {
  30 + :person_id: 4,
  31 + :address: "house of the hat",
  32 + :contact_information: "Pavilhão 9, Quadrante 13, Esquina com Avenida das Alamedas, 467, fundos, falar com Dona Ivete após as 16",
  33 + :created_at: '2007-12-01'
  34 + }
29 35 colivre:
30 36 id: 5
31 37 name: "cooptec_livre"
... ...
test/functional/enterprise_editor_controller_test.rb
... ... @@ -76,12 +76,12 @@ class EnterpriseEditorControllerTest &lt; Test::Unit::TestCase
76 76 user = create_user_with_permission('test_user', 'edit_profile', ent)
77 77 login_as :test_user
78 78  
79   - post 'update', :profile => 'test_enterprise', :organization_info => {:acronym => 'bla'}
  79 + post 'update', :profile => 'test_enterprise', :enterprise => {:acronym => 'bla'}
80 80  
81 81 assert_response :redirect
82 82 assert_redirected_to :action => 'index'
83 83 ent.reload
84   - assert_equal 'bla', ent.organization_info.acronym
  84 + assert_equal 'bla', ent.acronym
85 85 end
86 86  
87 87 should 'destroy' do
... ...
test/functional/profile_editor_controller_test.rb
... ... @@ -24,10 +24,10 @@ class ProfileEditorControllerTest &lt; Test::Unit::TestCase
24 24  
25 25 def test_index
26 26 person = User.create(:login => 'test_profile', :email => 'test@noosfero.org', :password => 'test', :password_confirmation => 'test').person
27   - person.person_info.name = 'a test profile'
28   - person.person_info.address = 'my address'
29   - person.person_info.contact_information = 'my contact information'
30   - person.person_info.save
  27 + person.name = 'a test profile'
  28 + person.address = 'my address'
  29 + person.contact_information = 'my contact information'
  30 + person.save!
31 31  
32 32 get :index, :profile => person.identifier
33 33 assert_template 'index'
... ... @@ -57,18 +57,17 @@ class ProfileEditorControllerTest &lt; Test::Unit::TestCase
57 57  
58 58 assert person.valid?
59 59 get :edit, :profile => person.identifier
60   - assert_template 'person_info'
61 60 assert_response :success
62   - assert_template 'person_info'
  61 + assert_template 'person'
63 62 end
64 63  
65 64 def test_saving_profile_info
66 65 person = User.create(:login => 'test_profile', :email => 'test@noosfero.org', :password => 'test', :password_confirmation => 'test').person
67   - person.person_info.address = 'my address'
68   - person.person_info.contact_information = 'my contact information'
69   - person.person_info.save!
  66 + person.address = 'my address'
  67 + person.contact_information = 'my contact information'
  68 + person.save!
70 69  
71   - post :edit, :profile => 'test_profile', :info => { 'contact_information' => 'new contact information', 'address' => 'new address' }
  70 + post :edit, :profile => 'test_profile', :profile_data => { 'contact_information' => 'new contact information', 'address' => 'new address' }
72 71  
73 72 assert_redirected_to :action => 'index'
74 73 end
... ... @@ -102,56 +101,55 @@ class ProfileEditorControllerTest &lt; Test::Unit::TestCase
102 101 should 'filter html from name when edit person_info' do
103 102 person = create_user('test_profile').person
104 103 name = "name <strong id='name_html_test'>with</strong> html"
105   - post :edit, :profile => person.identifier, :profile_data => { :info => { :name => name } }
106   - assert_sanitized assigns(:profile).info.name
  104 + post :edit, :profile => person.identifier, :profile_data => { :name => name }
  105 + assert_sanitized assigns(:profile).name
107 106 end
108 107  
109 108 should 'filter html from contact_person to organization' do
110 109 org = Organization.create!(:name => 'test org', :identifier => 'testorg')
111 110 contact = "name <strong id='name_html_test'>with</strong> html"
112   - post :edit, :profile => org.identifier, :profile_data => { :info => { :contact_person => contact } }
113   - assert_sanitized assigns(:profile).info.contact_person
  111 + post :edit, :profile => org.identifier, :profile_data => { :contact_person => contact }
  112 + assert_sanitized assigns(:profile).contact_person
114 113 end
115 114  
116 115 should 'filter html from acronym organization' do
117 116 org = Organization.create!(:name => 'test org', :identifier => 'testorg')
118 117 value = "name <strong id='name_html_test'>with</strong> html"
119   - post :edit, :profile => org.identifier, :profile_data => { :info => { :acronym => value } }
120   - assert_sanitized assigns(:profile).info.acronym
  118 + post :edit, :profile => org.identifier, :profile_data => { :acronym => value }
  119 + assert_sanitized assigns(:profile).acronym
121 120 end
122 121  
123 122 should 'filter html from legal_form organization' do
124 123 org = Organization.create!(:name => 'test org', :identifier => 'testorg')
125 124 value = "name <strong id='name_html_test'>with</strong> html"
126   - post :edit, :profile => org.identifier, :profile_data => { :info => { :legal_form => value } }
127   - assert_sanitized assigns(:profile).info.legal_form
  125 + post :edit, :profile => org.identifier, :profile_data => { :legal_form => value }
  126 + assert_sanitized assigns(:profile).legal_form
128 127 end
129 128  
130 129 should 'filter html from economic_activity organization' do
131 130 org = Organization.create!(:name => 'test org', :identifier => 'testorg')
132 131 value = "name <strong id='name_html_test'>with</strong> html"
133   - post :edit, :profile => org.identifier, :profile_data => { :info => { :economic_activity => value } }
134   - assert_sanitized assigns(:profile).info.economic_activity
  132 + post :edit, :profile => org.identifier, :profile_data => { :economic_activity => value }
  133 + assert_sanitized assigns(:profile).economic_activity
135 134 end
136 135  
137 136 should 'filter html from management_information organization' do
138 137 org = Organization.create!(:name => 'test org', :identifier => 'testorg')
139 138 value = "name <strong id='name_html_test'>with</strong> html"
140   - post :edit, :profile => org.identifier, :profile_data => { :info => { :management_information => value } }
141   - assert_sanitized assigns(:profile).info.management_information
  139 + post :edit, :profile => org.identifier, :profile_data => { :management_information => value }
  140 + assert_sanitized assigns(:profile).management_information
142 141 end
143 142  
144 143 should 'saving profile organization_info' do
145 144 org = Organization.create!(:name => 'test org', :identifier => 'testorg')
146   - org.organization_info.create!
147   - post :edit, :profile => 'testorg', :profile_data => { :info => { :contact_person => 'contact person' } }
148   - assert_equal 'contact person', Organization.find(org.id).organization_info.contact_person
  145 + post :edit, :profile => 'testorg', :profile_data => { :contact_person => 'contact person' }
  146 + assert_equal 'contact person', Organization.find(org.id).contact_person
149 147 end
150 148  
151 149 should 'show contact_person field on edit organization' do
152 150 org = Organization.create!(:name => 'test org', :identifier => 'testorg')
153 151 get :edit, :profile => org.identifier
154   - assert_tag :tag => 'input', :attributes => { :name => 'profile_data[info][contact_person]' }
  152 + assert_tag :tag => 'input', :attributes => { :name => 'profile_data[contact_person]' }
155 153 end
156 154  
157 155 should 'save community description' do
... ... @@ -174,22 +172,22 @@ class ProfileEditorControllerTest &lt; Test::Unit::TestCase
174 172  
175 173 should 'save organization contact_person' do
176 174 org = Organization.create!(:name => 'test org', :identifier => 'testorg')
177   - post :edit, :profile => 'testorg', :profile_data => { :info => { :contact_person => 'my contact' } }
178   - assert_equal 'my contact', Organization.find(org.id).info.contact_person
  175 + post :edit, :profile => 'testorg', :profile_data => { :contact_person => 'my contact' }
  176 + assert_equal 'my contact', Organization.find(org.id).contact_person
179 177 end
180 178  
181 179 should 'save enterprise contact_person' do
182 180 org = Enterprise.create!(:name => 'test org', :identifier => 'testorg')
183   - post :edit, :profile => 'testorg', :profile_data => { :info => { :contact_person => 'my contact' } }
184   - assert_equal 'my contact', Enterprise.find(org.id).info.contact_person
  181 + post :edit, :profile => 'testorg', :profile_data => { :contact_person => 'my contact' }
  182 + assert_equal 'my contact', Enterprise.find(org.id).contact_person
185 183 end
186 184  
187 185 should 'show field values on edit organization info' do
188 186 org = Organization.create!(:name => 'test org', :identifier => 'testorg')
189   - org.info = { :contact_person => 'my contact' }
190   - org.info.save!
  187 + org.contact_person = 'my contact'
  188 + org.save!
191 189 get :edit, :profile => 'testorg'
192   - assert_tag :tag => 'input', :attributes => { :name => 'profile_data[info][contact_person]', :value => 'my contact' }
  190 + assert_tag :tag => 'input', :attributes => { :name => 'profile_data[contact_person]', :value => 'my contact' }
193 191 end
194 192  
195 193 should 'display profile publication option in edit profile screen' do
... ... @@ -211,4 +209,10 @@ class ProfileEditorControllerTest &lt; Test::Unit::TestCase
211 209  
212 210 should 'show error messages for'
213 211  
  212 + should 'edit enterprise' do
  213 + ent = Enterprise.create!(:name => 'test org', :identifier => 'testent')
  214 + get :edit, :profile => 'testent'
  215 + assert_response :success
  216 + end
  217 +
214 218 end
... ...
test/integration/editing_person_info_test.rb
... ... @@ -2,7 +2,7 @@ require &quot;#{File.dirname(__FILE__)}/../test_helper&quot;
2 2  
3 3 class EditingPersonInfoTest < ActionController::IntegrationTest
4 4  
5   - fixtures :users, :profiles, :domains, :environments, :person_infos
  5 + fixtures :users, :profiles, :domains, :environments
6 6  
7 7 should 'allow to edit person info' do
8 8  
... ... @@ -13,14 +13,14 @@ class EditingPersonInfoTest &lt; ActionController::IntegrationTest
13 13 get '/myprofile/ze'
14 14 assert_response :success
15 15  
16   - assert_tag :tag => 'td', :content => profile.person_info.name
17   - assert_tag :tag => 'td', :content => profile.person_info.address
18   - assert_tag :tag => 'td', :content => profile.person_info.contact_information
  16 + assert_tag :tag => 'td', :content => profile.name
  17 + assert_tag :tag => 'td', :content => profile.address
  18 + assert_tag :tag => 'td', :content => profile.contact_information
19 19  
20 20 get '/myprofile/ze/profile_editor/edit'
21 21 assert_response :success
22 22  
23   - post '/myprofile/ze/profile_editor/edit', :info => { :address => 'a new address', :contact_information => 'a new contact information' }
  23 + post '/myprofile/ze/profile_editor/edit', :profile_data => { :address => 'a new address', :contact_information => 'a new contact information' }
24 24 assert_response :redirect
25 25  
26 26 end
... ...
test/unit/community_test.rb
... ... @@ -39,11 +39,9 @@ class CommunityTest &lt; Test::Unit::TestCase
39 39 assert_kind_of RssFeed, community.articles.find_by_path('feed')
40 40 end
41 41  
42   - should 'save info' do
43   - community = Community.create!(:name => 'my new community')
44   - community.info = {:contact_person => 'my contact'}
45   - community.save!
46   - assert_equal 'my contact', community.info.contact_person
  42 + should 'have contact_person' do
  43 + community = Community.new(:name => 'my new community')
  44 + assert_respond_to community, :contact_person
47 45 end
48 46  
49 47 end
... ...
test/unit/organization_info_test.rb
... ... @@ -1,22 +0,0 @@
1   -require File.dirname(__FILE__) + '/../test_helper'
2   -
3   -class OrganizationInfoTest < Test::Unit::TestCase
4   - fixtures :organization_infos
5   -
6   - def test_numericality_year
7   - count = OrganizationInfo.count
8   -
9   - oi = OrganizationInfo.new
10   - oi.foundation_year = 'xxxx'
11   - oi.valid?
12   - assert oi.errors.invalid?(:foundation_year)
13   -
14   - oi.foundation_year = 20.07
15   - oi.valid?
16   - assert oi.errors.invalid?(:foundation_year)
17   -
18   - oi.foundation_year = 2007
19   - oi.valid?
20   - assert ! oi.errors.invalid?(:foundation_year)
21   - end
22   -end
test/unit/organization_test.rb
... ... @@ -25,13 +25,10 @@ class OrganizationTest &lt; Test::Unit::TestCase
25 25 end
26 26  
27 27  
28   - should 'reference organization info' do
  28 + should 'not reference organization info' do
29 29 org = Organization.new
30   - assert_raise ActiveRecord::AssociationTypeMismatch do
31   - org.organization_info = 1
32   - end
33   - assert_nothing_raised do
34   - org.organization_info = OrganizationInfo.new
  30 + assert_raise NoMethodError do
  31 + org.organization_info
35 32 end
36 33 end
37 34  
... ... @@ -75,11 +72,9 @@ class OrganizationTest &lt; Test::Unit::TestCase
75 72 assert_equal 'something', org.validation_restrictions
76 73 end
77 74  
78   - should 'override contact_email to get it from organization_info' do
  75 + should 'have contact_email' do
79 76 org = Organization.new
80   - assert_nil org.contact_email
81   - org.organization_info = OrganizationInfo.new(:contact_email => 'test@example.com')
82   - assert_equal 'test@example.com', org.contact_email
  77 + assert_respond_to org, :contact_email
83 78 end
84 79  
85 80 should 'list pending enterprise validations' do
... ... @@ -124,11 +119,41 @@ class OrganizationTest &lt; Test::Unit::TestCase
124 119 assert_equal true, Organization.new.has_members?
125 120 end
126 121  
127   - should 'update organization_info' do
  122 + should 'update contact_person' do
128 123 org = Organization.create!(:name => 'test org', :identifier => 'testorg')
129   - assert_nil org.info.contact_person
130   - org.info = {:contact_person => 'new person'}
131   - assert_not_nil org.info.contact_person
  124 + assert_nil org.contact_person
  125 + org.contact_person = 'person'
  126 + assert_not_nil org.contact_person
  127 + end
  128 +
  129 + should 'numericality year' do
  130 + count = Organization.count
  131 +
  132 + org = Organization.new
  133 + org.foundation_year = 'xxxx'
  134 + org.valid?
  135 + assert org.errors.invalid?(:foundation_year)
  136 +
  137 + org.foundation_year = 20.07
  138 + org.valid?
  139 + assert org.errors.invalid?(:foundation_year)
  140 +
  141 + org.foundation_year = 2007
  142 + org.valid?
  143 + assert ! org.errors.invalid?(:foundation_year)
  144 + end
  145 +
  146 + should 'provide needed information in summary' do
  147 + organization = Organization.new
  148 +
  149 + organization.acronym = 'organization acronym'
  150 + organization.foundation_year = '2007'
  151 + organization.contact_email = 'my contact email'
  152 +
  153 + summary = organization.summary
  154 + assert(summary.any? { |line| line[1] == 'organization acronym' })
  155 + assert(summary.any? { |line| line[1] == '2007' })
  156 + assert(summary.any? { |line| line[1] == 'my contact email' })
132 157 end
133 158  
134 159 end
... ...
test/unit/person_info_test.rb
... ... @@ -1,26 +0,0 @@
1   -require File.dirname(__FILE__) + '/../test_helper'
2   -
3   -class PersonInfoTest < Test::Unit::TestCase
4   -
5   - should 'provide desired fields' do
6   - info = PersonInfo.new
7   -
8   - assert info.respond_to?(:photo)
9   - assert info.respond_to?(:address)
10   - assert info.respond_to?(:contact_information)
11   - end
12   -
13   - should 'provide needed information in summary' do
14   - person_info = PersonInfo.new
15   -
16   - person_info.name = 'person name'
17   - person_info.address = 'my address'
18   - person_info.contact_information = 'my contact information'
19   -
20   - summary = person_info.summary
21   - assert(summary.any? { |line| line[1] == 'person name' })
22   - assert(summary.any? { |line| line[1] == 'my address' })
23   - assert(summary.any? { |line| line[1] == 'my contact information' }, "summary (#{summary.map{|l| l[1] }.compact.join("; ")}) do not contain 'my contact informatidon'")
24   - end
25   -
26   -end
test/unit/person_test.rb
... ... @@ -43,8 +43,8 @@ class PersonTest &lt; Test::Unit::TestCase
43 43  
44 44 assert p.community_memberships.include?(c), "Community should add a new member"
45 45 end
46   -
47   - def test_can_have_user
  46 +
  47 + should 'can have user' do
48 48 u = User.new(:login => 'john', :email => 'john@doe.org', :password => 'dhoe', :password_confirmation => 'dhoe')
49 49 p = Person.new(:name => 'John', :identifier => 'john')
50 50 u.person = p
... ... @@ -53,7 +53,7 @@ class PersonTest &lt; Test::Unit::TestCase
53 53 assert_equal 'John', u.person.name
54 54 end
55 55  
56   - def test_only_one_person_per_user
  56 + should 'only one person per user' do
57 57 u = User.new(:login => 'john', :email => 'john@doe.org', :password => 'dhoe', :password_confirmation => 'dhoe')
58 58 assert u.save
59 59  
... ... @@ -66,14 +66,18 @@ class PersonTest &lt; Test::Unit::TestCase
66 66 assert p2.errors.invalid?(:user_id)
67 67 end
68 68  
69   - should "have person info" do
  69 + should "have person info fields" do
70 70 p = Person.new
71   - assert_kind_of PersonInfo, p.person_info
  71 + [ :name, :photo, :contact_information, :birth_date, :sex, :address, :city, :state, :country ].each do |i|
  72 + assert_respond_to p, i
  73 + end
72 74 end
73 75  
74   - should 'return person_info as info' do
  76 + should 'not have person_info class' do
75 77 p = Person.new
76   - assert_equal p.person_info, p.info
  78 + assert_raise NoMethodError do
  79 + p.person_info
  80 + end
77 81 end
78 82  
79 83 should 'change the roles of the user' do
... ... @@ -204,14 +208,14 @@ class PersonTest &lt; Test::Unit::TestCase
204 208  
205 209 should 'return info name instead of name when info is setted' do
206 210 p = create_user('ze_maria').person
207   - p.person_info = PersonInfo.create!(:name => 'José')
208   -
  211 + assert_equal 'ze_maria', p.name
  212 + p.name = 'José'
209 213 assert_equal 'José', p.name
210 214 end
211 215  
212 216 should 'fallback to login when person_info is not present' do
213 217 p = create_user('randomhacker').person
214   - p.person_info = nil
  218 + p.name = nil
215 219 assert_equal 'randomhacker', p.name
216 220 end
217 221  
... ... @@ -224,11 +228,31 @@ class PersonTest &lt; Test::Unit::TestCase
224 228 assert_includes Person.find(p.id).favorite_enterprises, e
225 229 end
226 230  
227   - should 'save info' do
  231 + should 'save info contact_information field' do
228 232 person = create_user('new_person').person
229   - person.info = {:contact_information => 'my contact'}
  233 + person.contact_information = 'my contact'
230 234 person.save!
231   - assert_equal 'my contact', person.info.contact_information
  235 + assert_equal 'my contact', person.contact_information
  236 + end
  237 +
  238 + should 'provide desired info fields' do
  239 + p = Person.new
  240 + assert p.respond_to?(:photo)
  241 + assert p.respond_to?(:address)
  242 + assert p.respond_to?(:contact_information)
  243 + end
  244 +
  245 + should 'provide needed information in summary' do
  246 + person = Person.new
  247 +
  248 + person.name = 'person name'
  249 + person.address = 'my address'
  250 + person.contact_information = 'my contact information'
  251 +
  252 + summary = person.summary
  253 + assert(summary.any? { |line| line[1] == 'person name' })
  254 + assert(summary.any? { |line| line[1] == 'my address' })
  255 + assert(summary.any? { |line| line[1] == 'my contact information' }, "summary (#{summary.map{|l| l[1] }.compact.join("; ")}) do not contain 'my contact informatidon'")
232 256 end
233 257  
234 258 end
... ...
test/unit/profile_helper_test.rb
... ... @@ -9,16 +9,7 @@ class ProfileHelperTest &lt; Test::Unit::TestCase
9 9 end
10 10 attr_reader :profile, :helper
11 11  
12   - def test_should_ignore_nil
13   - profile.expects(:info).returns(nil)
14   -
15   - helper.expects(:content_tag)
16   - helper.expects(:_)
17   -
18   - helper.display_profile_info(profile)
19   - end
20   -
21   - def test_should_display_info
  12 + should 'display info' do
22 13 f1 = 'Field 1'
23 14 v1 = 'value 1'
24 15 f2 = 'Field 2'
... ... @@ -27,24 +18,19 @@ class ProfileHelperTest &lt; Test::Unit::TestCase
27 18 [ f1, v1 ],
28 19 [ f2, v2 ]
29 20 ]
30   - info = mock
31   - info.expects(:summary).returns(array)
32   - profile.stubs(:info).returns(info)
  21 + profile.expects(:summary).returns(array)
33 22  
34 23 helper.expects(:content_tag).returns('').at_least_once
35 24  
36 25 helper.expects(:_).with('edit your information').returns('edit your information')
37 26 helper.expects(:button).with(:edit, 'edit your information', :controller => 'profile_editor', :action => 'edit').returns("BUTTON")
38 27  
39   -
40 28 helper.display_profile_info(profile)
41 29 end
42 30  
43   - def test_should_call_blocks
  31 + should 'call blocks' do
44 32 myproc = lambda { content_tag('div', 'lalala') }
45   - info = mock
46   - info.expects(:summary).returns([['f1', myproc ]])
47   - profile.stubs(:info).returns(info)
  33 + profile.expects(:summary).returns([['f1', myproc ]])
48 34 helper.stubs(:content_tag).returns('')
49 35  
50 36 helper.expects(:instance_eval).with(myproc)
... ...
test/unit/profile_test.rb
... ... @@ -114,10 +114,6 @@ class ProfileTest &lt; Test::Unit::TestCase
114 114 assert_equal total - mine, Article.count
115 115 end
116 116  
117   - def test_should_define_info
118   - assert_nil Profile.new.info
119   - end
120   -
121 117 def test_should_avoid_reserved_identifiers
122 118 assert_invalid_identifier 'admin'
123 119 assert_invalid_identifier 'system'
... ...