rails/activerecord/test/cases/enum_test.rb
Yves Senn 44406d1e77 store enum mapping using Strings instead of Symbols.
This allows to assign both `String` and `Symbol` values to the enum
without having to call `to_sym`, which is a security problem.
2013-11-05 17:44:08 +01:00

61 lines
1.2 KiB
Ruby

require 'cases/helper'
require 'models/book'
class EnumTest < ActiveRecord::TestCase
fixtures :books
setup do
@book = books(:awdr)
end
test "query state by predicate" do
assert @book.proposed?
assert_not @book.written?
assert_not @book.published?
assert @book.unread?
end
test "query state with symbol" do
assert_equal "proposed", @book.status
assert_equal "unread", @book.read_status
end
test "find via scope" do
assert_equal @book, Book.proposed.first
assert_equal @book, Book.unread.first
end
test "update by declaration" do
@book.written!
assert @book.written?
end
test "update by setter" do
@book.update! status: :written
assert @book.written?
end
test "enum methods are overwritable" do
assert_equal "do publish work...", @book.published!
assert @book.published?
end
test "direct assignment" do
@book.status = :written
assert @book.written?
end
test "assign string value" do
@book.status = "written"
assert @book.written?
end
test "assign non existing value raises an error" do
e = assert_raises(ArgumentError) do
@book.status = :unknown
end
assert_equal "'unknown' is not a valid status", e.message
end
end