Revision 59b23095
Added by Shlomi Zadok about 9 years ago
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
fixes #7743 - ensure name is unique in scope of major and minor