Project

General

Profile

« Previous | Next » 

Revision 59b23095

Added by Shlomi Zadok about 9 years ago

fixes #7743 - ensure name is unique in scope of major and minor

View differences:

app/models/operatingsystem.rb
has_many :trends, :as => :trendable, :class_name => "ForemanTrend"
attr_name :to_label
validates :minor, :numericality => {:greater_than_or_equal_to => 0}, :allow_nil => true, :allow_blank => true
validates :name, :presence => true, :no_whitespace => true
validates :name, :presence => true, :no_whitespace => true,
:uniqueness => { :scope => [:major, :minor], :message => N_("Operating system version already exists")}
validates :description, :uniqueness => true, :allow_blank => true
validates :password_hash, :inclusion => { :in => PasswordCrypt::ALGORITHMS }
before_validation :downcase_release_name, :set_title
before_validation :downcase_release_name, :set_title, :stringify_major_and_minor
validates :title, :uniqueness => true, :presence => true
before_save :set_family
......
self.title = to_label.to_s[0..254]
end
def stringify_major_and_minor
# Cast major and minor to strings. see db/schema.rb around lines 560-562 (Or https://github.com/theforeman/foreman/blob/develop/db/migrate/20090720134126_create_operatingsystems.rb#L4).
# Need to ensure type when using major and minor as scopes for name uniqueness.
self.major = major.to_s
self.minor = minor.to_s
end
def downcase_release_name
self.release_name.downcase! unless Foreman.in_rake? or release_name.nil? or release_name.empty?
end
test/unit/operatingsystem_test.rb
'x64', operatingsystem)
assert result_path, 'http://foo.org/4'
end
context 'name should be unique in scope of major and minor' do
setup do
@os = FactoryGirl.create(:operatingsystem, :name => 'centos', :major => 8, :minor => 3)
end
test 'should not create os with existing name, major and minor' do
operatingsystem = Operatingsystem.new(:name => "centos", :major => '8', :minor => '3')
assert_equal(@os.name, operatingsystem.name)
assert_equal(@os.major, operatingsystem.major)
assert_equal(@os.minor, operatingsystem.minor)
refute operatingsystem.valid?
refute operatingsystem.save
end
test 'should create os with existing name, major and different minor' do
operatingsystem = Operatingsystem.new(:name => "centos", :major => '8', :minor => '9')
assert_equal(@os.name, operatingsystem.name)
assert_equal(@os.major, operatingsystem.major)
refute_equal(@os.minor, operatingsystem.minor)
assert operatingsystem.valid?
assert operatingsystem.save
end
test 'should create os with existing name, minor and different major' do
operatingsystem = Operatingsystem.new(:name => "centos", :major => '7', :minor => '3')
assert_equal(@os.name, operatingsystem.name)
assert_equal(@os.minor, operatingsystem.minor)
refute_equal(@os.major, operatingsystem.major)
assert operatingsystem.valid?
assert operatingsystem.save
end
end
end

Also available in: Unified diff