docbrown/spec/factories/articles.rb
Anna Buianova 455399bdba
Rubocop fixes (#18461)
* Rubocop fixes

* Fixed most Capybara/SpecificMatcher violations

* Moved flash notice texts to locales
2022-09-16 15:25:48 +03:00

83 lines
2.9 KiB
Ruby

FactoryBot.define do
sequence(:title) { |n| "#{Faker::Book.title}#{n}" }
factory :article do
published_at { Time.current }
transient do
title { generate :title }
published { true }
date { "01/01/2015" }
tags { "javascript, html, discuss" }
canonical_url { Faker::Internet.url }
with_canonical_url { false }
with_main_image { true }
with_date { false }
with_tags { true }
with_hr_issue { false }
with_tweet_tag { false }
with_user_subscription_tag { false }
with_title { true }
with_collection { nil }
past_published_at { Time.current }
end
co_author_ids { [] }
association :user, factory: :user, strategy: :create
description { Faker::Hipster.paragraph(sentence_count: 1)[0..100] }
main_image do
if with_main_image
URL.url(ActionController::Base.helpers.asset_path("#{rand(1..40)}.png"))
end
end
experience_level_rating { rand(4..6) }
body_markdown do
<<~HEREDOC
---
title: #{title if with_title}
published: #{published}
tags: #{tags if with_tags}
date: #{date if with_date}
series: #{with_collection&.slug}
canonical_url: #{canonical_url if with_canonical_url}
#{"cover_image: #{Faker::Avatar.image}" if with_main_image && main_image_from_frontmatter}
---
#{Faker::Hipster.paragraph(sentence_count: 2)}
#{'{% tweet 1018911886862057472 %}' if with_tweet_tag}
#{'{% user_subscription CTA text %}' if with_user_subscription_tag}
#{Faker::Hipster.paragraph(sentence_count: 1)}
#{"\n\n---\n\n something \n\n---\n funky in the code? \n---\n That's nice" if with_hr_issue}
HEREDOC
end
end
trait :video do
after(:build) do |article|
article.video = "https://s3.amazonaws.com/dev-to-input-v0/video-upload__2d7dc29e39a40c7059572bca75bb646b"
article.save
end
end
trait :with_notification_subscription do
after(:create) do |article|
create(:notification_subscription, user_id: article.user_id, notifiable: article)
end
end
trait :with_user_subscription_tag_role_user do
after(:build) { |article| article.user.add_role(:restricted_liquid_tag, LiquidTags::UserSubscriptionTag) }
end
trait :with_discussion_lock do
after(:create) { |article| create(:discussion_lock, locking_user_id: article.user_id, article_id: article.id) }
end
# NOTE: [@lightalloy] This trait is used to create articles published in the past (with past published_at)
# we can't do it directly because of the validation Article#has_correct_published_at?
# TODO: [@lightalloy] Remove the trait and its usage when has_correct_published_at? will be removed
trait :past do
after(:create) do |article, evaluator|
article.update_column(:published_at, evaluator.past_published_at)
end
end
end