require 'test_helper' class SimpleEnumTest < ActiveSupport::TestCase def setup reload_db end test "get the correct integer values when setting to symbol" do d = Dummy.new d.gender = :male assert_equal(0, d.gender_cd) end test "get the correct symbol when setting the integer value" do d = Dummy.new d.gender_cd = 1 assert_equal(:female, d.gender) end test "verify that <symbol>? returns correct result" do d = Dummy.new d.gender = :male assert_equal(true, d.male?) assert_equal(false, d.female?) end test "get symbol when rows are fetched from db" do # Anna assert_equal(:female, Dummy.find(1).gender) assert_equal(:alpha, Dummy.find(1).word) assert_equal(:foo, Dummy.find(1).didum) # Bella assert_equal(true, Dummy.find(2).female?) assert_equal(true, Dummy.find(2).beta?) assert_equal(:bar, Dummy.find(2).didum) # Chris assert_equal(false, Dummy.find(3).female?) assert_equal(:gamma, Dummy.find(3).word) assert_equal(:foobar, Dummy.find(3).didum) end test "create and save new record then test symbols" do d = Dummy.create({ :name => 'Dummy', :gender_cd => 0 }) # :gender => male assert_equal(true, d.male?) # change :gender_cd to 1 d.female! d.save! assert_equal(true, Dummy.find(d.id).female?) end test "add validation and test validations" do Dummy.class_eval do; validates_as_enum :gender; end #with_validation = Class.new(Dummy) do # validates_as_enum :gender #end d = Dummy.new :gender_cd => 5 # invalid number :) assert_equal(false, d.save) d.gender_cd = 1 assert_equal(true, d.save) assert_equal(:female, d.gender) end test "raises ArgumentError if invalid symbol is passed" do assert_raise ArgumentError do Dummy.new :gender => :foo end end test "raises NO ArgumentError if :whiny => false is defined" do not_whiny = Class.new(Dummy) do as_enum :gender, [:male, :female], :whiny => false end d = not_whiny.new :gender => :foo assert_nil(d.gender) end test "ensure that setting to 'nil' works if :whiny => true and :whiny => false" do d = Dummy.new :gender => :male assert_equal(:male, d.gender) d.gender = nil assert_nil(d.gender) not_whiny_again = Class.new(Dummy) do as_enum :gender, [:male, :female], :whiny => false end d = not_whiny_again.new :gender => :male assert_equal(:male, d.gender) d.gender = nil assert_nil(d.gender) end end