docbrown/spec/factories/users.rb

162 lines
5.2 KiB
Ruby

FactoryBot.define do
sequence(:email) { |n| "person#{n}@example.com" }
sequence(:username) { |n| "username#{n}" }
sequence(:twitter_username) { |n| "twitter#{n}" }
sequence(:github_username) { |n| "github#{n}" }
image_path = Rails.root.join("spec/support/fixtures/images/image1.jpeg")
factory :user do
name { Faker::Name.name }
email { generate :email }
username { generate :username }
profile_image { Rack::Test::UploadedFile.new(image_path, "image/jpeg") }
twitter_username { generate :twitter_username }
github_username { generate :github_username }
summary { Faker::Lorem.paragraph[0..rand(190)] }
website_url { Faker::Internet.url }
confirmed_at { Time.current }
saw_onboarding { true }
checked_code_of_conduct { true }
checked_terms_and_conditions { true }
display_announcements { true }
signup_cta_variant { "navbar_basic" }
email_digest_periodic { false }
bg_color_hex { Faker::Color.hex_color }
text_color_hex { Faker::Color.hex_color }
trait :with_identity do
transient { identities { Authentication::Providers.available } }
after(:create) do |user, options|
options.identities.each do |provider|
auth = OmniAuth.config.mock_auth.fetch(provider.to_sym)
create(
:identity,
user: user, provider: provider, uid: auth.uid, auth_data_dump: auth,
)
end
end
end
trait :super_admin do
after(:build) { |user| user.add_role(:super_admin) }
end
trait :admin do
after(:build) { |user| user.add_role(:admin) }
end
trait :single_resource_admin do
transient do
resource { nil }
end
after(:build) { |user, options| user.add_role(:single_resource_admin, options.resource) }
end
trait :super_plus_single_resource_admin do
transient do
resource { nil }
end
after(:build) do |user, options|
user.add_role(:super_admin)
user.add_role(:single_resource_admin, options.resource)
end
end
trait :trusted do
after(:build) { |user| user.add_role(:trusted) }
end
trait :banned do
after(:build) { |user| user.add_role(:banned) }
end
trait :ignore_mailchimp_subscribe_callback do
after(:build) do |user|
user.define_singleton_method(:subscribe_to_mailchimp_newsletter) {}
# user.class.skip_callback(:validates, :after_create)
end
end
trait :pro do
after(:build) { |user| user.add_role :pro }
end
trait :org_member do
after(:create) do |user|
org = create(:organization)
create(:organization_membership, user_id: user.id, organization_id: org.id, type_of_user: "member")
end
end
trait :org_admin do
after(:create) do |user|
org = create(:organization)
create(:organization_membership, user_id: user.id, organization_id: org.id, type_of_user: "admin")
end
end
trait :with_article do
after(:create) do |user|
create(:article, user_id: user.id)
user.update(articles_count: 1)
end
end
trait :with_only_comment do
after(:create) do |user|
other_user = create(:user)
article = create(:article, user_id: other_user.id)
create(:comment, user_id: user.id, commentable: article)
user.update(comments_count: 1)
end
end
trait :with_article_and_comment do
after(:create) do |user|
article = create(:article, user_id: user.id)
create(:comment, user_id: user.id, commentable: article)
user.update(articles_count: 1, comments_count: 1)
end
end
trait :tag_moderator do
after(:create) do |user|
tag = create(:tag)
user.add_role :tag_moderator, tag
end
end
trait :with_user_optional_fields do
after(:create) do |user|
create(:user_optional_field, user: user)
create(:user_optional_field, user: user, label: "another field1", value: "another value1")
create(:user_optional_field, user: user, label: "another field2", value: "another value2")
end
end
trait :with_all_info do
education { "DEV University" }
employment_title { "Software Engineer" }
employer_name { "DEV" }
employer_url { "http://dev.to" }
currently_learning { "Preact" }
mostly_work_with { "Ruby" }
currently_hacking_on { "JSON-LD" }
mastodon_url { "https://mastodon.social/@test" }
facebook_url { "www.facebook.com/example" }
linkedin_url { "www.linkedin.com/company/example" }
youtube_url { "https://youtube.com/example" }
behance_url { "www.behance.net/#{username}" }
stackoverflow_url { "www.stackoverflow.com/example" }
dribbble_url { "www.dribbble.com/example" }
medium_url { "www.medium.com/example" }
gitlab_url { "www.gitlab.com/example" }
instagram_url { "www.instagram.com/example" }
twitch_username { "Example007" }
end
end
end