I have a Model that has an enum as attribute.
class ApplicationLetter < ActiveRecord::Base
  belongs_to :user
  belongs_to :event
  validates :user, :event, presence: true
  enum status: {accepted: 1, rejected: 0, pending: 2}
end
As well as a factory that generates this model and sets a value for the enum
FactoryGirl.define do
  factory :application_letter do
    motivation "motivation"
    user
    event
    status :accepted
  end
end
In a controller test I want to get valid attributes through the factory
let(:valid_attributes) { FactoryGirl.build(:application_letter).attributes }
and create a application with these attributes.
application = ApplicationLetter.create! valid_attributes
But I get the following error:
ArgumentError: '1' is not a valid status
Why is status interpreted as string? If I change the status in the factory I get the same error, but with the right corresponding number.
you can do it more dynamically:
FactoryGirl.define do
  factory :application_letter do
    motivation "motivation"
    user
    event
    status { ApplicationLetter.statuses.values.sample }
  end
end
in this each time you will get different status
OR if wanna use static value you have to use integer, because enums by default use integer values
All you need in your factory is status 'accepted'.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With