Commit 40843cecd5832c3f626a1258e542d52df3eb52c4
1 parent
92346b73
Exists in
master
and in
28 other branches
ActionItem380: admin can edit enterprise description
git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@1788 3f533792-8f58-4932-b0fe-aaf55b0a4547
Showing
8 changed files
with
103 additions
and
17 deletions
Show diff stats
app/controllers/my_profile/profile_editor_controller.rb
| ... | ... | @@ -11,7 +11,7 @@ class ProfileEditorController < MyProfileController |
| 11 | 11 | # edits the profile info (posts back) |
| 12 | 12 | def edit |
| 13 | 13 | if request.post? |
| 14 | - if profile.info.update_attributes(params[:info]) | |
| 14 | + if profile.update_attributes(params[:profile_data]) and profile.info.save | |
| 15 | 15 | redirect_to :action => 'index' |
| 16 | 16 | end |
| 17 | 17 | else | ... | ... |
app/helpers/application_helper.rb
| ... | ... | @@ -163,6 +163,11 @@ module ApplicationHelper |
| 163 | 163 | |
| 164 | 164 | alias_method :display_form_field, :labelled_form_field |
| 165 | 165 | |
| 166 | + def labelled_fields_for(name, object = nil, options = {}, &proc) | |
| 167 | + object ||= instance_variable_get("@#{name}") | |
| 168 | + fields_for(name, object, { :builder => NoosferoFormBuilder }.merge(options), &proc) | |
| 169 | + end | |
| 170 | + | |
| 166 | 171 | def labelled_form_for(name, object = nil, options = {}, &proc) |
| 167 | 172 | object ||= instance_variable_get("@#{name}") |
| 168 | 173 | form_for(name, object, { :builder => NoosferoFormBuilder }.merge(options), &proc) | ... | ... |
app/models/profile.rb
| ... | ... | @@ -142,6 +142,10 @@ class Profile < ActiveRecord::Base |
| 142 | 142 | nil |
| 143 | 143 | end |
| 144 | 144 | |
| 145 | + def info=(args = {}) | |
| 146 | + self.info.attributes = args if self.info | |
| 147 | + end | |
| 148 | + | |
| 145 | 149 | # returns the contact email for this profile. By default returns the the |
| 146 | 150 | # e-mail of the owner user. |
| 147 | 151 | # | ... | ... |
app/views/profile_editor/organization_info.rhtml
| 1 | 1 | <h1> <%= _('Edit organization info') %> </h1> |
| 2 | 2 | |
| 3 | -<%= error_messages_for :info %> | |
| 4 | -<% labelled_form_for :info, @info do |f| %> | |
| 5 | - <%= f.text_field(:contact_person) %> | |
| 6 | - <%= f.text_field(:acronym) %> | |
| 7 | - <%= f.text_field(:foundation_year) %> | |
| 8 | - <%= f.text_field(:legal_form) %> | |
| 9 | - <%= f.text_field(:economic_activity) %> | |
| 10 | - <%= f.text_area(:management_information) %> | |
| 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 %> | |
| 11 | 15 | <% button_bar do %> |
| 12 | 16 | <%= submit_button('save' , _('Save'), :cancel => {:action => 'index'}) %> |
| 13 | 17 | <% end %> | ... | ... |
test/functional/profile_editor_controller_test.rb
| ... | ... | @@ -66,9 +66,8 @@ class ProfileEditorControllerTest < Test::Unit::TestCase |
| 66 | 66 | person = User.create(:login => 'test_profile', :email => 'test@noosfero.org', :password => 'test', :password_confirmation => 'test').person |
| 67 | 67 | person.person_info.address = 'my address' |
| 68 | 68 | person.person_info.contact_information = 'my contact information' |
| 69 | - person.person_info.save | |
| 69 | + person.person_info.save! | |
| 70 | 70 | |
| 71 | -# profile.person_info.expects(:update_attributes).with({ 'contact_information' => 'new contact information', 'address' => 'new address' }).returns(true) | |
| 72 | 71 | post :edit, :profile => 'test_profile', :info => { 'contact_information' => 'new contact information', 'address' => 'new address' } |
| 73 | 72 | |
| 74 | 73 | assert_redirected_to :action => 'index' |
| ... | ... | @@ -103,43 +102,96 @@ class ProfileEditorControllerTest < Test::Unit::TestCase |
| 103 | 102 | should 'filter html from name when edit person_info' do |
| 104 | 103 | person = create_user('test_profile').person |
| 105 | 104 | name = "name <strong id='name_html_test'>with</strong> html" |
| 106 | - post :edit, :profile => person.identifier, :info => { :name => name } | |
| 105 | + post :edit, :profile => person.identifier, :profile_data => { :info => { :name => name } } | |
| 107 | 106 | assert_sanitized assigns(:profile).info.name |
| 108 | 107 | end |
| 109 | 108 | |
| 110 | 109 | should 'filter html from contact_person to organization' do |
| 111 | 110 | org = Organization.create!(:name => 'test org', :identifier => 'testorg') |
| 112 | 111 | contact = "name <strong id='name_html_test'>with</strong> html" |
| 113 | - post :edit, :profile => org.identifier, :info => { :contact_person => contact } | |
| 112 | + post :edit, :profile => org.identifier, :profile_data => { :info => { :contact_person => contact } } | |
| 114 | 113 | assert_sanitized assigns(:profile).info.contact_person |
| 115 | 114 | end |
| 116 | 115 | |
| 117 | 116 | should 'filter html from acronym organization' do |
| 118 | 117 | org = Organization.create!(:name => 'test org', :identifier => 'testorg') |
| 119 | 118 | value = "name <strong id='name_html_test'>with</strong> html" |
| 120 | - post :edit, :profile => org.identifier, :info => { :acronym => value } | |
| 119 | + post :edit, :profile => org.identifier, :profile_data => { :info => { :acronym => value } } | |
| 121 | 120 | assert_sanitized assigns(:profile).info.acronym |
| 122 | 121 | end |
| 123 | 122 | |
| 124 | 123 | should 'filter html from legal_form organization' do |
| 125 | 124 | org = Organization.create!(:name => 'test org', :identifier => 'testorg') |
| 126 | 125 | value = "name <strong id='name_html_test'>with</strong> html" |
| 127 | - post :edit, :profile => org.identifier, :info => { :legal_form => value } | |
| 126 | + post :edit, :profile => org.identifier, :profile_data => { :info => { :legal_form => value } } | |
| 128 | 127 | assert_sanitized assigns(:profile).info.legal_form |
| 129 | 128 | end |
| 130 | 129 | |
| 131 | 130 | should 'filter html from economic_activity organization' do |
| 132 | 131 | org = Organization.create!(:name => 'test org', :identifier => 'testorg') |
| 133 | 132 | value = "name <strong id='name_html_test'>with</strong> html" |
| 134 | - post :edit, :profile => org.identifier, :info => { :economic_activity => value } | |
| 133 | + post :edit, :profile => org.identifier, :profile_data => { :info => { :economic_activity => value } } | |
| 135 | 134 | assert_sanitized assigns(:profile).info.economic_activity |
| 136 | 135 | end |
| 137 | 136 | |
| 138 | 137 | should 'filter html from management_information organization' do |
| 139 | 138 | org = Organization.create!(:name => 'test org', :identifier => 'testorg') |
| 140 | 139 | value = "name <strong id='name_html_test'>with</strong> html" |
| 141 | - post :edit, :profile => org.identifier, :info => { :management_information => value } | |
| 140 | + post :edit, :profile => org.identifier, :profile_data => { :info => { :management_information => value } } | |
| 142 | 141 | assert_sanitized assigns(:profile).info.management_information |
| 143 | 142 | end |
| 144 | 143 | |
| 144 | + should 'saving profile organization_info' do | |
| 145 | + 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 | |
| 149 | + end | |
| 150 | + | |
| 151 | + should 'show contact_person field on edit organization' do | |
| 152 | + org = Organization.create!(:name => 'test org', :identifier => 'testorg') | |
| 153 | + get :edit, :profile => org.identifier | |
| 154 | + assert_tag :tag => 'input', :attributes => { :name => 'profile_data[info][contact_person]' } | |
| 155 | + end | |
| 156 | + | |
| 157 | + should 'save community description' do | |
| 158 | + org = Community.create!(:name => 'test org', :identifier => 'testorg') | |
| 159 | + post :edit, :profile => 'testorg', :profile_data => { :description => 'my description' } | |
| 160 | + assert_equal 'my description', Organization.find(org.id).description | |
| 161 | + end | |
| 162 | + | |
| 163 | + should 'show community description' do | |
| 164 | + org = Community.create!(:name => 'test org', :identifier => 'testorg') | |
| 165 | + get :edit, :profile => 'testorg' | |
| 166 | + assert_tag :tag => 'textarea', :attributes => { :name => 'profile_data[description]' } | |
| 167 | + end | |
| 168 | + | |
| 169 | + should 'not show organization description' do | |
| 170 | + org = Organization.create!(:name => 'test org', :identifier => 'testorg') | |
| 171 | + get :edit, :profile => 'testorg' | |
| 172 | + assert_no_tag :tag => 'textarea', :attributes => { :name => 'profile_data[description]' } | |
| 173 | + end | |
| 174 | + | |
| 175 | + should 'save organization contact_person' do | |
| 176 | + 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 | |
| 179 | + end | |
| 180 | + | |
| 181 | + should 'save enterprise contact_person' do | |
| 182 | + 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 | |
| 185 | + end | |
| 186 | + | |
| 187 | + should 'show field values on edit organization info' do | |
| 188 | + org = Organization.create!(:name => 'test org', :identifier => 'testorg') | |
| 189 | + org.info = { :contact_person => 'my contact' } | |
| 190 | + org.info.save! | |
| 191 | + get :edit, :profile => 'testorg' | |
| 192 | + assert_tag :tag => 'input', :attributes => { :name => 'profile_data[info][contact_person]', :value => 'my contact' } | |
| 193 | + end | |
| 194 | + | |
| 195 | + should 'show error messages for' | |
| 196 | + | |
| 145 | 197 | end | ... | ... |
test/unit/community_test.rb
| ... | ... | @@ -39,4 +39,11 @@ class CommunityTest < 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 | |
| 47 | + end | |
| 48 | + | |
| 42 | 49 | end | ... | ... |
test/unit/organization_test.rb
| ... | ... | @@ -124,4 +124,11 @@ class OrganizationTest < Test::Unit::TestCase |
| 124 | 124 | assert_equal true, Organization.new.has_members? |
| 125 | 125 | end |
| 126 | 126 | |
| 127 | + should 'update organization_info' do | |
| 128 | + 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 | |
| 132 | + end | |
| 133 | + | |
| 127 | 134 | end | ... | ... |
test/unit/person_test.rb
| ... | ... | @@ -215,4 +215,11 @@ class PersonTest < Test::Unit::TestCase |
| 215 | 215 | assert_equal 'randomhacker', p.name |
| 216 | 216 | end |
| 217 | 217 | |
| 218 | + should 'save info' do | |
| 219 | + person = create_user('new_person').person | |
| 220 | + person.info = {:contact_information => 'my contact'} | |
| 221 | + person.save! | |
| 222 | + assert_equal 'my contact', person.info.contact_information | |
| 223 | + end | |
| 224 | + | |
| 218 | 225 | end | ... | ... |