Commit 427a2565737f761bff15e6cafdb963a9839b9402

Authored by Daniela Feitosa
1 parent e449f210

Fix: Allowing profile update even if template was removed

(ActionItem2744)
app/models/profile.rb
@@ -298,7 +298,7 @@ class Profile < ActiveRecord::Base @@ -298,7 +298,7 @@ class Profile < ActiveRecord::Base
298 validate :valid_template 298 validate :valid_template
299 299
300 def valid_template 300 def valid_template
301 - if template_id.present? and !template.is_template 301 + if template_id.present? && template && !template.is_template
302 errors.add(:template, _('is not a template.')) 302 errors.add(:template, _('is not a template.'))
303 end 303 end
304 end 304 end
test/unit/profile_test.rb
@@ -1379,6 +1379,16 @@ class ProfileTest < ActiveSupport::TestCase @@ -1379,6 +1379,16 @@ class ProfileTest < ActiveSupport::TestCase
1379 assert_not_includes Profile.templates(Environment.default), profile 1379 assert_not_includes Profile.templates(Environment.default), profile
1380 end 1380 end
1381 1381
  1382 + should 'not crash on a profile update with a destroyed template' do
  1383 + template = fast_create(Profile, :is_template => true)
  1384 + profile = fast_create(Profile, :template_id => template.id)
  1385 + template.destroy
  1386 +
  1387 + assert_nothing_raised do
  1388 + Profile.find(profile.id).save!
  1389 + end
  1390 + end
  1391 +
1382 should 'provide URL to leave' do 1392 should 'provide URL to leave' do
1383 profile = build(Profile, :identifier => 'testprofile') 1393 profile = build(Profile, :identifier => 'testprofile')
1384 assert_equal({ :profile => 'testprofile', :controller => 'profile', :action => 'leave', :reload => false}, profile.leave_url) 1394 assert_equal({ :profile => 'testprofile', :controller => 'profile', :action => 'leave', :reload => false}, profile.leave_url)