FactoryBot.define do factory :user, class: 'Symphonia::User', aliases: [:author] do sequence(:first_name) { |n| "#{Faker::Name.first_name} #{n}" } sequence(:last_name) { |n| "#{Faker::Name.last_name} #{n}" } sequence(:email) { |n| "#{n}-#{Faker::Internet.email}" } login { email } admin { false } password { SecureRandom.hex(16) } last_request_at { Time.now } trait :admin do admin { true } end trait :with_preferences do transient do preference_names { [] } end after(:build) do |user, evaluator| user.preferences = evaluator.preference_names.collect { |pref_name| Symphonia::EmailPreference.find_by(name: pref_name) || FactoryBot.create(:email_preference, name: pref_name) } end end factory :admin_user, traits: [:admin] end factory :role, class: 'Symphonia::Role' do sequence(:name) { |n| "#{Faker::Job.title} #{n}" } end factory :preference, class: 'Symphonia::Preference' do factory :email_preference, class: 'Symphonia::EmailPreference' do trait :user_registered do name { :notify_after_user_registered } end end end end