DEV: Allow fab! without block (#24314)

The most common thing that we do with fab! is:

    fab!(:thing) { Fabricate(:thing) }

This commit adds a shorthand for this which is just simply:

    fab!(:thing)

i.e. If you omit the block, then, by default, you'll get a `Fabricate`d object using the fabricator of the same name.
This commit is contained in:
Daniel Waterworth
2023-11-09 16:47:59 -06:00
committed by GitHub
parent d91456fd53
commit 6e161d3e75
471 changed files with 1277 additions and 1273 deletions

View File

@@ -1,7 +1,7 @@
# frozen_string_literal: true
RSpec.describe AboutSerializer do
fab!(:user) { Fabricate(:user) }
fab!(:user)
context "when login_required is enabled" do
before do

View File

@@ -1,11 +1,11 @@
# frozen_string_literal: true
describe AdminUserActionSerializer do
fab!(:user) { Fabricate(:user) }
fab!(:admin) { Fabricate(:admin) }
fab!(:user)
fab!(:admin)
let(:guardian) { Guardian.new(admin) }
fab!(:topic) { Fabricate(:topic) }
fab!(:topic)
fab!(:post) { Fabricate(:post, topic: topic) }
it "includes the slug/title/category ID for a post's deleted topic" do

View File

@@ -1,8 +1,8 @@
# frozen_string_literal: true
RSpec.describe AdminUserListSerializer do
fab!(:user) { Fabricate(:user) }
fab!(:admin) { Fabricate(:admin) }
fab!(:user)
fab!(:admin)
let(:guardian) { Guardian.new(admin) }
let(:serializer) { AdminUserListSerializer.new(user, scope: guardian, root: false) }

View File

@@ -4,7 +4,7 @@ RSpec.describe BasicGroupSerializer do
subject(:serializer) { described_class.new(group, scope: guardian, root: false) }
let(:guardian) { Guardian.new }
fab!(:group) { Fabricate(:group) }
fab!(:group)
describe "#display_name" do
describe "automatic group" do
@@ -16,7 +16,7 @@ RSpec.describe BasicGroupSerializer do
end
describe "normal group" do
fab!(:group) { Fabricate(:group) }
fab!(:group)
it "should not include the display name" do
expect(serializer.display_name).to eq(nil)
@@ -54,7 +54,7 @@ RSpec.describe BasicGroupSerializer do
end
describe "for a group user" do
fab!(:user) { Fabricate(:user) }
fab!(:user)
let(:guardian) { Guardian.new(user) }
before { group.add(user) }
@@ -77,7 +77,7 @@ RSpec.describe BasicGroupSerializer do
fab!(:group) { Fabricate(:group, members_visibility_level: Group.visibility_levels[:members]) }
describe "for a group user" do
fab!(:user) { Fabricate(:user) }
fab!(:user)
let(:guardian) { Guardian.new(user) }
before { group.add(user) }

View File

@@ -1,8 +1,8 @@
# frozen_string_literal: true
RSpec.describe BasicGroupUserSerializer do
fab!(:group) { Fabricate(:group) }
fab!(:user) { Fabricate(:user) }
fab!(:group)
fab!(:user)
before { group.add(user) }

View File

@@ -1,7 +1,7 @@
# frozen_string_literal: true
describe BasicReviewableSerializer do
fab!(:reviewable) { Fabricate(:reviewable) }
fab!(:reviewable)
subject { described_class.new(reviewable, root: false).as_json }
include_examples "basic reviewable attributes"

View File

@@ -3,7 +3,7 @@
describe BasicReviewableUserSerializer do
subject(:serializer) { described_class.new(reviewable, root: false).as_json }
fab!(:user) { Fabricate(:user) }
fab!(:user)
fab!(:reviewable) do
ReviewableUser.needs_review!(
target: user,

View File

@@ -1,7 +1,7 @@
# frozen_string_literal: true
RSpec.describe BasicUserWithStatusSerializer do
fab!(:user_status) { Fabricate(:user_status) }
fab!(:user_status)
fab!(:user) { Fabricate(:user, user_status: user_status) }
let(:serializer) { described_class.new(user, scope: Guardian.new(user), root: false) }

View File

@@ -1,9 +1,9 @@
# frozen_string_literal: true
RSpec.describe CategorySerializer do
fab!(:user) { Fabricate(:user) }
fab!(:admin) { Fabricate(:admin) }
fab!(:group) { Fabricate(:group) }
fab!(:user)
fab!(:admin)
fab!(:group)
fab!(:category) { Fabricate(:category, reviewable_by_group_id: group.id) }
it "includes the reviewable by group name if enabled" do

View File

@@ -3,7 +3,7 @@
RSpec.describe CategoryUploadSerializer do
subject(:serializer) { described_class.new(upload, root: false) }
fab!(:upload) { Fabricate(:upload) }
fab!(:upload)
it "should include width and height" do
expect(serializer.width).to eq(upload.width)

View File

@@ -1,7 +1,7 @@
# frozen_string_literal: true
RSpec.describe CurrentUserSerializer do
fab!(:user) { Fabricate(:user) }
fab!(:user)
subject(:serializer) { described_class.new(user, scope: guardian, root: false) }
let(:guardian) { Guardian.new(user) }
@@ -65,7 +65,7 @@ RSpec.describe CurrentUserSerializer do
end
describe "#muted_tag" do
fab!(:tag) { Fabricate(:tag) }
fab!(:tag)
let!(:tag_user) do
TagUser.create!(
@@ -184,7 +184,7 @@ RSpec.describe CurrentUserSerializer do
end
describe "#status" do
fab!(:user_status) { Fabricate(:user_status) }
fab!(:user_status)
fab!(:user) { Fabricate(:user, user_status: user_status) }
let(:serializer) { described_class.new(user, scope: Guardian.new(user), root: false) }
@@ -293,7 +293,7 @@ RSpec.describe CurrentUserSerializer do
include_examples "User Sidebar Serializer Attributes", described_class
describe "#sidebar_sections" do
fab!(:group) { Fabricate(:group) }
fab!(:group)
fab!(:sidebar_section) { Fabricate(:sidebar_section, user: user) }
it "eager loads sidebar_urls" do

View File

@@ -2,9 +2,9 @@
RSpec.describe DetailedUserBadgeSerializer do
describe "#topic_id and #topic_title attributes" do
fab!(:user) { Fabricate(:user) }
fab!(:admin) { Fabricate(:admin) }
fab!(:post) { Fabricate(:post) }
fab!(:user)
fab!(:admin)
fab!(:post)
fab!(:badge) { Fabricate(:badge, show_posts: true) }
fab!(:user_badge) { Fabricate(:user_badge, badge: badge, post_id: post.id) }
let(:guardian) { Guardian.new(user_badge.user) }

View File

@@ -1,7 +1,7 @@
# frozen_string_literal: true
RSpec.describe DirectoryItemSerializer do
fab!(:user) { Fabricate(:user) }
fab!(:user)
before { DirectoryItem.refresh! }

View File

@@ -1,7 +1,7 @@
# frozen_string_literal: true
RSpec.describe FoundUserSerializer do
fab!(:user) { Fabricate(:user) }
fab!(:user)
let(:serializer) { described_class.new(user, root: false) }
describe "#id" do

View File

@@ -1,7 +1,7 @@
# frozen_string_literal: true
RSpec.describe FoundUserWithStatusSerializer do
fab!(:user_status) { Fabricate(:user_status) }
fab!(:user_status)
fab!(:user) { Fabricate(:user, user_status: user_status) }
let(:serializer) { described_class.new(user, root: false) }

View File

@@ -1,8 +1,8 @@
# frozen_string_literal: true
RSpec.describe GroupShowSerializer do
fab!(:user) { Fabricate(:user) }
fab!(:group) { Fabricate(:group) }
fab!(:user)
fab!(:group)
context "with an admin user" do
fab!(:user) { Fabricate(:admin) }

View File

@@ -4,7 +4,7 @@ RSpec.describe GroupUserSerializer do
let(:serializer) { described_class.new(user, scope: Guardian.new(user), root: false) }
describe "#status" do
fab!(:user_status) { Fabricate(:user_status) }
fab!(:user_status)
fab!(:user) { Fabricate(:user, user_status: user_status) }
it "adds user status when enabled in site settings" do

View File

@@ -2,9 +2,9 @@
RSpec.describe InviteSerializer do
describe "#can_delete_invite" do
fab!(:user) { Fabricate(:user) }
fab!(:admin) { Fabricate(:admin) }
fab!(:moderator) { Fabricate(:moderator) }
fab!(:user)
fab!(:admin)
fab!(:moderator)
fab!(:invite_from_user) { Fabricate(:invite, invited_by: user) }
fab!(:invite_from_moderator) { Fabricate(:invite, invited_by: moderator) }

View File

@@ -1,6 +1,6 @@
# frozen_string_literal: true
RSpec.describe ListableTopicSerializer do
fab!(:topic) { Fabricate(:topic) }
fab!(:topic)
describe "#excerpt" do
it "can be extended by theme modifiers" do

View File

@@ -2,7 +2,7 @@
RSpec.describe NotificationSerializer do
describe "#as_json" do
fab!(:user) { Fabricate(:user) }
fab!(:user)
let(:notification) { Fabricate(:notification, user: user) }
let(:serializer) { NotificationSerializer.new(notification) }
let(:json) { serializer.as_json }

View File

@@ -1,13 +1,13 @@
# frozen_string_literal: true
RSpec.describe PostSerializer do
fab!(:post) { Fabricate(:post) }
fab!(:post)
before { Group.refresh_automatic_groups! }
context "with a post with lots of actions" do
fab!(:actor) { Fabricate(:user) }
fab!(:admin) { Fabricate(:admin) }
fab!(:admin)
let(:acted_ids) do
PostActionType.public_types.values.concat(
%i[notify_user spam].map { |k| PostActionType.types[k] },
@@ -281,8 +281,8 @@ RSpec.describe PostSerializer do
end
context "with posts when group moderation is enabled" do
fab!(:topic) { Fabricate(:topic) }
fab!(:group_user) { Fabricate(:group_user) }
fab!(:topic)
fab!(:group_user)
fab!(:post) { Fabricate(:post, topic: topic) }
before do
@@ -311,7 +311,7 @@ RSpec.describe PostSerializer do
end
context "with allow_anonymous_likes enabled" do
fab!(:user) { Fabricate(:user) }
fab!(:user)
fab!(:topic) { Fabricate(:topic, user: user) }
fab!(:post) { Fabricate(:post, topic: topic, user: topic.user) }
fab!(:anonymous_user) { Fabricate(:anonymous) }
@@ -363,7 +363,7 @@ RSpec.describe PostSerializer do
end
describe "#user_status" do
fab!(:user_status) { Fabricate(:user_status) }
fab!(:user_status)
fab!(:user) { Fabricate(:user, user_status: user_status) }
fab!(:post) { Fabricate(:post, user: user) }
let(:serializer) { described_class.new(post, scope: Guardian.new(user), root: false) }

View File

@@ -1,7 +1,7 @@
# frozen_string_literal: true
RSpec.describe ReviewableFlaggedPostSerializer do
fab!(:admin) { Fabricate(:admin) }
fab!(:admin)
it "includes the user fields for review" do
p0 = Fabricate(:post)

View File

@@ -1,7 +1,7 @@
# frozen_string_literal: true
RSpec.describe ReviewableQueuedPostSerializer do
fab!(:admin) { Fabricate(:admin) }
fab!(:admin)
describe "new topic" do
fab!(:reviewable) { Fabricate(:reviewable_queued_post_topic) }

View File

@@ -2,7 +2,7 @@
RSpec.describe ReviewableScoreSerializer do
fab!(:reviewable) { Fabricate(:reviewable_flagged_post) }
fab!(:admin) { Fabricate(:admin) }
fab!(:admin)
describe "#reason" do
context "with regular links" do

View File

@@ -2,7 +2,7 @@
RSpec.describe ReviewableSerializer do
fab!(:reviewable) { Fabricate(:reviewable_queued_post) }
fab!(:admin) { Fabricate(:admin) }
fab!(:admin)
it "serializes all the fields" do
json = described_class.new(reviewable, scope: Guardian.new(admin), root: nil).as_json

View File

@@ -1,7 +1,7 @@
# frozen_string_literal: true
RSpec.describe SingleSignOnRecordSerializer do
fab!(:user) { Fabricate(:user) }
fab!(:user)
let :sso do
SingleSignOnRecord.create!(
user_id: user.id,
@@ -12,7 +12,7 @@ RSpec.describe SingleSignOnRecordSerializer do
end
context "with an admin" do
fab!(:admin) { Fabricate(:admin) }
fab!(:admin)
let :serializer do
SingleSignOnRecordSerializer.new(sso, scope: Guardian.new(admin), root: false)
end

View File

@@ -132,7 +132,7 @@ RSpec.describe SiteSerializer do
end
describe "#anonymous_default_navigation_menu_tags" do
fab!(:user) { Fabricate(:user) }
fab!(:user)
fab!(:tag) { Fabricate(:tag, name: "dev", description: "some description") }
fab!(:tag2) { Fabricate(:tag, name: "random") }
fab!(:hidden_tag) { Fabricate(:tag, name: "secret") }
@@ -182,7 +182,7 @@ RSpec.describe SiteSerializer do
end
describe "#anonymous_sidebar_sections" do
fab!(:user) { Fabricate(:user) }
fab!(:user)
fab!(:public_sidebar_section) do
Fabricate(:sidebar_section, title: "Public section", public: true)
end
@@ -244,7 +244,7 @@ RSpec.describe SiteSerializer do
end
describe "#top_tags" do
fab!(:tag) { Fabricate(:tag) }
fab!(:tag)
describe "when tagging is not enabled" do
before { SiteSetting.tagging_enabled = false }
@@ -350,7 +350,7 @@ RSpec.describe SiteSerializer do
end
describe "#whispers_allowed_groups_names" do
fab!(:admin) { Fabricate(:admin) }
fab!(:admin)
fab!(:allowed_user) { Fabricate(:user) }
fab!(:not_allowed_user) { Fabricate(:user) }
fab!(:group1) { Fabricate(:group, name: "whisperers1", users: [allowed_user]) }

View File

@@ -1,10 +1,10 @@
# frozen_string_literal: true
RSpec.describe TagSerializer do
fab!(:user) { Fabricate(:user) }
fab!(:admin) { Fabricate(:admin) }
fab!(:tag) { Fabricate(:tag) }
fab!(:group) { Fabricate(:group) }
fab!(:user)
fab!(:admin)
fab!(:tag)
fab!(:group)
fab!(:private_category) { Fabricate(:private_category, group: group) }
fab!(:topic_in_public_category) { Fabricate(:topic, tags: [tag]) }
fab!(:topic_in_private_category) { Fabricate(:topic, category: private_category, tags: [tag]) }

View File

@@ -1,7 +1,7 @@
# frozen_string_literal: true
RSpec.describe TopicListSerializer do
fab!(:user) { Fabricate(:user) }
fab!(:user)
let(:topic) { Fabricate(:topic).tap { |t| t.allowed_user_ids = [t.user_id] } }

View File

@@ -1,7 +1,7 @@
# frozen_string_literal: true
RSpec.describe TopicTrackingStateItemSerializer do
fab!(:user) { Fabricate(:user) }
fab!(:user)
fab!(:post) { create_post }
it "serializes topic tracking state reports" do

View File

@@ -1,7 +1,7 @@
# frozen_string_literal: true
RSpec.describe TopicTrackingStateSerializer do
fab!(:user) { Fabricate(:user) }
fab!(:user)
fab!(:post) { create_post }
it "serializes topic tracking state report correctly for a normal user" do

View File

@@ -11,10 +11,10 @@ RSpec.describe TopicViewSerializer do
# Ensure no suggested ids are cached cause that can muck up suggested
use_redis_snapshotting
fab!(:topic) { Fabricate(:topic) }
fab!(:user) { Fabricate(:user) }
fab!(:topic)
fab!(:user)
fab!(:user_2) { Fabricate(:user) }
fab!(:admin) { Fabricate(:admin) }
fab!(:admin)
describe "#featured_link and #featured_link_root_domain" do
fab!(:featured_link) { "http://meta.discourse.org" }
@@ -165,7 +165,7 @@ RSpec.describe TopicViewSerializer do
describe "#suggested_group_name" do
fab!(:pm) { Fabricate(:private_message_post).topic }
fab!(:group) { Fabricate(:group) }
fab!(:group)
before { Group.refresh_automatic_groups! }
@@ -194,8 +194,8 @@ RSpec.describe TopicViewSerializer do
end
describe "when tags added to private message topics" do
fab!(:moderator) { Fabricate(:moderator) }
fab!(:tag) { Fabricate(:tag) }
fab!(:moderator)
fab!(:tag)
fab!(:pm) do
Fabricate(
:private_message_topic,
@@ -207,7 +207,7 @@ RSpec.describe TopicViewSerializer do
)
end
fab!(:group) { Fabricate(:group) }
fab!(:group)
fab!(:pm_between_reg_users) do
Fabricate(
:private_message_topic,
@@ -463,7 +463,7 @@ RSpec.describe TopicViewSerializer do
end
context "with can_edit" do
fab!(:group_user) { Fabricate(:group_user) }
fab!(:group_user)
fab!(:category) { Fabricate(:category, reviewable_by_group: group_user.group) }
fab!(:topic) { Fabricate(:topic, category: category) }
let(:user) { group_user.user }
@@ -584,7 +584,7 @@ RSpec.describe TopicViewSerializer do
describe "#requested_group_name" do
fab!(:pm) { Fabricate(:private_message_post).topic }
fab!(:group) { Fabricate(:group) }
fab!(:group)
it "should return the right group name when PM is a group membership request" do
pm.custom_fields[:requested_group_id] = group.id

View File

@@ -3,7 +3,7 @@
RSpec.describe UploadSerializer do
subject(:serializer) { UploadSerializer.new(upload, root: false) }
fab!(:upload) { Fabricate(:upload) }
fab!(:upload)
it "should render without errors" do
json_data = JSON.parse(serializer.to_json)

View File

@@ -2,9 +2,9 @@
RSpec.describe UserBadgeSerializer do
describe "#topic" do
fab!(:user) { Fabricate(:user) }
fab!(:admin) { Fabricate(:admin) }
fab!(:post) { Fabricate(:post) }
fab!(:user)
fab!(:admin)
fab!(:post)
fab!(:badge) { Fabricate(:badge, show_posts: true) }
fab!(:user_badge) { Fabricate(:user_badge, badge: badge, post_id: post.id) }
let(:guardian) { Guardian.new(user_badge.user) }

View File

@@ -1,7 +1,7 @@
# frozen_string_literal: true
RSpec.describe UserBookmarkListSerializer do
fab!(:user) { Fabricate(:user) }
fab!(:user)
context "for polymorphic bookmarks" do
before do

View File

@@ -69,7 +69,7 @@ RSpec.describe UserCardSerializer do
end
describe "#status" do
fab!(:user_status) { Fabricate(:user_status) }
fab!(:user_status)
fab!(:user) { Fabricate(:user, user_status: user_status) }
let(:serializer) { described_class.new(user, scope: Guardian.new(user), root: false) }

View File

@@ -64,10 +64,10 @@ RSpec.describe UserSerializer do
context "with a user" do
let(:admin_user) { Fabricate(:admin) }
let(:scope) { Guardian.new }
fab!(:user) { Fabricate(:user) }
fab!(:user)
let(:serializer) { UserSerializer.new(user, scope: scope, root: false) }
let(:json) { serializer.as_json }
fab!(:upload) { Fabricate(:upload) }
fab!(:upload)
fab!(:upload2) { Fabricate(:upload) }
context "when the scope user is admin" do
@@ -342,7 +342,7 @@ RSpec.describe UserSerializer do
end
context "with custom_fields" do
fab!(:user) { Fabricate(:user) }
fab!(:user)
let(:json) { UserSerializer.new(user, scope: Guardian.new, root: false).as_json }
before do
@@ -378,7 +378,7 @@ RSpec.describe UserSerializer do
end
context "with user fields" do
fab!(:user) { Fabricate(:user) }
fab!(:user)
let! :fields do
[
@@ -408,7 +408,7 @@ RSpec.describe UserSerializer do
end
context "with user_api_keys" do
fab!(:user) { Fabricate(:user) }
fab!(:user)
it "sorts keys by last used time" do
freeze_time
@@ -441,7 +441,7 @@ RSpec.describe UserSerializer do
end
context "with user_passkeys" do
fab!(:user) { Fabricate(:user) }
fab!(:user)
fab!(:passkey0) do
Fabricate(:passkey_with_random_credential, user: user, created_at: 5.hours.ago)
end

View File

@@ -1,7 +1,7 @@
# frozen_string_literal: true
RSpec.describe UserStatusSerializer do
fab!(:user) { Fabricate(:user) }
fab!(:user)
fab!(:user_status) do
Fabricate(
:user_status,

View File

@@ -1,8 +1,8 @@
# frozen_string_literal: true
RSpec.describe WebHookPostSerializer do
fab!(:admin) { Fabricate(:admin) }
fab!(:post) { Fabricate(:post) }
fab!(:admin)
fab!(:post)
def serialized_for_user(u)
WebHookPostSerializer.new(post, scope: Guardian.new(u), root: false).as_json

View File

@@ -1,8 +1,8 @@
# frozen_string_literal: true
RSpec.describe WebHookTopicViewSerializer do
fab!(:admin) { Fabricate(:admin) }
fab!(:topic) { Fabricate(:topic) }
fab!(:admin)
fab!(:topic)
let(:serializer) do
WebHookTopicViewSerializer.new(TopicView.new(topic), scope: Guardian.new(admin), root: false)

View File

@@ -7,7 +7,7 @@ RSpec.describe WebHookUserSerializer do
user
end
fab!(:admin) { Fabricate(:admin) }
fab!(:admin)
let :serializer do
WebHookUserSerializer.new(user, scope: Guardian.new(admin), root: false)