Flaky Spec Fix:Remove let_it_be Test Prof Helper (#9556)
* Flaky Spec Fix:Remove let_it_be Test Prof Helper * Spec cleanup and fixes
This commit is contained in:
parent
5a2cae4fbb
commit
b40af82b66
70 changed files with 213 additions and 211 deletions
|
|
@ -2,7 +2,7 @@ require "rails_helper"
|
|||
|
||||
RSpec.describe CommentDecorator, type: :decorator do
|
||||
context "with serialization" do
|
||||
let_it_be_readonly(:comment) { create(:comment).decorate }
|
||||
let!(:comment) { create(:comment).decorate }
|
||||
|
||||
it "serializes both the decorated object IDs and decorated methods" do
|
||||
expected_result = { "id" => comment.id, "published_timestamp" => comment.published_timestamp }
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
require "rails_helper"
|
||||
|
||||
RSpec.describe ListingDecorator, type: :decorator do
|
||||
let_it_be_readonly(:category) { create(:listing_category) }
|
||||
let(:category) { create(:listing_category) }
|
||||
let(:decorated_listing) do
|
||||
build(:listing, listing_category: category).decorate
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
require "rails_helper"
|
||||
|
||||
RSpec.describe NotificationDecorator, type: :decorator do
|
||||
let(:notification) { build(:notification) }
|
||||
let!(:notification) { build(:notification) }
|
||||
|
||||
context "with serialization" do
|
||||
let_it_be_readonly(:notification) { create(:notification).decorate }
|
||||
let(:notification) { create(:notification).decorate }
|
||||
|
||||
it "serializes both the decorated object IDs and decorated methods" do
|
||||
expected_result = { "id" => notification.id, "milestone_type" => notification.milestone_type }
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ require "rails_helper"
|
|||
|
||||
RSpec.describe OrganizationDecorator, type: :decorator do
|
||||
context "with serialization" do
|
||||
let_it_be_readonly(:organization) { create(:organization).decorate }
|
||||
let!(:organization) { create(:organization).decorate }
|
||||
|
||||
it "serializes both the decorated object IDs and decorated methods" do
|
||||
expected_result = { "id" => organization.id, "fully_banished?" => organization.fully_banished? }
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ require "rails_helper"
|
|||
|
||||
RSpec.describe SponsorshipDecorator, type: :decorator do
|
||||
context "with serialization" do
|
||||
let_it_be_readonly(:sponsorship) { create(:sponsorship).decorate }
|
||||
let!(:sponsorship) { create(:sponsorship).decorate }
|
||||
|
||||
it "serializes both the decorated object IDs and decorated methods" do
|
||||
expected_result = { "id" => sponsorship.id, "level_background_color" => sponsorship.level_background_color }
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
require "rails_helper"
|
||||
|
||||
RSpec.describe ListingHelper, type: :helper do
|
||||
let_it_be_readonly(:cat1) { create(:listing_category, cost: 1) }
|
||||
let_it_be_readonly(:cat2) { create(:listing_category, :cfp, cost: 5) }
|
||||
let!(:cat1) { create(:listing_category, cost: 1) }
|
||||
let!(:cat2) { create(:listing_category, :cfp, cost: 5) }
|
||||
|
||||
describe "select_options_for_categories" do
|
||||
it "returns the correct options array" do
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
require "rails_helper"
|
||||
|
||||
describe SocialLinkHelper do
|
||||
let_it_be_readonly(:user) { create(:user) }
|
||||
let(:user) { create(:user) }
|
||||
|
||||
describe ".user_twitter_link" do
|
||||
let(:value) { helper.user_twitter_link(user) }
|
||||
|
|
|
|||
|
|
@ -106,10 +106,10 @@ RSpec.describe BadgeRewarder, type: :labor do
|
|||
|
||||
describe "::award_contributor_badges_from_github", vcr: true do
|
||||
let(:user) { create(:user, :with_identity, identities: ["github"]) }
|
||||
|
||||
let_it_be_readonly(:badge) { create(:badge, title: "DEV Contributor") }
|
||||
let(:badge) { create(:badge, title: "DEV Contributor") }
|
||||
|
||||
before do
|
||||
badge
|
||||
omniauth_mock_github_payload
|
||||
|
||||
stub_const("BadgeRewarder::REPOSITORIES", ["rust-lang/rust"])
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ RSpec.describe Article, type: :model do
|
|||
article
|
||||
end
|
||||
|
||||
let_it_be(:user) { create(:user) }
|
||||
let(:user) { create(:user) }
|
||||
let!(:article) { create(:article, user: user) }
|
||||
|
||||
include_examples "#sync_reactions_count", :article
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
require "rails_helper"
|
||||
|
||||
RSpec.describe BadgeAchievement, type: :model do
|
||||
let_it_be(:achievement) { create(:badge_achievement) }
|
||||
let(:achievement) { create(:badge_achievement) }
|
||||
|
||||
describe "validations" do
|
||||
describe "builtin validations" do
|
||||
|
|
@ -23,6 +23,7 @@ RSpec.describe BadgeAchievement, type: :model do
|
|||
end
|
||||
|
||||
it "notifies recipients after commit" do
|
||||
achievement
|
||||
allow(Notification).to receive(:send_new_badge_achievement_notification)
|
||||
achievement.run_callbacks(:commit)
|
||||
expect(Notification).to have_received(:send_new_badge_achievement_notification).with(achievement)
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ RSpec.describe Badge, type: :model do
|
|||
end
|
||||
|
||||
context "when callbacks are triggered after save" do
|
||||
let_it_be_changeable(:badge) { create(:badge) }
|
||||
let!(:badge) { create(:badge) }
|
||||
|
||||
describe "cache busting" do
|
||||
before do
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
require "rails_helper"
|
||||
|
||||
RSpec.describe BufferUpdate, type: :model do
|
||||
let_it_be(:article) { create(:article) }
|
||||
let(:article) { create(:article) }
|
||||
|
||||
it "creates update" do
|
||||
described_class.buff!(article.id, "twitter_buffer_text", "CODE", "twitter")
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ require "rails_helper"
|
|||
RSpec.describe ChatChannel, type: :model do
|
||||
let(:chat_channel) { create(:chat_channel) }
|
||||
|
||||
let_it_be(:users) { create_list(:user, 2) }
|
||||
let(:users) { create_list(:user, 2) }
|
||||
|
||||
describe "validations" do
|
||||
describe "builtin validations" do
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
require "rails_helper"
|
||||
|
||||
RSpec.describe Collection, type: :model do
|
||||
let_it_be(:user) { create(:user) }
|
||||
let_it_be(:collection) { create(:collection, :with_articles, user: user) }
|
||||
let(:user) { create(:user) }
|
||||
let(:collection) { create(:collection, :with_articles, user: user) }
|
||||
|
||||
describe "validations" do
|
||||
it { is_expected.to belong_to(:user) }
|
||||
|
|
@ -15,8 +15,8 @@ RSpec.describe Collection, type: :model do
|
|||
end
|
||||
|
||||
describe ".find_series" do
|
||||
let_it_be(:other_user) { create(:user) }
|
||||
let_it_be(:series) { collection }
|
||||
let!(:other_user) { create(:user) }
|
||||
let!(:series) { collection }
|
||||
|
||||
it "returns an existing series" do
|
||||
expect do
|
||||
|
|
|
|||
|
|
@ -1,16 +1,16 @@
|
|||
require "rails_helper"
|
||||
|
||||
RSpec.describe Credit, type: :model do
|
||||
let_it_be(:user) { create(:user) }
|
||||
let_it_be(:organization) { create(:organization) }
|
||||
let(:user) { create(:user) }
|
||||
let(:organization) { create(:organization) }
|
||||
|
||||
it { is_expected.to belong_to(:user).optional }
|
||||
it { is_expected.to belong_to(:organization).optional }
|
||||
it { is_expected.to belong_to(:purchase).optional }
|
||||
|
||||
context "when caching counters" do
|
||||
let_it_be(:user_credits) { create_list(:credit, 2, user: user) }
|
||||
let_it_be(:org_credits) { create_list(:credit, 1, organization: organization) }
|
||||
let(:user_credits) { create_list(:credit, 2, user: user) }
|
||||
let(:org_credits) { create_list(:credit, 1, organization: organization) }
|
||||
|
||||
describe "#credits_count" do
|
||||
it "counts credits for user" do
|
||||
|
|
@ -49,7 +49,7 @@ RSpec.describe Credit, type: :model do
|
|||
end
|
||||
|
||||
describe "#purchase" do
|
||||
let_it_be(:credit) { build(:credit) }
|
||||
let(:credit) { build(:credit) }
|
||||
|
||||
it "is valid with a purchase" do
|
||||
credit.purchase = build(:listing)
|
||||
|
|
@ -77,8 +77,10 @@ RSpec.describe Credit, type: :model do
|
|||
end
|
||||
|
||||
describe "#remove_from" do
|
||||
let_it_be(:user_credits) { create_list(:credit, 2, user: user) }
|
||||
let_it_be(:org_credits) { create_list(:credit, 1, organization: organization) }
|
||||
let(:user_credits) { create_list(:credit, 2, user: user) }
|
||||
let(:org_credits) { create_list(:credit, 1, organization: organization) }
|
||||
|
||||
before { [user_credits, org_credits] }
|
||||
|
||||
it "adds the credits to the user" do
|
||||
expect do
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
require "rails_helper"
|
||||
|
||||
RSpec.describe DisplayAdEvent, type: :model do
|
||||
let_it_be(:user) { build(:user) }
|
||||
let_it_be(:organization) { build(:organization) }
|
||||
let_it_be(:display_ad) { build(:display_ad, organization: organization) }
|
||||
let(:user) { build(:user) }
|
||||
let(:organization) { build(:organization) }
|
||||
let(:display_ad) { build(:display_ad, organization: organization) }
|
||||
|
||||
describe "#category" do
|
||||
it "is valid with a click category" do
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
require "rails_helper"
|
||||
|
||||
RSpec.describe DisplayAd, type: :model do
|
||||
let_it_be(:organization) { create(:organization) }
|
||||
let_it_be(:display_ad) { create(:display_ad, organization_id: organization.id) }
|
||||
let(:organization) { create(:organization) }
|
||||
let(:display_ad) { create(:display_ad, organization_id: organization.id) }
|
||||
|
||||
it { is_expected.to validate_presence_of(:organization_id) }
|
||||
it { is_expected.to validate_presence_of(:placement_area) }
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
require "rails_helper"
|
||||
|
||||
RSpec.describe Listing, type: :model do
|
||||
let_it_be(:user) { create(:user) }
|
||||
let_it_be(:organization) { create(:organization) }
|
||||
let(:user) { create(:user) }
|
||||
let(:organization) { create(:organization) }
|
||||
let(:listing) { create(:listing, user: user) }
|
||||
|
||||
# TODO: Remove setting of default parser from a model's callback
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ RSpec.describe Message, type: :model do
|
|||
end
|
||||
|
||||
context "when callbacks are triggered before validation" do
|
||||
let_it_be(:article) { create(:article) }
|
||||
let(:article) { create(:article) }
|
||||
|
||||
describe "#message_html" do
|
||||
it "creates rich link with proper link for article" do
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
require "rails_helper"
|
||||
|
||||
RSpec.describe NotificationSubscription, type: :model do
|
||||
let_it_be(:user) { create(:user) }
|
||||
let_it_be(:article) { create(:article, user: user) }
|
||||
|
||||
subject { create(:notification_subscription, user: user, notifiable: article) }
|
||||
|
||||
let(:user) { create(:user) }
|
||||
let(:article) { create(:article, user: user) }
|
||||
|
||||
it { is_expected.to validate_uniqueness_of(:user_id).scoped_to(%i[notifiable_type notifiable_id]) }
|
||||
end
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ RSpec.describe PodcastEpisode, type: :model do
|
|||
end
|
||||
|
||||
describe ".available" do
|
||||
let_it_be(:podcast) { create(:podcast) }
|
||||
let(:podcast) { create(:podcast) }
|
||||
|
||||
it "is available when reachable and published" do
|
||||
expect do
|
||||
|
|
@ -85,7 +85,7 @@ RSpec.describe PodcastEpisode, type: :model do
|
|||
end
|
||||
|
||||
context "when callbacks are triggered before validation" do
|
||||
let_it_be(:podcast_episode) { build(:podcast_episode) }
|
||||
let(:podcast_episode) { build(:podcast_episode) }
|
||||
|
||||
describe "paragraphs cleanup" do
|
||||
it "removes empty paragraphs" do
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
require "rails_helper"
|
||||
|
||||
RSpec.describe PollOption, type: :model do
|
||||
let_it_be(:article) { build(:article, featured: true) }
|
||||
let_it_be(:poll) { build(:poll, article: article) }
|
||||
let_it_be(:poll_option) { build(:poll_option, poll: poll) }
|
||||
let(:article) { build(:article, featured: true) }
|
||||
let(:poll) { build(:poll, article: article) }
|
||||
let(:poll_option) { build(:poll_option, poll: poll) }
|
||||
|
||||
describe "validations" do
|
||||
it "allows up to 128 markdown characters" do
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
require "rails_helper"
|
||||
|
||||
RSpec.describe PollSkip, type: :model do
|
||||
let_it_be(:article) { create(:article, featured: true) }
|
||||
let_it_be(:user) { create(:user) }
|
||||
let_it_be(:poll) { create(:poll, article: article) }
|
||||
let(:article) { create(:article, featured: true) }
|
||||
let(:user) { create(:user) }
|
||||
let(:poll) { create(:poll, article: article) }
|
||||
|
||||
describe "validations" do
|
||||
context "when checking against poll" do
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
require "rails_helper"
|
||||
|
||||
RSpec.describe Poll, type: :model do
|
||||
let_it_be(:article) { create(:article, featured: true) }
|
||||
let(:article) { create(:article, featured: true) }
|
||||
|
||||
describe "validations" do
|
||||
let_it_be(:poll) { build(:poll, article: article) }
|
||||
let(:poll) { build(:poll, article: article) }
|
||||
|
||||
describe "#prompt_markdown" do
|
||||
it "is valid up to 128 chars" do
|
||||
|
|
|
|||
|
|
@ -1,18 +1,19 @@
|
|||
require "rails_helper"
|
||||
|
||||
RSpec.describe ProfilePin, type: :model do
|
||||
let_it_be(:user) { create(:user) }
|
||||
let(:user) { create(:user) }
|
||||
|
||||
describe "validations" do
|
||||
describe "number of pins" do
|
||||
let_it_be(:articles) { create_list(:article, 4, user: user) }
|
||||
let_it_be(:pins) do
|
||||
let(:articles) { create_list(:article, 4, user: user) }
|
||||
let(:pins) do
|
||||
articles.each { |article| create(:profile_pin, pinnable: article, profile: user) }
|
||||
end
|
||||
|
||||
let(:fifth_article) { create(:article, user: user) }
|
||||
let(:sixth_article) { create(:article, user: user) }
|
||||
|
||||
before { pins }
|
||||
|
||||
it "allows up to five pins per user" do
|
||||
pin = build(:profile_pin, pinnable: fifth_article, profile: user)
|
||||
expect(pin).to be_valid
|
||||
|
|
@ -28,7 +29,7 @@ RSpec.describe ProfilePin, type: :model do
|
|||
end
|
||||
|
||||
describe "#profile" do
|
||||
let_it_be(:article) { create(:article, user: user) }
|
||||
let(:article) { create(:article, user: user) }
|
||||
|
||||
it "ensures pinnable belongs to the same profile" do
|
||||
pin = build(:profile_pin, pinnable: article, profile: create(:user))
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ RSpec.describe RatingVote, type: :model do
|
|||
end
|
||||
|
||||
describe "permissions" do
|
||||
let_it_be(:untrusted_user) { create(:user) }
|
||||
let(:untrusted_user) { create(:user) }
|
||||
|
||||
it "allows untrusted user to leave readinglist_reaction context rating" do
|
||||
rating = build(:rating_vote, article_id: article.id, user_id: untrusted_user.id, context: "readinglist_reaction")
|
||||
|
|
|
|||
|
|
@ -144,8 +144,8 @@ RSpec.describe Reaction, type: :model do
|
|||
end
|
||||
|
||||
describe "#skip_notification_for?" do
|
||||
let_it_be(:receiver) { build(:user) }
|
||||
let_it_be(:reaction) { build(:reaction, reactable: build(:article), user: nil) }
|
||||
let(:receiver) { build(:user) }
|
||||
let(:reaction) { build(:reaction, reactable: build(:article), user: nil) }
|
||||
|
||||
context "when false" do
|
||||
it "is false when points are positive" do
|
||||
|
|
@ -202,8 +202,8 @@ RSpec.describe Reaction, type: :model do
|
|||
|
||||
context "when callbacks are called after create" do
|
||||
describe "slack messages" do
|
||||
let_it_be_changeable(:user) { create(:user, :trusted) }
|
||||
let_it_be_readonly(:article) { create(:article, user: user) }
|
||||
let!(:user) { create(:user, :trusted) }
|
||||
let!(:article) { create(:article, user: user) }
|
||||
|
||||
before do
|
||||
# making sure there are no other enqueued jobs from other tests
|
||||
|
|
|
|||
|
|
@ -598,7 +598,7 @@ RSpec.describe User, type: :model do
|
|||
end
|
||||
|
||||
context "when callbacks are triggered before and after create" do
|
||||
let_it_be(:user) { create(:user, email: nil) }
|
||||
let(:user) { create(:user, email: nil) }
|
||||
|
||||
describe "#language_settings" do
|
||||
it "sets correct language_settings by default" do
|
||||
|
|
@ -968,8 +968,8 @@ RSpec.describe User, type: :model do
|
|||
end
|
||||
|
||||
describe "#followed_articles" do
|
||||
let_it_be(:another_user) { create(:user) }
|
||||
let_it_be(:articles) { create_list(:article, 2, user: another_user) }
|
||||
let!(:another_user) { create(:user) }
|
||||
let!(:articles) { create_list(:article, 2, user: another_user) }
|
||||
|
||||
before do
|
||||
user.follow(another_user)
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
require "rails_helper"
|
||||
|
||||
RSpec.describe Webhook::Event, type: :model do
|
||||
let_it_be(:article) { create(:article) }
|
||||
let_it_be(:payload) { Webhook::PayloadAdapter.new(article).hash }
|
||||
let(:article) { create(:article) }
|
||||
let(:payload) { Webhook::PayloadAdapter.new(article).hash }
|
||||
|
||||
describe "validations" do
|
||||
it "raises an exception with a unknown event type" do
|
||||
|
|
|
|||
|
|
@ -3,8 +3,8 @@ require "rails_helper"
|
|||
RSpec.describe ReactionPolicy do
|
||||
subject { described_class.new(user, reaction) }
|
||||
|
||||
let_it_be(:comment) { create(:comment, commentable: create(:article)) }
|
||||
let_it_be(:reaction) { create(:reaction, reactable: comment) }
|
||||
let(:comment) { create(:comment, commentable: create(:article)) }
|
||||
let(:reaction) { create(:reaction, reactable: comment) }
|
||||
let!(:user) { create(:user) }
|
||||
|
||||
context "when user is not signed in" do
|
||||
|
|
|
|||
|
|
@ -3,12 +3,12 @@ require "rails_helper"
|
|||
RSpec.describe Internal::ModeratorsQuery, type: :query do
|
||||
subject { described_class.call(options: options) }
|
||||
|
||||
let_it_be_readonly(:user) { create(:user, :trusted, name: "Greg") }
|
||||
let_it_be_readonly(:user2) { create(:user, :trusted, name: "Gregory") }
|
||||
let_it_be_readonly(:user3) { create(:user, :tag_moderator, name: "Paul", comments_count: 4) }
|
||||
let_it_be_readonly(:user4) { create(:user, :admin, name: "Susi", comments_count: 10) }
|
||||
let_it_be_readonly(:user5) { create(:user, :trusted, :admin, name: "Beth") }
|
||||
let_it_be_readonly(:user6) { create(:user, :admin, name: "Jean", comments_count: 5) }
|
||||
let!(:user) { create(:user, :trusted, name: "Greg") }
|
||||
let(:user2) { create(:user, :trusted, name: "Gregory") }
|
||||
let!(:user3) { create(:user, :tag_moderator, name: "Paul", comments_count: 4) }
|
||||
let!(:user4) { create(:user, :admin, name: "Susi", comments_count: 10) }
|
||||
let(:user5) { create(:user, :trusted, :admin, name: "Beth") }
|
||||
let(:user6) { create(:user, :admin, name: "Jean", comments_count: 5) }
|
||||
|
||||
describe ".call" do
|
||||
context "when no arguments are given" do
|
||||
|
|
|
|||
|
|
@ -3,12 +3,12 @@ require "rails_helper"
|
|||
RSpec.describe Internal::UsersQuery, type: :query do
|
||||
subject { described_class.call(options: options) }
|
||||
|
||||
let_it_be_readonly(:user) { create(:user, :trusted, name: "Greg") }
|
||||
let_it_be_readonly(:user2) { create(:user, :trusted, name: "Gregory") }
|
||||
let_it_be_readonly(:user3) { create(:user, :tag_moderator, name: "Paul") }
|
||||
let_it_be_readonly(:user4) { create(:user, :admin, name: "Susi") }
|
||||
let_it_be_readonly(:user5) { create(:user, :trusted, :admin, name: "Beth") }
|
||||
let_it_be_readonly(:user6) { create(:user, :super_admin, name: "Jean") }
|
||||
let!(:user) { create(:user, :trusted, name: "Greg") }
|
||||
let!(:user2) { create(:user, :trusted, name: "Gregory") }
|
||||
let!(:user3) { create(:user, :tag_moderator, name: "Paul") }
|
||||
let!(:user4) { create(:user, :admin, name: "Susi") }
|
||||
let!(:user5) { create(:user, :trusted, :admin, name: "Beth") }
|
||||
let!(:user6) { create(:user, :super_admin, name: "Jean") }
|
||||
|
||||
describe ".call" do
|
||||
context "when no arguments are given" do
|
||||
|
|
|
|||
|
|
@ -13,9 +13,6 @@ abort("The Rails environment is running in production mode!") if Rails.env.produ
|
|||
require "pundit/matchers"
|
||||
require "pundit/rspec"
|
||||
require "webmock/rspec"
|
||||
require "test_prof/recipes/rspec/before_all"
|
||||
require "test_prof/recipes/rspec/let_it_be"
|
||||
require "test_prof/recipes/rspec/sample"
|
||||
require "sidekiq/testing"
|
||||
require "validate_url/rspec_matcher"
|
||||
|
||||
|
|
|
|||
|
|
@ -1,12 +1,15 @@
|
|||
require "rails_helper"
|
||||
|
||||
RSpec.describe "Api::V0::Articles", type: :request do
|
||||
let_it_be_readonly(:organization) { create(:organization) } # not used by every spec but lower times overall
|
||||
let_it_be_readonly(:tag) { create(:tag, name: "discuss") }
|
||||
let_it_be_changeable(:article) { create(:article, featured: true, tags: "discuss") }
|
||||
let(:organization) { create(:organization) } # not used by every spec but lower times overall
|
||||
let(:tag) { create(:tag, name: "discuss") }
|
||||
let(:article) { create(:article, featured: true, tags: "discuss") }
|
||||
|
||||
before { stub_const("FlareTag::FLARE_TAG_IDS_HASH", { "discuss" => tag.id }) }
|
||||
|
||||
describe "GET /api/articles" do
|
||||
before { article }
|
||||
|
||||
it "returns CORS headers" do
|
||||
origin = "http://example.com"
|
||||
get api_articles_path, headers: { "origin": origin }
|
||||
|
|
@ -425,8 +428,8 @@ RSpec.describe "Api::V0::Articles", type: :request do
|
|||
end
|
||||
|
||||
context "when request is authenticated" do
|
||||
let_it_be(:user) { create(:user) }
|
||||
let_it_be(:access_token) { create :doorkeeper_access_token, resource_owner: user, scopes: "public read_articles" }
|
||||
let(:user) { create(:user) }
|
||||
let(:access_token) { create :doorkeeper_access_token, resource_owner: user, scopes: "public read_articles" }
|
||||
|
||||
it "works with bearer authorization" do
|
||||
headers = { "authorization" => "Bearer #{access_token.token}", "content-type" => "application/json" }
|
||||
|
|
|
|||
|
|
@ -1,15 +1,15 @@
|
|||
require "rails_helper"
|
||||
|
||||
RSpec.describe "Api::V0::Comments", type: :request do
|
||||
let_it_be(:article) { create(:article) }
|
||||
let_it_be(:root_comment) { create(:comment, commentable: article) }
|
||||
let_it_be_changeable(:child_comment) do
|
||||
let(:article) { create(:article) }
|
||||
let!(:root_comment) { create(:comment, commentable: article) }
|
||||
let!(:child_comment) do
|
||||
create(:comment, commentable: article, parent: root_comment)
|
||||
end
|
||||
let_it_be(:grandchild_comment) do
|
||||
let!(:grandchild_comment) do
|
||||
create(:comment, commentable: article, parent: child_comment)
|
||||
end
|
||||
let_it_be(:great_grandchild_comment) do
|
||||
let!(:great_grandchild_comment) do
|
||||
create(:comment, commentable: article, parent: grandchild_comment)
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
require "rails_helper"
|
||||
|
||||
RSpec.describe "Api::V0::Listings", type: :request do
|
||||
let_it_be_readonly(:cfp_category) do
|
||||
let(:cfp_category) do
|
||||
create(:listing_category, :cfp)
|
||||
end
|
||||
let_it_be_readonly(:edu_category) do
|
||||
let(:edu_category) do
|
||||
create(:listing_category)
|
||||
end
|
||||
|
||||
|
|
@ -155,7 +155,7 @@ RSpec.describe "Api::V0::Listings", type: :request do
|
|||
end
|
||||
|
||||
context "when unauthorized" do
|
||||
let_it_be_readonly(:headers) { { "api-key" => "invalid api key" } }
|
||||
let(:headers) { { "api-key" => "invalid api key" } }
|
||||
|
||||
it "returns a published listing" do
|
||||
listing.update(published: true)
|
||||
|
|
|
|||
|
|
@ -57,8 +57,8 @@ RSpec.describe "Api::V0::Users", type: :request do
|
|||
end
|
||||
|
||||
context "when request is authenticated" do
|
||||
let_it_be(:user) { create(:user) }
|
||||
let_it_be(:access_token) { create(:doorkeeper_access_token, resource_owner: user, scopes: "public") }
|
||||
let(:user) { create(:user) }
|
||||
let(:access_token) { create(:doorkeeper_access_token, resource_owner: user, scopes: "public") }
|
||||
|
||||
it "returns the correct json representation of the user", :aggregate_failures do
|
||||
get me_api_users_path, params: { access_token: access_token.token }
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
require "rails_helper"
|
||||
|
||||
RSpec.describe "VideoPlayerShow", type: :request do
|
||||
let_it_be(:user) { create(:user) }
|
||||
let_it_be(:video_article) { create(:article, user: user) }
|
||||
let(:user) { create(:user) }
|
||||
let(:video_article) { create(:article, user: user) }
|
||||
|
||||
describe "GET /:slug (video articles)" do
|
||||
before do
|
||||
|
|
|
|||
|
|
@ -1,10 +1,11 @@
|
|||
require "rails_helper"
|
||||
|
||||
RSpec.describe "Events", type: :request do
|
||||
let_it_be(:event) { create(:event, published: true) }
|
||||
let(:event) { create(:event, published: true) }
|
||||
|
||||
describe "GET events" do
|
||||
it "returns index page" do
|
||||
event
|
||||
get "/events"
|
||||
expect(response.body).to include("#{community_name} EVENTS")
|
||||
expect(response.body).to include(event.title)
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
require "rails_helper"
|
||||
|
||||
RSpec.describe "/internal/config", type: :request do
|
||||
let_it_be(:user) { create(:user) }
|
||||
let_it_be(:admin) { create(:user, :super_admin) }
|
||||
let_it_be(:admin_plus_config) { create(:user, :super_plus_single_resource_admin, resource: Config) }
|
||||
let_it_be(:confirmation_message) do
|
||||
let(:user) { create(:user) }
|
||||
let(:admin) { create(:user, :super_admin) }
|
||||
let(:admin_plus_config) { create(:user, :super_plus_single_resource_admin, resource: Config) }
|
||||
let(:confirmation_message) do
|
||||
"My username is @#{admin_plus_config.username} and this action is 100% safe and appropriate."
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
require "rails_helper"
|
||||
|
||||
RSpec.describe "/internal/listings", type: :request do
|
||||
let_it_be(:admin) { create(:user, :super_admin) }
|
||||
let_it_be(:listing) { create(:listing, user_id: admin.id) }
|
||||
let(:admin) { create(:user, :super_admin) }
|
||||
let!(:listing) { create(:listing, user_id: admin.id) }
|
||||
|
||||
before do
|
||||
allow(CacheBuster).to receive(:bust_listings)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
require "rails_helper"
|
||||
|
||||
RSpec.describe "/listings", type: :request do
|
||||
let_it_be_readonly(:edu_category) do
|
||||
let(:edu_category) do
|
||||
create(:listing_category, cost: 1)
|
||||
end
|
||||
let(:user) { create(:user) }
|
||||
|
|
@ -147,7 +147,7 @@ RSpec.describe "/listings", type: :request do
|
|||
create_list(:credit, 25, user: user)
|
||||
end
|
||||
|
||||
let_it_be_readonly(:cfp_category) { create(:listing_category, :cfp) }
|
||||
let(:cfp_category) { create(:listing_category, :cfp) }
|
||||
|
||||
context "when the listing is invalid" do
|
||||
let(:invalid_params) do
|
||||
|
|
|
|||
|
|
@ -3,10 +3,10 @@ require "rails_helper"
|
|||
RSpec.describe "NotificationsIndex", type: :request do
|
||||
include ActionView::Helpers::DateHelper
|
||||
|
||||
let_it_be_readonly(:dev_account) { create(:user) }
|
||||
let_it_be_readonly(:mascot_account) { create(:user) }
|
||||
let_it_be_changeable(:user) { create(:user) }
|
||||
let_it_be_changeable(:organization) { create(:organization) }
|
||||
let(:dev_account) { create(:user) }
|
||||
let(:mascot_account) { create(:user) }
|
||||
let(:user) { create(:user) }
|
||||
let(:organization) { create(:organization) }
|
||||
|
||||
before do
|
||||
allow(User).to receive(:dev_account).and_return(dev_account)
|
||||
|
|
|
|||
|
|
@ -18,8 +18,8 @@ RSpec.describe "Pages", type: :request do
|
|||
end
|
||||
|
||||
context "when json template" do
|
||||
let_it_be(:json_text) { "{\"foo\": \"bar\"}" }
|
||||
let_it_be(:page) do
|
||||
let(:json_text) { "{\"foo\": \"bar\"}" }
|
||||
let(:page) do
|
||||
create(:page, title: "sample_data", template: "json", body_json: json_text, body_html: nil, body_markdown: nil)
|
||||
end
|
||||
|
||||
|
|
@ -143,7 +143,7 @@ RSpec.describe "Pages", type: :request do
|
|||
end
|
||||
|
||||
describe "GET /checkin" do
|
||||
let_it_be(:user) { create(:user, username: "codenewbiestaff") }
|
||||
let(:user) { create(:user, username: "codenewbiestaff") }
|
||||
|
||||
it "redirects to the latest CodeNewbie staff thread" do
|
||||
earlier_staff_thread = create(:article, user: user, tags: "staff")
|
||||
|
|
|
|||
|
|
@ -5,8 +5,8 @@ RSpec.describe "Reactions", type: :request do
|
|||
let(:article) { create(:article, user: user) }
|
||||
let(:comment) { create(:comment, commentable: article) }
|
||||
|
||||
let_it_be(:max_age) { 1.day.to_i }
|
||||
let_it_be(:stale_if_error) { 26_400 }
|
||||
let(:max_age) { 1.day.to_i }
|
||||
let(:stale_if_error) { 26_400 }
|
||||
|
||||
describe "GET /reactions?article_id=:article_id" do
|
||||
before do
|
||||
|
|
@ -269,7 +269,7 @@ RSpec.describe "Reactions", type: :request do
|
|||
end
|
||||
|
||||
context "when signed in as admin" do
|
||||
let_it_be(:admin) { create(:user, :admin) }
|
||||
let(:admin) { create(:user, :admin) }
|
||||
|
||||
before do
|
||||
sign_in admin
|
||||
|
|
|
|||
|
|
@ -129,7 +129,7 @@ RSpec.describe "StoriesIndex", type: :request do
|
|||
end
|
||||
|
||||
context "with campaign hero" do
|
||||
let_it_be_readonly(:hero_html) do
|
||||
let!(:hero_html) do
|
||||
create(
|
||||
:html_variant,
|
||||
group: "campaign",
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
require "rails_helper"
|
||||
|
||||
RSpec.describe "StoriesShow", type: :request do
|
||||
let_it_be(:user) { create(:user) }
|
||||
let_it_be(:org, reload: true) { create(:organization) }
|
||||
let_it_be(:article, reload: true) { create(:article, user: user) }
|
||||
let(:user) { create(:user) }
|
||||
let(:org) { create(:organization) }
|
||||
let(:article) { create(:article, user: user) }
|
||||
|
||||
describe "GET /:username/:slug (articles)" do
|
||||
it "renders proper title" do
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
require "rails_helper"
|
||||
|
||||
RSpec.describe "UserShow", type: :request do
|
||||
let_it_be(:user) { create(:user, :with_all_info, email_public: true) }
|
||||
let(:user) { create(:user, :with_all_info, email_public: true) }
|
||||
|
||||
describe "GET /:slug (user)" do
|
||||
it "returns a 200 status when navigating to the user's page" do
|
||||
|
|
|
|||
|
|
@ -5,13 +5,13 @@ RSpec.describe Broadcasts::WelcomeNotification::Generator, type: :service do
|
|||
let!(:welcome_thread) { create(:article, user: mascot_account, published: true, tags: "welcome") }
|
||||
|
||||
# welcome_broadcast is explicitly not readonly so that we can test against an inactive broadcast
|
||||
let_it_be(:welcome_broadcast) { create(:welcome_broadcast) }
|
||||
let_it_be_readonly(:twitter_connect_broadcast) { create(:twitter_connect_broadcast) }
|
||||
let_it_be_readonly(:github_connect_broadcast) { create(:github_connect_broadcast) }
|
||||
let_it_be_readonly(:customize_feed_broadcast) { create(:customize_feed_broadcast) }
|
||||
let_it_be_readonly(:discuss_and_ask_broadcast) { create(:discuss_and_ask_broadcast) }
|
||||
let_it_be_readonly(:customize_ux_broadcast) { create(:customize_ux_broadcast) }
|
||||
let_it_be_readonly(:download_app_broadcast) { create(:download_app_broadcast) }
|
||||
let!(:welcome_broadcast) { create(:welcome_broadcast) }
|
||||
let!(:twitter_connect_broadcast) { create(:twitter_connect_broadcast) }
|
||||
let!(:github_connect_broadcast) { create(:github_connect_broadcast) }
|
||||
let!(:customize_feed_broadcast) { create(:customize_feed_broadcast) }
|
||||
let!(:discuss_and_ask_broadcast) { create(:discuss_and_ask_broadcast) }
|
||||
let!(:customize_ux_broadcast) { create(:customize_ux_broadcast) }
|
||||
let!(:download_app_broadcast) { create(:download_app_broadcast) }
|
||||
|
||||
before do
|
||||
omniauth_mock_providers_payload
|
||||
|
|
@ -225,8 +225,8 @@ RSpec.describe Broadcasts::WelcomeNotification::Generator, type: :service do
|
|||
describe "#send_discuss_and_ask_notification" do
|
||||
let!(:user) { create(:user, :with_identity, identities: %w[twitter github], created_at: 6.days.ago) }
|
||||
|
||||
let_it_be_readonly(:ask_question_broadcast) { create(:ask_question_broadcast) }
|
||||
let_it_be_readonly(:start_discussion_broadcast) { create(:start_discussion_broadcast) }
|
||||
let!(:ask_question_broadcast) { create(:ask_question_broadcast) }
|
||||
let!(:start_discussion_broadcast) { create(:start_discussion_broadcast) }
|
||||
|
||||
context "with a user who has asked a question" do
|
||||
it "generates the correct broadcast type and sends the notification to the user" do
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
require "rails_helper"
|
||||
|
||||
RSpec.describe Notifications::Update, type: :service do
|
||||
let_it_be(:article) { create(:article) }
|
||||
let(:article) { create(:article) }
|
||||
|
||||
context "when updating notifications of an article" do
|
||||
it "updates all notifications with the same action", :aggregate_failures do
|
||||
|
|
@ -37,8 +37,8 @@ RSpec.describe Notifications::Update, type: :service do
|
|||
end
|
||||
|
||||
context "when updating notifications of an organization article" do
|
||||
let_it_be(:organization) { create(:organization) }
|
||||
let_it_be(:article) { create(:article, organization: organization) }
|
||||
let(:organization) { create(:organization) }
|
||||
let(:article) { create(:article, organization: organization) }
|
||||
|
||||
it "updates all notifications with the same action", :aggregate_failures do
|
||||
notifications = create_list(:notification, 2, notifiable: article, action: "Published")
|
||||
|
|
@ -73,7 +73,7 @@ RSpec.describe Notifications::Update, type: :service do
|
|||
end
|
||||
|
||||
context "when updating notifications on a comment" do
|
||||
let_it_be(:comment) { create(:comment, commentable: article) }
|
||||
let(:comment) { create(:comment, commentable: article) }
|
||||
|
||||
it "updates all notifications", :aggregate_failures do
|
||||
notifications = create_list(:notification, 2, notifiable: comment)
|
||||
|
|
@ -94,7 +94,7 @@ RSpec.describe Notifications::Update, type: :service do
|
|||
end
|
||||
|
||||
context "when updating notifications on a reaction" do
|
||||
let_it_be(:reaction) { create(:reaction, reactable: article) }
|
||||
let(:reaction) { create(:reaction, reactable: article) }
|
||||
|
||||
it "does not update notifications", :aggregate_failures do
|
||||
notifications = create_list(:notification, 2, notifiable: reaction)
|
||||
|
|
|
|||
|
|
@ -164,7 +164,7 @@ RSpec.describe Users::Delete, type: :service do
|
|||
end
|
||||
|
||||
context "when cleaning up chat channels" do
|
||||
let_it_be(:other_user) { create(:user) }
|
||||
let(:other_user) { create(:user) }
|
||||
|
||||
it "deletes the user's private chat channels" do
|
||||
chat_channel = ChatChannel.create_with_users(users: [user, other_user])
|
||||
|
|
|
|||
|
|
@ -1,19 +0,0 @@
|
|||
# see <https://test-prof.evilmartians.io/#/let_it_be>
|
||||
TestProf::LetItBe.configure do |config|
|
||||
config.register_modifier :readonly do |record, val|
|
||||
next record unless record.is_a?(::ActiveRecord::Base)
|
||||
|
||||
next record unless val
|
||||
|
||||
record.tap(&:readonly!)
|
||||
end
|
||||
|
||||
# marks the record as readonly
|
||||
config.alias_to :let_it_be_readonly, readonly: true
|
||||
|
||||
# reloads the record from the DB, with `record.reload`
|
||||
config.alias_to :let_it_be_changeable, reload: true
|
||||
|
||||
# creates a new instance of the same record in memory
|
||||
config.alias_to :let_it_be_refindable, refind: true
|
||||
end
|
||||
|
|
@ -1,9 +1,9 @@
|
|||
require "rails_helper"
|
||||
|
||||
RSpec.describe "Views an article", type: :system do
|
||||
let_it_be(:user) { create(:user) }
|
||||
let_it_be(:moderator) { create(:user, :trusted) }
|
||||
let_it_be(:article, reload: true) { create(:article, :with_notification_subscription, user: user) }
|
||||
let(:user) { create(:user) }
|
||||
let(:moderator) { create(:user, :trusted) }
|
||||
let(:article) { create(:article, :with_notification_subscription, user: user) }
|
||||
let(:timestamp) { "2019-03-04T10:00:00Z" }
|
||||
|
||||
before do
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
require "rails_helper"
|
||||
|
||||
RSpec.describe "Editing with an editor", type: :system, js: true do
|
||||
let_it_be(:template) { file_fixture("article_published.txt").read }
|
||||
let_it_be(:user) { create(:user) }
|
||||
let_it_be(:article, reload: true) { create(:article, user: user, body_markdown: template) }
|
||||
let(:template) { file_fixture("article_published.txt").read }
|
||||
let(:user) { create(:user) }
|
||||
let(:article) { create(:article, user: user, body_markdown: template) }
|
||||
|
||||
before do
|
||||
sign_in user
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ RSpec.describe "Broadcasts tasks", type: :task do
|
|||
let(:service) { Broadcasts::WelcomeNotification::Generator }
|
||||
let(:one_week_from_today) { 1.week.since }
|
||||
|
||||
let_it_be_readonly(:default_config_date) { SiteConfig.welcome_notifications_live_at }
|
||||
let(:default_config_date) { SiteConfig.welcome_notifications_live_at }
|
||||
|
||||
before do
|
||||
# Set date to a week from today
|
||||
|
|
|
|||
|
|
@ -5,11 +5,11 @@ require "exifr/jpeg"
|
|||
describe ArticleImageUploader, type: :uploader do
|
||||
include CarrierWave::Test::Matchers
|
||||
|
||||
let_it_be(:image_jpg) { fixture_file_upload("files/800x600.jpg", "image/jpeg") }
|
||||
let_it_be(:image_png) { fixture_file_upload("files/800x600.png", "image/png") }
|
||||
let_it_be(:image_webp) { fixture_file_upload("files/800x600.webp", "image/webp") }
|
||||
let_it_be(:image_with_gps) { fixture_file_upload("files/image_gps_data.jpg", "image/jpeg") }
|
||||
let_it_be(:high_frame_count) { fixture_file_upload("files/high_frame_count.gif", "image/gif") }
|
||||
let(:image_jpg) { fixture_file_upload("files/800x600.jpg", "image/jpeg") }
|
||||
let(:image_png) { fixture_file_upload("files/800x600.png", "image/png") }
|
||||
let(:image_webp) { fixture_file_upload("files/800x600.webp", "image/webp") }
|
||||
let(:image_with_gps) { fixture_file_upload("files/image_gps_data.jpg", "image/jpeg") }
|
||||
let(:high_frame_count) { fixture_file_upload("files/high_frame_count.gif", "image/gif") }
|
||||
|
||||
# we need a new uploader before each test, and since the uploader is not a model
|
||||
# we can recreate it quickly in memory with `let!`
|
||||
|
|
|
|||
|
|
@ -5,12 +5,12 @@ require "exifr/jpeg"
|
|||
describe BadgeUploader, type: :uploader do
|
||||
include CarrierWave::Test::Matchers
|
||||
|
||||
let_it_be(:image_jpg) { fixture_file_upload("files/800x600.jpg", "image/jpeg") }
|
||||
let_it_be(:image_png) { fixture_file_upload("files/800x600.png", "image/png") }
|
||||
let_it_be(:image_webp) { fixture_file_upload("files/800x600.webp", "image/webp") }
|
||||
let_it_be(:image_with_gps) { fixture_file_upload("files/image_gps_data.jpg", "image/jpeg") }
|
||||
let(:image_jpg) { fixture_file_upload("files/800x600.jpg", "image/jpeg") }
|
||||
let(:image_png) { fixture_file_upload("files/800x600.png", "image/png") }
|
||||
let(:image_webp) { fixture_file_upload("files/800x600.webp", "image/webp") }
|
||||
let(:image_with_gps) { fixture_file_upload("files/image_gps_data.jpg", "image/jpeg") }
|
||||
|
||||
let_it_be_changeable(:badge) { create(:badge) }
|
||||
let(:badge) { create(:badge) }
|
||||
|
||||
# we need a new uploader before each test, and since the uploader is not a model
|
||||
# we can recreate it quickly in memory with `let!`
|
||||
|
|
|
|||
|
|
@ -5,12 +5,12 @@ require "exifr/jpeg"
|
|||
describe CoverImageUploader, type: :uploader do
|
||||
include CarrierWave::Test::Matchers
|
||||
|
||||
let_it_be(:image_jpg) { fixture_file_upload("files/800x600.jpg", "image/jpeg") }
|
||||
let_it_be(:image_png) { fixture_file_upload("files/800x600.png", "image/png") }
|
||||
let_it_be(:image_webp) { fixture_file_upload("files/800x600.webp", "image/webp") }
|
||||
let_it_be(:image_with_gps) { fixture_file_upload("files/image_gps_data.jpg", "image/jpeg") }
|
||||
let(:image_jpg) { fixture_file_upload("files/800x600.jpg", "image/jpeg") }
|
||||
let(:image_png) { fixture_file_upload("files/800x600.png", "image/png") }
|
||||
let(:image_webp) { fixture_file_upload("files/800x600.webp", "image/webp") }
|
||||
let(:image_with_gps) { fixture_file_upload("files/image_gps_data.jpg", "image/jpeg") }
|
||||
|
||||
let_it_be_changeable(:event) { create(:event) }
|
||||
let(:event) { create(:event) }
|
||||
|
||||
# we need a new uploader before each test, and since the uploader is not a model
|
||||
# we can recreate it quickly in memory with `let!`
|
||||
|
|
|
|||
|
|
@ -5,13 +5,13 @@ require "exifr/jpeg"
|
|||
describe ProfileImageUploader, type: :uploader do
|
||||
include CarrierWave::Test::Matchers
|
||||
|
||||
let_it_be(:mounted_as) { :profile_image }
|
||||
let_it_be(:image_jpg) { fixture_file_upload("files/800x600.jpg", "image/jpeg") }
|
||||
let_it_be(:image_png) { fixture_file_upload("files/800x600.png", "image/png") }
|
||||
let_it_be(:image_webp) { fixture_file_upload("files/800x600.webp", "image/webp") }
|
||||
let_it_be(:image_with_gps) { fixture_file_upload("files/image_gps_data.jpg", "image/jpeg") }
|
||||
let(:mounted_as) { :profile_image }
|
||||
let(:image_jpg) { fixture_file_upload("files/800x600.jpg", "image/jpeg") }
|
||||
let(:image_png) { fixture_file_upload("files/800x600.png", "image/png") }
|
||||
let(:image_webp) { fixture_file_upload("files/800x600.webp", "image/webp") }
|
||||
let(:image_with_gps) { fixture_file_upload("files/image_gps_data.jpg", "image/jpeg") }
|
||||
|
||||
let_it_be_changeable(:user) { create(:user) }
|
||||
let(:user) { create(:user) }
|
||||
|
||||
# we need a new uploader before each test, and since the uploader is not a model
|
||||
# we can recreate it quickly in memory with `let!`
|
||||
|
|
|
|||
|
|
@ -13,9 +13,11 @@ RSpec.describe Articles::ScoreCalcWorker, type: :worker do
|
|||
end
|
||||
|
||||
context "with article" do
|
||||
let_it_be(:article) { create(:article) }
|
||||
let_it_be(:comment) { create(:comment, commentable: article, score: 5) }
|
||||
let_it_be(:second_comment) { create(:comment, commentable: article, score: 7) }
|
||||
let(:article) { create(:article) }
|
||||
let(:comment) { create(:comment, commentable: article, score: 5) }
|
||||
let(:second_comment) { create(:comment, commentable: article, score: 7) }
|
||||
|
||||
before { [comment, second_comment] }
|
||||
|
||||
it "updates article scores", :aggregate_failures do
|
||||
allow(Article).to receive(:find_by).and_return(article)
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ RSpec.describe Articles::UpdateMainImageBackgroundHexWorker, type: :job do
|
|||
|
||||
describe "#perform" do
|
||||
context "with article" do
|
||||
let_it_be(:article) { create(:article) }
|
||||
let(:article) { create(:article) }
|
||||
|
||||
it "updates articles main image background hex" do
|
||||
color_from_image = double
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ RSpec.describe BadgeAchievements::SendEmailNotificationWorker, type: :worker do
|
|||
end
|
||||
|
||||
context "with badge achievement" do
|
||||
let_it_be(:badge_achievement) { double }
|
||||
let(:badge_achievement) { double }
|
||||
|
||||
before do
|
||||
allow(BadgeAchievement).to receive(:find_by).with(id: 1).and_return(badge_achievement)
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@ RSpec.describe Comments::CalculateScoreWorker, type: :worker do
|
|||
let(:worker) { subject }
|
||||
|
||||
context "with comment" do
|
||||
let_it_be(:article) { create(:article) }
|
||||
let_it_be(:comment) { create(:comment, commentable: article) }
|
||||
let(:article) { create(:article) }
|
||||
let(:comment) { create(:comment, commentable: article) }
|
||||
|
||||
before do
|
||||
allow(BlackBox).to receive(:comment_quality_score).and_return(7)
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@ RSpec.describe Comments::CreateFirstReactionWorker, type: :worker do
|
|||
let(:worker) { subject }
|
||||
|
||||
context "with comment" do
|
||||
let_it_be(:article) { create(:article) }
|
||||
let_it_be(:comment) { create(:comment, commentable: article) }
|
||||
let(:article) { create(:article) }
|
||||
let(:comment) { create(:comment, commentable: article) }
|
||||
|
||||
it "creates a first reaction" do
|
||||
expect do
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ RSpec.describe Comments::SendEmailNotificationWorker, type: :worker do
|
|||
end
|
||||
|
||||
context "with comment" do
|
||||
let_it_be(:comment) { double }
|
||||
let(:comment) { double }
|
||||
|
||||
before do
|
||||
allow(Comment).to receive(:find_by).with(id: 1).and_return(comment)
|
||||
|
|
|
|||
|
|
@ -2,9 +2,9 @@ require "rails_helper"
|
|||
require Rails.root.join("app/models/data_update_script.rb")
|
||||
|
||||
RSpec.describe DataUpdateWorker, type: :worker do
|
||||
let_it_be(:test_directory) { Rails.root.join("spec/support/fixtures/data_update_scripts") }
|
||||
let_it_be(:worker) { described_class.new }
|
||||
let_it_be(:statuses) { %w[working succeeded] }
|
||||
let(:test_directory) { Rails.root.join("spec/support/fixtures/data_update_scripts") }
|
||||
let(:worker) { described_class.new }
|
||||
let(:statuses) { %w[working succeeded] }
|
||||
|
||||
before do
|
||||
stub_const "DataUpdateScript::DIRECTORY", test_directory
|
||||
|
|
|
|||
|
|
@ -7,9 +7,9 @@ RSpec.describe Follows::CreateChatChannelWorker, type: :worker do
|
|||
let(:worker) { subject }
|
||||
|
||||
context "with follow" do
|
||||
let_it_be(:user) { create(:user) }
|
||||
let_it_be(:user2) { create(:user) }
|
||||
let_it_be(:follow) { create(:follow, follower: user, followable: user2) }
|
||||
let(:user) { create(:user) }
|
||||
let(:user2) { create(:user) }
|
||||
let!(:follow) { create(:follow, follower: user, followable: user2) }
|
||||
|
||||
it "creates a chat channel when mutual followers" do
|
||||
follow2 = create(:follow, follower: user2, followable: user)
|
||||
|
|
|
|||
|
|
@ -6,8 +6,8 @@ RSpec.describe Follows::SendEmailNotificationWorker, type: :worker do
|
|||
let(:mailer) { double }
|
||||
let(:message_delivery) { double }
|
||||
|
||||
let_it_be(:user) { create(:user) }
|
||||
let_it_be(:user2) { create(:user) }
|
||||
let(:user) { create(:user) }
|
||||
let(:user2) { create(:user) }
|
||||
|
||||
describe "#perform" do
|
||||
before do
|
||||
|
|
|
|||
|
|
@ -1,16 +1,30 @@
|
|||
require "rails_helper"
|
||||
|
||||
RSpec.describe Metrics::RecordDailyUsageWorker, type: :worker do
|
||||
let(:feedback_message) { create(:feedback_message, :abuse_report) }
|
||||
let(:reaction) { create(:reaction, category: "vomit", user: user, reactable: first_article) }
|
||||
let(:user) { create(:user, :trusted) }
|
||||
let(:third_article) { create(:article, score: 38, nth_published_by_author: 3, comment_score: 2) }
|
||||
let(:second_article) { create(:article, score: 5, nth_published_by_author: 2, comment_score: 0) }
|
||||
let(:first_article) { create(:article, score: 15, nth_published_by_author: 1, comment_score: 25) }
|
||||
let(:third_user) { create(:user, comments_count: 0) }
|
||||
let(:second_user) { create(:user, comments_count: 2) }
|
||||
let(:first_user) { create(:user, comments_count: 1) }
|
||||
|
||||
before do
|
||||
feedback_message
|
||||
reaction
|
||||
user
|
||||
third_article
|
||||
second_article
|
||||
first_article
|
||||
third_user
|
||||
second_user
|
||||
first_user
|
||||
end
|
||||
|
||||
include_examples "#enqueues_on_correct_queue", "low_priority", 1
|
||||
let_it_be(:first_user) { create(:user, comments_count: 1) }
|
||||
let_it_be(:second_user) { create(:user, comments_count: 2) }
|
||||
let_it_be(:third_user) { create(:user, comments_count: 0) }
|
||||
let_it_be(:first_article) { create(:article, score: 15, nth_published_by_author: 1, comment_score: 25) }
|
||||
let_it_be(:second_article) { create(:article, score: 5, nth_published_by_author: 2, comment_score: 0) }
|
||||
let_it_be(:third_article) { create(:article, score: 38, nth_published_by_author: 3, comment_score: 2) }
|
||||
let_it_be(:user) { create(:user, :trusted) }
|
||||
let_it_be(:reaction) { create(:reaction, category: "vomit", user: user, reactable: first_article) }
|
||||
let_it_be(:feedback_message) { create(:feedback_message, :abuse_report) }
|
||||
|
||||
describe "#perform" do
|
||||
before do
|
||||
allow(DatadogStatsClient).to receive(:count)
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ RSpec.describe Users::RecordFieldTestEventWorker, type: :worker do
|
|||
describe "#perform" do
|
||||
let(:worker) { subject }
|
||||
|
||||
let_it_be(:user) { create(:user) }
|
||||
let(:user) { create(:user) }
|
||||
|
||||
context "with user who is part of field test" do
|
||||
before do
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue