From e219588142929c74bb0ef988f35337075f35e6d0 Mon Sep 17 00:00:00 2001 From: Daniel Waterworth Date: Tue, 7 May 2019 03:12:20 +0000 Subject: [PATCH] DEV: Prefabrication (test optimization) (#7414) * Introduced fab!, a helper that creates database state for a group It's almost identical to let_it_be, except: 1. It creates a new object for each test by default, 2. You can disable it using PREFABRICATION=0 --- spec/components/admin_confirmation_spec.rb | 4 +- .../components/admin_user_index_query_spec.rb | 28 ++-- .../default_current_user_provider_spec.rb | 4 +- .../auth/facebook_authenticator_spec.rb | 4 +- .../auth/github_authenticator_spec.rb | 8 +- .../auth/google_oauth2_authenticator_spec.rb | 2 +- .../auth/instagram_authenticator_spec.rb | 2 +- .../auth/managed_authenticator_spec.rb | 18 +-- .../auth/open_id_authenticator_spec.rb | 2 +- .../auth/twitter_authenticator_spec.rb | 2 +- spec/components/avatar_lookup_spec.rb | 2 +- .../composer_messages_finder_spec.rb | 36 +++--- .../concern/category_hashtag_spec.rb | 4 +- .../concern/second_factor_manager_spec.rb | 6 +- spec/components/cooked_post_processor_spec.rb | 24 ++-- spec/components/discourse_spec.rb | 4 +- spec/components/discourse_tagging_spec.rb | 34 ++--- spec/components/email/processor_spec.rb | 8 +- spec/components/email/receiver_spec.rb | 38 +++--- spec/components/email/sender_spec.rb | 34 ++--- spec/components/file_store/base_store_spec.rb | 2 +- .../components/file_store/local_store_spec.rb | 4 +- spec/components/file_store/s3_store_spec.rb | 8 +- spec/components/filter_best_posts_spec.rb | 16 +-- spec/components/flag_query_spec.rb | 2 +- .../guardian/category_guardian_spec.rb | 4 +- .../components/guardian/user_guardian_spec.rb | 2 +- spec/components/guardian_spec.rb | 94 +++++++------- spec/components/inline_oneboxer_spec.rb | 2 +- spec/components/new_post_manager_spec.rb | 10 +- spec/components/post_action_creator_spec.rb | 4 +- spec/components/post_creator_spec.rb | 64 +++++----- spec/components/post_destroyer_spec.rb | 26 ++-- spec/components/post_locker_spec.rb | 4 +- spec/components/post_merger_spec.rb | 6 +- spec/components/post_revisor_spec.rb | 18 +-- spec/components/pretty_text_spec.rb | 10 +- spec/components/promotion_spec.rb | 6 +- spec/components/quote_comparer_spec.rb | 2 +- spec/components/rate_limiter_spec.rb | 2 +- spec/components/score_calculator_spec.rb | 4 +- .../components/site_setting_extension_spec.rb | 4 +- spec/components/stylesheet/importer_spec.rb | 10 +- .../suggested_topics_builder_spec.rb | 12 +- spec/components/system_message_spec.rb | 4 +- .../components/theme_settings_manager_spec.rb | 2 +- .../theme_store/tgz_exporter_spec.rb | 2 +- spec/components/topic_creator_spec.rb | 12 +- spec/components/topic_publisher_spec.rb | 12 +- spec/components/topic_query_spec.rb | 68 +++++----- spec/components/topic_view_spec.rb | 22 ++-- spec/components/topics_bulk_action_spec.rb | 32 ++--- .../validators/post_validator_spec.rb | 16 +-- .../validators/upload_validator_spec.rb | 6 +- .../username_setting_validator_spec.rb | 4 +- spec/components/wizard/step_updater_spec.rb | 4 +- spec/helpers/application_helper_spec.rb | 2 +- spec/import_export/category_exporter_spec.rb | 10 +- spec/import_export/topic_exporter_spec.rb | 6 +- spec/integration/category_tag_spec.rb | 58 ++++----- spec/integration/spam_rules_spec.rb | 12 +- spec/integration/user_api_keys_spec.rb | 2 +- spec/integration/watched_words_spec.rb | 10 +- spec/jobs/auto_expire_user_api_keys_spec.rb | 4 +- spec/jobs/auto_queue_handler_spec.rb | 12 +- spec/jobs/bulk_invite_spec.rb | 10 +- spec/jobs/bump_topic_spec.rb | 4 +- spec/jobs/clean_up_email_logs_spec.rb | 8 +- .../jobs/clean_up_unused_staged_users_spec.rb | 4 +- spec/jobs/delete_topic_spec.rb | 4 +- spec/jobs/disable_bootstrap_mode_spec.rb | 2 +- spec/jobs/download_avatar_from_url_spec.rb | 2 +- spec/jobs/download_backup_email_spec.rb | 2 +- ...wnload_profile_background_from_url_spec.rb | 2 +- spec/jobs/emit_web_hook_event_spec.rb | 22 ++-- spec/jobs/enable_bootstrap_mode_spec.rb | 2 +- spec/jobs/export_csv_file_spec.rb | 2 +- spec/jobs/feature_topic_users_spec.rb | 4 +- spec/jobs/ignored_users_summary_spec.rb | 6 +- spec/jobs/invalidate_inactive_admins_spec.rb | 4 +- spec/jobs/invite_email_spec.rb | 2 +- .../notify_mailing_list_subscribers_spec.rb | 10 +- spec/jobs/notify_moved_posts_spec.rb | 8 +- spec/jobs/notify_reviewable_spec.rb | 6 +- spec/jobs/poll_feed_spec.rb | 4 +- spec/jobs/process_post_spec.rb | 2 +- spec/jobs/publish_topic_to_category_spec.rb | 4 +- spec/jobs/pull_hotlinked_images_spec.rb | 2 +- spec/jobs/purge_expired_ignored_users_spec.rb | 10 +- spec/jobs/send_system_message_spec.rb | 2 +- spec/jobs/suspicious_login_spec.rb | 2 +- spec/jobs/toggle_topic_closed_spec.rb | 10 +- spec/jobs/topic_reminder_spec.rb | 4 +- spec/jobs/truncate_user_flag_stats_spec.rb | 4 +- spec/jobs/user_email_spec.rb | 24 ++-- spec/lib/upload_creator_spec.rb | 2 +- spec/lib/upload_recovery_spec.rb | 2 +- spec/mailers/invite_mailer_spec.rb | 4 +- spec/mailers/rejection_mailer_spec.rb | 2 +- spec/models/api_key_spec.rb | 2 +- spec/models/badge_spec.rb | 2 +- spec/models/category_featured_topic_spec.rb | 4 +- spec/models/category_list_spec.rb | 16 +-- spec/models/category_spec.rb | 40 +++--- spec/models/discourse_single_sign_on_spec.rb | 6 +- spec/models/draft_sequence_spec.rb | 2 +- spec/models/draft_spec.rb | 2 +- spec/models/email_log_spec.rb | 2 +- spec/models/email_token_spec.rb | 8 +- spec/models/embeddable_host_spec.rb | 4 +- spec/models/given_daily_like_spec.rb | 2 +- spec/models/group_history_spec.rb | 2 +- spec/models/group_spec.rb | 16 +-- spec/models/incoming_link_spec.rb | 6 +- spec/models/incoming_links_report_spec.rb | 8 +- spec/models/invite_redeemer_spec.rb | 2 +- spec/models/invite_spec.rb | 34 ++--- spec/models/javascript_cache_spec.rb | 2 +- spec/models/post_action_spec.rb | 30 ++--- spec/models/post_mover_spec.rb | 26 ++-- spec/models/post_reply_spec.rb | 6 +- spec/models/post_spec.rb | 36 +++--- spec/models/post_timing_spec.rb | 6 +- spec/models/reviewable_flagged_post_spec.rb | 6 +- spec/models/reviewable_history_spec.rb | 6 +- spec/models/reviewable_queued_post_spec.rb | 4 +- spec/models/reviewable_score_spec.rb | 20 +-- spec/models/reviewable_spec.rb | 24 ++-- spec/models/reviewable_user_spec.rb | 12 +- spec/models/screened_ip_address_spec.rb | 4 +- spec/models/search_log_spec.rb | 4 +- spec/models/tag_group_spec.rb | 30 ++--- spec/models/tag_user_spec.rb | 6 +- spec/models/theme_spec.rb | 2 +- spec/models/top_topic_spec.rb | 22 ++-- spec/models/topic_converter_spec.rb | 18 +-- spec/models/topic_embed_spec.rb | 24 ++-- spec/models/topic_link_click_spec.rb | 2 +- spec/models/topic_link_spec.rb | 12 +- spec/models/topic_list_spec.rb | 10 +- .../models/topic_participants_summary_spec.rb | 12 +- spec/models/topic_posters_summary_spec.rb | 10 +- spec/models/topic_spec.rb | 2 +- spec/models/topic_tag_spec.rb | 4 +- spec/models/topic_timer_spec.rb | 8 +- spec/models/topic_tracking_state_spec.rb | 10 +- spec/models/topic_user_spec.rb | 4 +- spec/models/trust_level3_requirements_spec.rb | 2 +- spec/models/unsubscribe_key_spec.rb | 2 +- spec/models/user_action_spec.rb | 16 +-- spec/models/user_auth_token_spec.rb | 4 +- spec/models/user_avatar_spec.rb | 4 +- spec/models/user_badge_spec.rb | 4 +- spec/models/user_export_spec.rb | 2 +- spec/models/user_history_spec.rb | 2 +- spec/models/user_option_spec.rb | 10 +- spec/models/user_profile_spec.rb | 12 +- spec/models/user_profile_view_spec.rb | 4 +- spec/models/user_spec.rb | 36 +++--- spec/models/user_stat_spec.rb | 4 +- spec/models/user_visit_spec.rb | 4 +- spec/models/web_hook_spec.rb | 8 +- spec/rails_helper.rb | 120 ++++++++++++------ spec/requests/admin/api_controller_spec.rb | 6 +- .../requests/admin/backups_controller_spec.rb | 2 +- spec/requests/admin/badges_controller_spec.rb | 4 +- .../admin/color_schemes_controller_spec.rb | 6 +- .../admin/dashboard_controller_spec.rb | 2 +- spec/requests/admin/email_controller_spec.rb | 20 +-- .../admin/email_templates_controller_spec.rb | 4 +- .../admin/embeddable_hosts_controller_spec.rb | 4 +- spec/requests/admin/emojis_controller_spec.rb | 4 +- .../admin/flagged_topics_controller_spec.rb | 6 +- spec/requests/admin/flags_controller_spec.rb | 10 +- spec/requests/admin/groups_controller_spec.rb | 12 +- .../admin/impersonate_controller_spec.rb | 6 +- .../admin/permalinks_controller_spec.rb | 2 +- .../requests/admin/reports_controller_spec.rb | 16 +-- .../screened_ip_addresses_controller_spec.rb | 2 +- spec/requests/admin/search_logs_spec.rb | 4 +- .../admin/site_settings_controller_spec.rb | 2 +- .../admin/site_texts_controller_spec.rb | 4 +- .../staff_action_logs_controller_spec.rb | 2 +- spec/requests/admin/themes_controller_spec.rb | 6 +- .../admin/user_fields_controller_spec.rb | 8 +- spec/requests/admin/users_controller_spec.rb | 40 +++--- .../admin/versions_controller_spec.rb | 2 +- .../admin/web_hooks_controller_spec.rb | 4 +- spec/requests/application_controller_spec.rb | 12 +- spec/requests/badges_controller_spec.rb | 4 +- spec/requests/composer_controller_spec.rb | 2 +- .../composer_messages_controller_spec.rb | 4 +- .../directory_items_controller_spec.rb | 10 +- spec/requests/email_controller_spec.rb | 12 +- spec/requests/export_csv_controller_spec.rb | 6 +- spec/requests/groups_controller_spec.rb | 36 +++--- .../requests/inline_onebox_controller_spec.rb | 2 +- spec/requests/invites_controller_spec.rb | 18 +-- spec/requests/metadata_controller_spec.rb | 1 + .../omniauth_callbacks_controller_spec.rb | 4 +- spec/requests/permalinks_controller_spec.rb | 4 +- spec/requests/post_actions_controller_spec.rb | 9 +- spec/requests/posts_controller_spec.rb | 84 ++++++------ .../push_notification_controller_spec.rb | 2 +- spec/requests/queued_posts_controller_spec.rb | 6 +- spec/requests/reviewables_controller_spec.rb | 32 ++--- spec/requests/search_controller_spec.rb | 2 +- spec/requests/session_controller_spec.rb | 2 +- spec/requests/static_controller_spec.rb | 2 +- spec/requests/tag_groups_controller_spec.rb | 6 +- spec/requests/tags_controller_spec.rb | 28 ++-- .../theme_javascripts_controller_spec.rb | 2 +- spec/requests/topics_controller_spec.rb | 68 +++++----- spec/requests/uploads_controller_spec.rb | 4 +- spec/requests/user_badges_controller_spec.rb | 6 +- spec/requests/users_controller_spec.rb | 78 ++++++------ spec/requests/users_email_controller_spec.rb | 12 +- .../admin_user_list_serializer_spec.rb | 10 +- .../basic_group_serializer_spec.rb | 12 +- .../basic_group_user_serializer_spec.rb | 4 +- spec/serializers/category_serializer_spec.rb | 4 +- .../category_upload_serializer_spec.rb | 2 +- .../current_user_serializer_spec.rb | 12 +- .../serializers/group_show_serializer_spec.rb | 10 +- .../post_revision_serializer_spec.rb | 10 +- spec/serializers/post_serializer_spec.rb | 6 +- ...reviewable_flagged_post_serializer_spec.rb | 2 +- .../reviewable_queued_post_serializer_spec.rb | 6 +- .../serializers/reviewable_serializer_spec.rb | 4 +- .../single_sign_on_record_serializer_spec.rb | 6 +- .../serializers/topic_list_serializer_spec.rb | 2 +- .../topic_view_posts_serializer_spec.rb | 4 +- .../serializers/topic_view_serializer_spec.rb | 6 +- spec/serializers/upload_serializer_spec.rb | 2 +- .../user_auth_token_serializer_spec.rb | 2 +- spec/serializers/user_serializer_spec.rb | 6 +- .../web_hook_post_serializer_spec.rb | 4 +- .../web_hook_topic_view_serializer_spec.rb | 4 +- .../web_hook_user_serializer_spec.rb | 2 +- .../services/anonymous_shadow_creator_spec.rb | 2 +- spec/services/badge_granter_spec.rb | 10 +- spec/services/destroy_task_spec.rb | 12 +- spec/services/flag_sockpuppets_spec.rb | 6 +- spec/services/group_action_logger_spec.rb | 6 +- spec/services/group_mentions_updater_spec.rb | 2 +- spec/services/notification_emailer_spec.rb | 4 +- spec/services/post_action_notifier_spec.rb | 12 +- spec/services/post_alerter_spec.rb | 56 ++++---- spec/services/post_owner_changer_spec.rb | 6 +- spec/services/staff_action_logger_spec.rb | 36 +++--- spec/services/topic_status_updater_spec.rb | 4 +- spec/services/user_authenticator_spec.rb | 2 +- spec/services/user_destroyer_spec.rb | 4 +- spec/services/user_merger_spec.rb | 10 +- spec/services/user_silencer_spec.rb | 6 +- spec/services/user_updater_spec.rb | 10 +- spec/services/word_watcher_spec.rb | 2 +- spec/tasks/posts_spec.rb | 4 +- 258 files changed, 1402 insertions(+), 1364 deletions(-) diff --git a/spec/components/admin_confirmation_spec.rb b/spec/components/admin_confirmation_spec.rb index a6efab96159..1c09b8f2362 100644 --- a/spec/components/admin_confirmation_spec.rb +++ b/spec/components/admin_confirmation_spec.rb @@ -5,8 +5,8 @@ require 'rails_helper' describe AdminConfirmation do - let(:admin) { Fabricate(:admin) } - let(:user) { Fabricate(:user) } + fab!(:admin) { Fabricate(:admin) } + fab!(:user) { Fabricate(:user) } describe "create_confirmation" do it "raises an error for non-admins" do diff --git a/spec/components/admin_user_index_query_spec.rb b/spec/components/admin_user_index_query_spec.rb index d2f0afd5f1b..2e23232c8a1 100644 --- a/spec/components/admin_user_index_query_spec.rb +++ b/spec/components/admin_user_index_query_spec.rb @@ -93,8 +93,8 @@ describe AdminUserIndexQuery do end describe 'with a suspected user' do - let(:user) { Fabricate(:active_user, created_at: 1.day.ago) } - let(:bot) { Fabricate(:active_user, id: -10, created_at: 1.day.ago) } + fab!(:user) { Fabricate(:active_user, created_at: 1.day.ago) } + fab!(:bot) { Fabricate(:active_user, id: -10, created_at: 1.day.ago) } it 'finds the suspected user' do bot @@ -106,8 +106,8 @@ describe AdminUserIndexQuery do describe "with a pending user" do - let!(:user) { Fabricate(:user, active: true, approved: false) } - let!(:inactive_user) { Fabricate(:user, approved: false, active: false) } + fab!(:user) { Fabricate(:user, active: true, approved: false) } + fab!(:inactive_user) { Fabricate(:user, approved: false, active: false) } it "finds the unapproved user" do query = ::AdminUserIndexQuery.new(query: 'pending') @@ -116,7 +116,7 @@ describe AdminUserIndexQuery do end context 'and a suspended pending user' do - let!(:suspended_user) { Fabricate(:user, approved: false, suspended_at: 1.hour.ago, suspended_till: 20.years.from_now) } + fab!(:suspended_user) { Fabricate(:user, approved: false, suspended_at: 1.hour.ago, suspended_till: 20.years.from_now) } it "doesn't return the suspended user" do query = ::AdminUserIndexQuery.new(query: 'pending') expect(query.find_users).not_to include(suspended_user) @@ -149,8 +149,8 @@ describe AdminUserIndexQuery do describe "with an admin user" do - let!(:user) { Fabricate(:user, admin: true) } - let!(:user2) { Fabricate(:user, admin: false) } + fab!(:user) { Fabricate(:user, admin: true) } + fab!(:user2) { Fabricate(:user, admin: false) } it "finds the admin" do query = ::AdminUserIndexQuery.new(query: 'admins') @@ -161,8 +161,8 @@ describe AdminUserIndexQuery do describe "with a moderator" do - let!(:user) { Fabricate(:user, moderator: true) } - let!(:user2) { Fabricate(:user, moderator: false) } + fab!(:user) { Fabricate(:user, moderator: true) } + fab!(:user2) { Fabricate(:user, moderator: false) } it "finds the moderator" do query = ::AdminUserIndexQuery.new(query: 'moderators') @@ -173,8 +173,8 @@ describe AdminUserIndexQuery do describe "with a silenced user" do - let!(:user) { Fabricate(:user, silenced_till: 1.year.from_now) } - let!(:user2) { Fabricate(:user) } + fab!(:user) { Fabricate(:user, silenced_till: 1.year.from_now) } + fab!(:user2) { Fabricate(:user) } it "finds the silenced user" do query = ::AdminUserIndexQuery.new(query: 'silenced') @@ -185,8 +185,8 @@ describe AdminUserIndexQuery do describe "with a staged user" do - let!(:user) { Fabricate(:user, staged: true) } - let!(:user2) { Fabricate(:user, staged: false) } + fab!(:user) { Fabricate(:user, staged: true) } + fab!(:user2) { Fabricate(:user, staged: false) } it "finds the staged user" do query = ::AdminUserIndexQuery.new(query: 'staged') @@ -256,7 +256,7 @@ describe AdminUserIndexQuery do context "by ip address fragment" do - let!(:user) { Fabricate(:user, ip_address: "117.207.94.9") } + fab!(:user) { Fabricate(:user, ip_address: "117.207.94.9") } it "matches the ip address" do query = ::AdminUserIndexQuery.new(filter: " 117.207.94.9 ") diff --git a/spec/components/auth/default_current_user_provider_spec.rb b/spec/components/auth/default_current_user_provider_spec.rb index 3027a16e86a..d6320a919d2 100644 --- a/spec/components/auth/default_current_user_provider_spec.rb +++ b/spec/components/auth/default_current_user_provider_spec.rb @@ -368,7 +368,7 @@ describe Auth::DefaultCurrentUserProvider do end describe "#current_user" do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } let(:unhashed_token) do new_provider = provider('/') @@ -605,7 +605,7 @@ describe Auth::DefaultCurrentUserProvider do end context "user api" do - let :user do + fab! :user do Fabricate(:user) end diff --git a/spec/components/auth/facebook_authenticator_spec.rb b/spec/components/auth/facebook_authenticator_spec.rb index babac8feecc..eae3e2bf21b 100644 --- a/spec/components/auth/facebook_authenticator_spec.rb +++ b/spec/components/auth/facebook_authenticator_spec.rb @@ -49,7 +49,7 @@ describe Auth::FacebookAuthenticator do end context 'description_for_user' do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } it 'returns empty string if no entry for user' do expect(authenticator.description_for_user(user)).to eq("") @@ -62,7 +62,7 @@ describe Auth::FacebookAuthenticator do end context 'revoke' do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } let(:authenticator) { Auth::FacebookAuthenticator.new } it 'raises exception if no entry for user' do diff --git a/spec/components/auth/github_authenticator_spec.rb b/spec/components/auth/github_authenticator_spec.rb index 0e7264e5c83..37c14b15464 100644 --- a/spec/components/auth/github_authenticator_spec.rb +++ b/spec/components/auth/github_authenticator_spec.rb @@ -23,7 +23,7 @@ end describe Auth::GithubAuthenticator do let(:authenticator) { described_class.new } - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } context 'after_authenticate' do let(:data) do @@ -251,7 +251,7 @@ describe Auth::GithubAuthenticator do end context 'revoke' do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } let(:authenticator) { Auth::GithubAuthenticator.new } it 'raises exception if no entry for user' do @@ -271,8 +271,8 @@ describe Auth::GithubAuthenticator do let(:job_klass) { Jobs::DownloadAvatarFromUrl } context 'when user has a custom avatar' do - let(:user_avatar) { Fabricate(:user_avatar, custom_upload: Fabricate(:upload)) } - let(:user_with_custom_avatar) { Fabricate(:user, user_avatar: user_avatar) } + fab!(:user_avatar) { Fabricate(:user_avatar, custom_upload: Fabricate(:upload)) } + fab!(:user_with_custom_avatar) { Fabricate(:user, user_avatar: user_avatar) } it 'does not enqueue a download_avatar_from_url job' do expect { diff --git a/spec/components/auth/google_oauth2_authenticator_spec.rb b/spec/components/auth/google_oauth2_authenticator_spec.rb index 19824c7535b..71bd5ccbc02 100644 --- a/spec/components/auth/google_oauth2_authenticator_spec.rb +++ b/spec/components/auth/google_oauth2_authenticator_spec.rb @@ -116,7 +116,7 @@ describe Auth::GoogleOAuth2Authenticator do end context 'revoke' do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } let(:authenticator) { Auth::GoogleOAuth2Authenticator.new } it 'raises exception if no entry for user' do diff --git a/spec/components/auth/instagram_authenticator_spec.rb b/spec/components/auth/instagram_authenticator_spec.rb index 2efd9822700..d78c632b19c 100644 --- a/spec/components/auth/instagram_authenticator_spec.rb +++ b/spec/components/auth/instagram_authenticator_spec.rb @@ -42,7 +42,7 @@ describe Auth::InstagramAuthenticator do end context 'revoke' do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } let(:authenticator) { Auth::InstagramAuthenticator.new } it 'raises exception if no entry for user' do diff --git a/spec/components/auth/managed_authenticator_spec.rb b/spec/components/auth/managed_authenticator_spec.rb index f29dd6c07b0..ea788144a65 100644 --- a/spec/components/auth/managed_authenticator_spec.rb +++ b/spec/components/auth/managed_authenticator_spec.rb @@ -54,8 +54,8 @@ describe Auth::ManagedAuthenticator do end describe 'connecting to another user account' do - let(:user1) { Fabricate(:user) } - let(:user2) { Fabricate(:user) } + fab!(:user1) { Fabricate(:user) } + fab!(:user2) { Fabricate(:user) } before { UserAssociatedAccount.create!(user: user1, provider_name: 'myauth', provider_uid: "1234") } it 'works by default' do @@ -138,7 +138,7 @@ describe Auth::ManagedAuthenticator do end describe "avatar on update" do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } let!(:associated) { UserAssociatedAccount.create!(user: user, provider_name: 'myauth', provider_uid: "1234") } it "schedules the job upon update correctly" do @@ -159,7 +159,7 @@ describe Auth::ManagedAuthenticator do end describe "profile on update" do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } let!(:associated) { UserAssociatedAccount.create!(user: user, provider_name: 'myauth', provider_uid: "1234") } it "updates the user's location and bio, unless already set" do @@ -183,7 +183,7 @@ describe Auth::ManagedAuthenticator do end describe "email update" do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } let!(:associated) { UserAssociatedAccount.create!(user: user, provider_name: 'myauth', provider_uid: "1234") } it "updates the user's email if currently invalid" do @@ -212,7 +212,7 @@ describe Auth::ManagedAuthenticator do end describe "avatar on create" do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } let!(:association) { UserAssociatedAccount.create!(provider_name: 'myauth', provider_uid: "1234") } it "doesn't schedule with no image" do @@ -229,7 +229,7 @@ describe Auth::ManagedAuthenticator do end describe "profile on create" do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } let!(:association) { UserAssociatedAccount.create!(provider_name: 'myauth', provider_uid: "1234") } it "doesn't explode without profile" do @@ -248,7 +248,7 @@ describe Auth::ManagedAuthenticator do end describe 'description_for_user' do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } it 'returns empty string if no entry for user' do expect(authenticator.description_for_user(user)).to eq("") @@ -265,7 +265,7 @@ describe Auth::ManagedAuthenticator do end describe 'revoke' do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } it 'raises exception if no entry for user' do expect { authenticator.revoke(user) }.to raise_error(Discourse::NotFound) diff --git a/spec/components/auth/open_id_authenticator_spec.rb b/spec/components/auth/open_id_authenticator_spec.rb index 8656b13e098..2ebf7e9ee64 100644 --- a/spec/components/auth/open_id_authenticator_spec.rb +++ b/spec/components/auth/open_id_authenticator_spec.rb @@ -38,7 +38,7 @@ describe Auth::OpenIdAuthenticator do end context 'revoke' do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } let(:authenticator) { Auth::OpenIdAuthenticator.new("test", "id", "enable_yahoo_logins", trusted: true) } it 'raises exception if no entry for user' do diff --git a/spec/components/auth/twitter_authenticator_spec.rb b/spec/components/auth/twitter_authenticator_spec.rb index 55d9e5f5498..0e99fbdc71c 100644 --- a/spec/components/auth/twitter_authenticator_spec.rb +++ b/spec/components/auth/twitter_authenticator_spec.rb @@ -54,7 +54,7 @@ describe Auth::TwitterAuthenticator do end context 'revoke' do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } let(:authenticator) { Auth::TwitterAuthenticator.new } it 'raises exception if no entry for user' do diff --git a/spec/components/avatar_lookup_spec.rb b/spec/components/avatar_lookup_spec.rb index 0a592c6ded5..33f01f5f297 100644 --- a/spec/components/avatar_lookup_spec.rb +++ b/spec/components/avatar_lookup_spec.rb @@ -5,7 +5,7 @@ require 'rails_helper' require_dependency 'avatar_lookup' describe AvatarLookup do - let!(:user) { Fabricate(:user, username: "john_doe", name: "John Doe") } + fab!(:user) { Fabricate(:user, username: "john_doe", name: "John Doe") } describe '#[]' do before do diff --git a/spec/components/composer_messages_finder_spec.rb b/spec/components/composer_messages_finder_spec.rb index ada5f1ed5d4..6b8214ea750 100644 --- a/spec/components/composer_messages_finder_spec.rb +++ b/spec/components/composer_messages_finder_spec.rb @@ -45,7 +45,7 @@ describe ComposerMessagesFinder do end context 'private message' do - let(:topic) { Fabricate(:private_message_topic) } + fab!(:topic) { Fabricate(:private_message_topic) } context 'starting a new private message' do let(:finder) { ComposerMessagesFinder.new(user, composer_action: 'createTopic', topic_id: topic.id) } @@ -104,7 +104,7 @@ describe ComposerMessagesFinder do context '.check_avatar_notification' do let(:finder) { ComposerMessagesFinder.new(user, composer_action: 'createTopic') } - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } context "success" do let!(:message) { finder.check_avatar_notification } @@ -150,8 +150,8 @@ describe ComposerMessagesFinder do end context '.check_sequential_replies' do - let(:user) { Fabricate(:user) } - let(:topic) { Fabricate(:topic) } + fab!(:user) { Fabricate(:user) } + fab!(:topic) { Fabricate(:topic) } before do SiteSetting.educate_until_posts = 10 @@ -223,8 +223,8 @@ describe ComposerMessagesFinder do end context '.check_dominating_topic' do - let(:user) { Fabricate(:user) } - let(:topic) { Fabricate(:topic) } + fab!(:user) { Fabricate(:user) } + fab!(:topic) { Fabricate(:topic) } before do SiteSetting.educate_until_posts = 10 @@ -308,21 +308,21 @@ describe ComposerMessagesFinder do end context '.check_get_a_room' do - let(:user) { Fabricate(:user) } - let(:other_user) { Fabricate(:user) } - let(:third_user) { Fabricate(:user) } - let(:topic) { Fabricate(:topic, user: other_user) } - let(:op) { Fabricate(:post, topic_id: topic.id, user: other_user) } + fab!(:user) { Fabricate(:user) } + fab!(:other_user) { Fabricate(:user) } + fab!(:third_user) { Fabricate(:user) } + fab!(:topic) { Fabricate(:topic, user: other_user) } + fab!(:op) { Fabricate(:post, topic_id: topic.id, user: other_user) } - let!(:other_user_reply) do + fab!(:other_user_reply) do Fabricate(:post, topic: topic, user: third_user, reply_to_user_id: op.user_id) end - let!(:first_reply) do + fab!(:first_reply) do Fabricate(:post, topic: topic, user: user, reply_to_user_id: op.user_id) end - let!(:second_reply) do + fab!(:second_reply) do Fabricate(:post, topic: topic, user: user, reply_to_user_id: op.user_id) end @@ -424,8 +424,8 @@ describe ComposerMessagesFinder do end context '.check_reviving_old_topic' do - let(:user) { Fabricate(:user) } - let(:topic) { Fabricate(:topic) } + fab!(:user) { Fabricate(:user) } + fab!(:topic) { Fabricate(:topic) } it "does not give a message without a topic id" do expect(described_class.new(user, composer_action: 'createTopic').check_reviving_old_topic).to be_blank @@ -470,8 +470,8 @@ describe ComposerMessagesFinder do end context 'when editing a post' do - let(:user) { Fabricate(:user) } - let(:topic) { Fabricate(:post).topic } + fab!(:user) { Fabricate(:user) } + fab!(:topic) { Fabricate(:post).topic } let!(:post) do PostCreator.create!( diff --git a/spec/components/concern/category_hashtag_spec.rb b/spec/components/concern/category_hashtag_spec.rb index 29cf5579bf1..e446fc27d2f 100644 --- a/spec/components/concern/category_hashtag_spec.rb +++ b/spec/components/concern/category_hashtag_spec.rb @@ -4,8 +4,8 @@ require 'rails_helper' describe CategoryHashtag do describe '#query_from_hashtag_slug' do - let(:parent_category) { Fabricate(:category) } - let(:child_category) { Fabricate(:category, parent_category: parent_category) } + fab!(:parent_category) { Fabricate(:category) } + fab!(:child_category) { Fabricate(:category, parent_category: parent_category) } it "should return the right result for a parent category slug" do expect(Category.query_from_hashtag_slug(parent_category.slug)) diff --git a/spec/components/concern/second_factor_manager_spec.rb b/spec/components/concern/second_factor_manager_spec.rb index 9875fc166a4..2c92ec393a8 100644 --- a/spec/components/concern/second_factor_manager_spec.rb +++ b/spec/components/concern/second_factor_manager_spec.rb @@ -3,11 +3,11 @@ require 'rails_helper' RSpec.describe SecondFactorManager do - let(:user_second_factor_totp) { Fabricate(:user_second_factor_totp) } + fab!(:user_second_factor_totp) { Fabricate(:user_second_factor_totp) } let(:user) { user_second_factor_totp.user } - let(:another_user) { Fabricate(:user) } + fab!(:another_user) { Fabricate(:user) } - let(:user_second_factor_backup) { Fabricate(:user_second_factor_backup) } + fab!(:user_second_factor_backup) { Fabricate(:user_second_factor_backup) } let(:user_backup) { user_second_factor_backup.user } describe '#totp' do diff --git a/spec/components/cooked_post_processor_spec.rb b/spec/components/cooked_post_processor_spec.rb index 8e742290db0..9ec8b3472a4 100644 --- a/spec/components/cooked_post_processor_spec.rb +++ b/spec/components/cooked_post_processor_spec.rb @@ -6,13 +6,13 @@ require "file_store/s3_store" describe CookedPostProcessor do context "#post_process" do - let(:upload) do + fab!(:upload) do Fabricate(:upload, url: '/uploads/default/original/1X/1/1234567890123456.jpg' ) end - let(:post) do + fab!(:post) do Fabricate(:post, raw: <<~RAW) RAW @@ -132,9 +132,9 @@ describe CookedPostProcessor do end describe 'internal links' do - let(:topic) { Fabricate(:topic) } + fab!(:topic) { Fabricate(:topic) } + fab!(:post) { Fabricate(:post, raw: "Hello #{topic.url}") } let(:url) { topic.url } - let(:post) { Fabricate(:post, raw: "Hello #{url}") } it "includes the topic title" do cpp.post_process @@ -364,7 +364,7 @@ describe CookedPostProcessor do end context "with image_sizes" do - let(:post) { Fabricate(:post_with_image_urls) } + fab!(:post) { Fabricate(:post_with_image_urls) } let(:cpp) { CookedPostProcessor.new(post, image_sizes: image_sizes) } before do @@ -401,7 +401,7 @@ describe CookedPostProcessor do context "with unsized images" do - let(:post) { Fabricate(:post_with_unsized_images) } + fab!(:post) { Fabricate(:post_with_unsized_images) } let(:cpp) { CookedPostProcessor.new(post) } it "adds the width and height to images that don't have them" do @@ -415,8 +415,8 @@ describe CookedPostProcessor do context "with large images" do - let(:upload) { Fabricate(:upload) } - let(:post) { Fabricate(:post_with_large_image) } + fab!(:upload) { Fabricate(:upload) } + fab!(:post) { Fabricate(:post_with_large_image) } let(:cpp) { CookedPostProcessor.new(post, disable_loading_image: true) } before do @@ -463,7 +463,7 @@ describe CookedPostProcessor do end describe 'when image is an svg' do - let(:post) do + fab!(:post) do Fabricate(:post, raw: '') end @@ -552,8 +552,8 @@ describe CookedPostProcessor do context "with large images when using subfolders" do - let(:upload) { Fabricate(:upload) } - let(:post) { Fabricate(:post_with_large_image_on_subfolder) } + fab!(:upload) { Fabricate(:upload) } + fab!(:post) { Fabricate(:post_with_large_image_on_subfolder) } let(:cpp) { CookedPostProcessor.new(post, disable_loading_image: true) } let(:base_url) { "http://test.localhost/subfolder" } let(:base_uri) { "/subfolder" } @@ -1281,7 +1281,7 @@ describe CookedPostProcessor do end context "remove direct reply full quote" do - let(:topic) { Fabricate(:topic) } + fab!(:topic) { Fabricate(:topic) } let!(:post) { Fabricate(:post, topic: topic, raw: "this is the first post") } let(:raw) do diff --git a/spec/components/discourse_spec.rb b/spec/components/discourse_spec.rb index 9299e8f1eb6..391691ff9bf 100644 --- a/spec/components/discourse_spec.rb +++ b/spec/components/discourse_spec.rb @@ -111,8 +111,8 @@ describe Discourse do context '#site_contact_user' do - let!(:admin) { Fabricate(:admin) } - let!(:another_admin) { Fabricate(:admin) } + fab!(:admin) { Fabricate(:admin) } + fab!(:another_admin) { Fabricate(:admin) } it 'returns the user specified by the site setting site_contact_username' do SiteSetting.site_contact_username = another_admin.username diff --git a/spec/components/discourse_tagging_spec.rb b/spec/components/discourse_tagging_spec.rb index fdb8b1131df..39ff18920d0 100644 --- a/spec/components/discourse_tagging_spec.rb +++ b/spec/components/discourse_tagging_spec.rb @@ -8,13 +8,13 @@ require 'discourse_tagging' describe DiscourseTagging do - let(:admin) { Fabricate(:admin) } - let(:user) { Fabricate(:user) } + fab!(:admin) { Fabricate(:admin) } + fab!(:user) { Fabricate(:user) } let(:guardian) { Guardian.new(user) } - let!(:tag1) { Fabricate(:tag, name: "fun") } - let!(:tag2) { Fabricate(:tag, name: "fun2") } - let!(:tag3) { Fabricate(:tag, name: "Fun3") } + fab!(:tag1) { Fabricate(:tag, name: "fun") } + fab!(:tag2) { Fabricate(:tag, name: "fun2") } + fab!(:tag3) { Fabricate(:tag, name: "Fun3") } before do SiteSetting.tagging_enabled = true @@ -42,7 +42,7 @@ describe DiscourseTagging do end context 'with tags visible only to staff' do - let(:hidden_tag) { Fabricate(:tag) } + fab!(:hidden_tag) { Fabricate(:tag) } let!(:staff_tag_group) { Fabricate(:tag_group, permissions: { "staff" => 1 }, tag_names: [hidden_tag.name]) } it 'should return all tags to staff' do @@ -61,9 +61,9 @@ describe DiscourseTagging do end describe 'filter_visible' do - let(:hidden_tag) { Fabricate(:tag) } + fab!(:hidden_tag) { Fabricate(:tag) } let!(:staff_tag_group) { Fabricate(:tag_group, permissions: { "staff" => 1 }, tag_names: [hidden_tag.name]) } - let(:topic) { Fabricate(:topic, tags: [tag1, tag2, tag3, hidden_tag]) } + fab!(:topic) { Fabricate(:topic, tags: [tag1, tag2, tag3, hidden_tag]) } it 'returns all tags to staff' do tags = DiscourseTagging.filter_visible(topic.tags, Guardian.new(admin)) @@ -89,7 +89,7 @@ describe DiscourseTagging do describe 'tag_topic_by_names' do context 'staff-only tags' do - let(:topic) { Fabricate(:topic) } + fab!(:topic) { Fabricate(:topic) } before do create_staff_tags(['alpha']) @@ -109,8 +109,8 @@ describe DiscourseTagging do end context 'respects category minimum_required_tags setting' do - let(:category) { Fabricate(:category, minimum_required_tags: 2) } - let(:topic) { Fabricate(:topic, category: category) } + fab!(:category) { Fabricate(:category, minimum_required_tags: 2) } + fab!(:topic) { Fabricate(:topic, category: category) } it 'when tags are not present' do valid = DiscourseTagging.tag_topic_by_names(topic, Guardian.new(user), []) @@ -138,10 +138,10 @@ describe DiscourseTagging do end context 'hidden tags' do - let(:hidden_tag) { Fabricate(:tag) } + fab!(:hidden_tag) { Fabricate(:tag) } let!(:staff_tag_group) { Fabricate(:tag_group, permissions: { "staff" => 1 }, tag_names: [hidden_tag.name]) } - let(:topic) { Fabricate(:topic, user: user) } - let(:post) { Fabricate(:post, user: user, topic: topic, post_number: 1) } + fab!(:topic) { Fabricate(:topic, user: user) } + fab!(:post) { Fabricate(:post, user: user, topic: topic, post_number: 1) } it 'user cannot add hidden tag by knowing its name' do expect(PostRevisor.new(post).revise!(topic.user, raw: post.raw + " edit", tags: [hidden_tag.name])).to be_falsey @@ -252,10 +252,10 @@ describe DiscourseTagging do end describe "staff_tag_names" do - let(:tag) { Fabricate(:tag) } + fab!(:tag) { Fabricate(:tag) } - let(:staff_tag) { Fabricate(:tag) } - let(:other_staff_tag) { Fabricate(:tag) } + fab!(:staff_tag) { Fabricate(:tag) } + fab!(:other_staff_tag) { Fabricate(:tag) } let!(:staff_tag_group) { Fabricate( diff --git a/spec/components/email/processor_spec.rb b/spec/components/email/processor_spec.rb index 17eb988c049..40da5e4e7e0 100644 --- a/spec/components/email/processor_spec.rb +++ b/spec/components/email/processor_spec.rb @@ -12,10 +12,10 @@ describe Email::Processor do context "when reply via email is too short" do let(:mail) { file_from_fixtures("chinese_reply.eml", "emails").read } - let(:post) { Fabricate(:post) } - let(:user) { Fabricate(:user, email: 'discourse@bar.com') } + fab!(:post) { Fabricate(:post) } + fab!(:user) { Fabricate(:user, email: 'discourse@bar.com') } - let!(:post_reply_key) do + fab!(:post_reply_key) do Fabricate(:post_reply_key, user: user, post: post, @@ -179,7 +179,7 @@ describe Email::Processor do describe 'when replying to a post that is too old' do let(:mail) { file_from_fixtures("old_destination.eml", "emails").read } - let!(:user) { Fabricate(:user, email: "discourse@bar.com") } + fab!(:user) { Fabricate(:user, email: "discourse@bar.com") } it 'rejects the email with the right response' do SiteSetting.disallow_reply_by_email_after_days = 2 diff --git a/spec/components/email/receiver_spec.rb b/spec/components/email/receiver_spec.rb index 71d57a8f6d2..a834f7cd100 100644 --- a/spec/components/email/receiver_spec.rb +++ b/spec/components/email/receiver_spec.rb @@ -119,8 +119,8 @@ describe Email::Receiver do describe "creating whisper post in PMs for staged users" do let(:email_address) { "linux-admin@b-s-c.co.jp" } - let(:user1) { user1 = Fabricate(:user) } - let(:user2) { user2 = Fabricate(:staged, email: email_address) } + fab!(:user1) { Fabricate(:user) } + let(:user2) { Fabricate(:staged, email: email_address) } let(:topic) { Fabricate(:topic, archetype: 'private_message', category_id: nil, user: user1, allowed_users: [user1, user2]) } let(:post) { create_post(topic: topic, user: user1) } @@ -186,7 +186,7 @@ describe Email::Receiver do let(:bounce_key) { "14b08c855160d67f2e0c2f8ef36e251e" } let(:bounce_key_2) { "b542fb5a9bacda6d28cc061d18e4eb83" } - let!(:user) { Fabricate(:user, email: "linux-admin@b-s-c.co.jp") } + fab!(:user) { Fabricate(:user, email: "linux-admin@b-s-c.co.jp") } let!(:email_log) { Fabricate(:email_log, to_address: user.email, user: user, bounce_key: bounce_key) } let!(:email_log_2) { Fabricate(:email_log, to_address: user.email, user: user, bounce_key: bounce_key_2) } @@ -251,10 +251,10 @@ describe Email::Receiver do context "reply" do let(:reply_key) { "4f97315cc828096c9cb34c6f1a0d6fe8" } - let(:category) { Fabricate(:category) } - let(:user) { Fabricate(:user, email: "discourse@bar.com") } - let(:topic) { create_topic(category: category, user: user) } - let(:post) { create_post(topic: topic) } + fab!(:category) { Fabricate(:category) } + fab!(:user) { Fabricate(:user, email: "discourse@bar.com") } + fab!(:topic) { create_topic(category: category, user: user) } + fab!(:post) { create_post(topic: topic) } let!(:post_reply_key) do Fabricate(:post_reply_key, @@ -661,7 +661,7 @@ describe Email::Receiver do context "new message to a group" do - let!(:group) { Fabricate(:group, incoming_email: "team@bar.com|meat@bar.com") } + fab!(:group) { Fabricate(:group, incoming_email: "team@bar.com|meat@bar.com") } it "handles encoded display names" do expect { process(:encoded_display_name) }.to change(Topic, :count) @@ -833,7 +833,7 @@ describe Email::Receiver do context "new topic in a category" do - let!(:category) { Fabricate(:category, email_in: "category@bar.com|category@foo.com", email_in_allow_strangers: false) } + fab!(:category) { Fabricate(:category, email_in: "category@bar.com|category@foo.com", email_in_allow_strangers: false) } it "raises a StrangersNotAllowedError when 'email_in_allow_strangers' is disabled" do expect { process(:new_user) }.to raise_error(Email::Receiver::StrangersNotAllowedError) @@ -960,7 +960,7 @@ describe Email::Receiver do context "new topic in a category that allows strangers" do - let!(:category) { Fabricate(:category, email_in: "category@bar.com|category@foo.com", email_in_allow_strangers: true) } + fab!(:category) { Fabricate(:category, email_in: "category@bar.com|category@foo.com", email_in_allow_strangers: true) } it "lets an email in from a stranger" do expect { process(:new_user) }.to change(Topic, :count) @@ -1128,13 +1128,13 @@ describe Email::Receiver do context "when email is sent to category" do context "when email is sent by a new user and category does not allow strangers" do - let!(:category) { Fabricate(:category, email_in: "category@foo.com", email_in_allow_strangers: false) } + fab!(:category) { Fabricate(:category, email_in: "category@foo.com", email_in_allow_strangers: false) } include_examples "does not create staged users", :new_user, Email::Receiver::StrangersNotAllowedError end context "when email has no date" do - let!(:category) { Fabricate(:category, email_in: "category@foo.com", email_in_allow_strangers: true) } + fab!(:category) { Fabricate(:category, email_in: "category@foo.com", email_in_allow_strangers: true) } it "includes the translated string in the error" do expect { process(:no_date) }.to raise_error(Email::Receiver::InvalidPost).with_message(I18n.t("system_messages.email_reject_invalid_post_specified.date_invalid")) @@ -1146,11 +1146,11 @@ describe Email::Receiver do context "email is a reply" do let(:reply_key) { "4f97315cc828096c9cb34c6f1a0d6fe8" } - let(:category) { Fabricate(:category) } - let(:user) { Fabricate(:user, email: "discourse@bar.com") } - let!(:user2) { Fabricate(:user, email: "someone_else@bar.com") } - let(:topic) { create_topic(category: category, user: user) } - let(:post) { create_post(topic: topic, user: user) } + fab!(:category) { Fabricate(:category) } + fab!(:user) { Fabricate(:user, email: "discourse@bar.com") } + fab!(:user2) { Fabricate(:user, email: "someone_else@bar.com") } + fab!(:topic) { create_topic(category: category, user: user) } + fab!(:post) { create_post(topic: topic, user: user) } let!(:post_reply_key) do Fabricate(:post_reply_key, reply_key: reply_key, user: user, post: post) @@ -1162,7 +1162,7 @@ describe Email::Receiver do end context "replying without key is allowed" do - let!(:group) { Fabricate(:group, incoming_email: "team@bar.com") } + fab!(:group) { Fabricate(:group, incoming_email: "team@bar.com") } let!(:topic) do SiteSetting.find_related_post_with_key = false process(:email_reply_1) @@ -1202,7 +1202,7 @@ describe Email::Receiver do end context "mailing list mirror" do - let!(:category) { Fabricate(:mailinglist_mirror_category) } + fab!(:category) { Fabricate(:mailinglist_mirror_category) } before do SiteSetting.block_auto_generated_emails = true diff --git a/spec/components/email/sender_spec.rb b/spec/components/email/sender_spec.rb index 0ea9d5058b4..995014f5c19 100644 --- a/spec/components/email/sender_spec.rb +++ b/spec/components/email/sender_spec.rb @@ -4,11 +4,11 @@ require 'rails_helper' require 'email/sender' describe Email::Sender do - let(:post) { Fabricate(:post) } + fab!(:post) { Fabricate(:post) } context "disable_emails is enabled" do - let(:user) { Fabricate(:user) } - let(:moderator) { Fabricate(:moderator) } + fab!(:user) { Fabricate(:user) } + fab!(:moderator) { Fabricate(:moderator) } context "disable_emails is enabled for everyone" do before { SiteSetting.disable_emails = "yes" } @@ -138,9 +138,9 @@ describe Email::Sender do end context "adds a List-ID header to identify the forum" do - let(:category) { Fabricate(:category, name: 'Name With Space') } - let(:topic) { Fabricate(:topic, category: category) } - let(:post) { Fabricate(:post, topic: topic) } + fab!(:category) { Fabricate(:category, name: 'Name With Space') } + fab!(:topic) { Fabricate(:topic, category: category) } + fab!(:post) { Fabricate(:post, topic: topic) } before do message.header['X-Discourse-Post-Id'] = post.id @@ -165,8 +165,8 @@ describe Email::Sender do end context "adds Precedence header" do - let(:topic) { Fabricate(:topic) } - let(:post) { Fabricate(:post, topic: topic) } + fab!(:topic) { Fabricate(:topic) } + fab!(:post) { Fabricate(:post, topic: topic) } before do message.header['X-Discourse-Post-Id'] = post.id @@ -180,8 +180,8 @@ describe Email::Sender do end context "removes custom Discourse headers from topic notification mails" do - let(:topic) { Fabricate(:topic) } - let(:post) { Fabricate(:post, topic: topic) } + fab!(:topic) { Fabricate(:topic) } + fab!(:post) { Fabricate(:post, topic: topic) } before do message.header['X-Discourse-Post-Id'] = post.id @@ -206,12 +206,12 @@ describe Email::Sender do end context "email threading" do - let(:topic) { Fabricate(:topic) } + fab!(:topic) { Fabricate(:topic) } - let(:post_1) { Fabricate(:post, topic: topic, post_number: 1) } - let(:post_2) { Fabricate(:post, topic: topic, post_number: 2) } - let(:post_3) { Fabricate(:post, topic: topic, post_number: 3) } - let(:post_4) { Fabricate(:post, topic: topic, post_number: 4) } + fab!(:post_1) { Fabricate(:post, topic: topic, post_number: 1) } + fab!(:post_2) { Fabricate(:post, topic: topic, post_number: 2) } + fab!(:post_3) { Fabricate(:post, topic: topic, post_number: 3) } + fab!(:post_4) { Fabricate(:post, topic: topic, post_number: 4) } let!(:post_reply_1_4) { PostReply.create(post: post_1, reply: post_4) } let!(:post_reply_2_4) { PostReply.create(post: post_2, reply: post_4) } @@ -377,7 +377,7 @@ describe Email::Sender do message end - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } let(:email_sender) { Email::Sender.new(message, :valid_type, user) } before do @@ -390,7 +390,7 @@ describe Email::Sender do end describe "post reply keys" do - let(:post) { Fabricate(:post) } + fab!(:post) { Fabricate(:post) } before do message.header['X-Discourse-Post-Id'] = post.id diff --git a/spec/components/file_store/base_store_spec.rb b/spec/components/file_store/base_store_spec.rb index cf2d1036319..ac2aebd0fae 100644 --- a/spec/components/file_store/base_store_spec.rb +++ b/spec/components/file_store/base_store_spec.rb @@ -4,7 +4,7 @@ require 'rails_helper' require_dependency 'file_store/base_store' RSpec.describe FileStore::BaseStore do - let(:upload) { Fabricate(:upload, id: 9999, sha1: Digest::SHA1.hexdigest('9999')) } + fab!(:upload) { Fabricate(:upload, id: 9999, sha1: Digest::SHA1.hexdigest('9999')) } describe '#get_path_for_upload' do it 'should return the right path' do diff --git a/spec/components/file_store/local_store_spec.rb b/spec/components/file_store/local_store_spec.rb index 36768bb1b18..5baf22a9eb8 100644 --- a/spec/components/file_store/local_store_spec.rb +++ b/spec/components/file_store/local_store_spec.rb @@ -7,10 +7,10 @@ describe FileStore::LocalStore do let(:store) { FileStore::LocalStore.new } - let(:upload) { Fabricate(:upload) } + fab!(:upload) { Fabricate(:upload) } let(:uploaded_file) { file_from_fixtures("logo.png") } - let(:optimized_image) { Fabricate(:optimized_image) } + fab!(:optimized_image) { Fabricate(:optimized_image) } describe "#store_upload" do diff --git a/spec/components/file_store/s3_store_spec.rb b/spec/components/file_store/s3_store_spec.rb index 6bf2be7f4b5..1e497a66976 100644 --- a/spec/components/file_store/s3_store_spec.rb +++ b/spec/components/file_store/s3_store_spec.rb @@ -8,10 +8,10 @@ describe FileStore::S3Store do let(:store) { FileStore::S3Store.new } let(:s3_helper) { store.instance_variable_get(:@s3_helper) } - let(:upload) { Fabricate(:upload) } + fab!(:upload) { Fabricate(:upload) } let(:uploaded_file) { file_from_fixtures("logo.png") } - let(:optimized_image) { Fabricate(:optimized_image) } + fab!(:optimized_image) { Fabricate(:optimized_image) } let(:optimized_image_file) { file_from_fixtures("logo.png") } before(:each) do @@ -22,7 +22,7 @@ describe FileStore::S3Store do end shared_context 's3 helpers' do - let(:upload) do + fab!(:upload) do Fabricate(:upload, sha1: Digest::SHA1.hexdigest('secreet image string')) end @@ -199,7 +199,7 @@ describe FileStore::S3Store do end describe "#remove_optimized_image" do - let(:optimized_image) { Fabricate(:optimized_image, upload: upload) } + fab!(:optimized_image) { Fabricate(:optimized_image, upload: upload) } let(:image_path) do FileStore::BaseStore.new.get_path_for_optimized_image(optimized_image) diff --git a/spec/components/filter_best_posts_spec.rb b/spec/components/filter_best_posts_spec.rb index 717de9998bd..d88a359eea7 100644 --- a/spec/components/filter_best_posts_spec.rb +++ b/spec/components/filter_best_posts_spec.rb @@ -6,16 +6,16 @@ require 'topic_view' describe FilterBestPosts do - let(:topic) { Fabricate(:topic) } - let(:coding_horror) { Fabricate(:coding_horror) } - let(:first_poster) { topic.user } + fab!(:topic) { Fabricate(:topic) } + fab!(:coding_horror) { Fabricate(:coding_horror) } + fab!(:first_poster) { topic.user } - let!(:p1) { Fabricate(:post, topic: topic, user: first_poster, percent_rank: 1) } - let!(:p2) { Fabricate(:post, topic: topic, user: coding_horror, percent_rank: 0.5) } - let!(:p3) { Fabricate(:post, topic: topic, user: first_poster, percent_rank: 0) } + fab!(:p1) { Fabricate(:post, topic: topic, user: first_poster, percent_rank: 1) } + fab!(:p2) { Fabricate(:post, topic: topic, user: coding_horror, percent_rank: 0.5) } + fab!(:p3) { Fabricate(:post, topic: topic, user: first_poster, percent_rank: 0) } - let(:moderator) { Fabricate(:moderator) } - let(:admin) { Fabricate(:admin) } + fab!(:moderator) { Fabricate(:moderator) } + fab!(:admin) { Fabricate(:admin) } it "can find the best responses" do diff --git a/spec/components/flag_query_spec.rb b/spec/components/flag_query_spec.rb index babe2f22cd4..d829a958321 100644 --- a/spec/components/flag_query_spec.rb +++ b/spec/components/flag_query_spec.rb @@ -5,7 +5,7 @@ require_dependency 'flag_query' describe FlagQuery do - let(:codinghorror) { Fabricate(:coding_horror) } + fab!(:codinghorror) { Fabricate(:coding_horror) } describe "flagged_topics" do it "respects `min_score_default_visibility`" do diff --git a/spec/components/guardian/category_guardian_spec.rb b/spec/components/guardian/category_guardian_spec.rb index 5f6dac0e1f4..5443591d75f 100644 --- a/spec/components/guardian/category_guardian_spec.rb +++ b/spec/components/guardian/category_guardian_spec.rb @@ -3,9 +3,9 @@ require 'rails_helper' RSpec.describe CategoryGuardian do - let(:admin) { Fabricate(:admin) } + fab!(:admin) { Fabricate(:admin) } let(:guardian) { Guardian.new(admin) } - let(:category) { Fabricate(:category) } + fab!(:category) { Fabricate(:category) } describe '#cannot_delete_category_reason' do describe 'when category is uncategorized' do diff --git a/spec/components/guardian/user_guardian_spec.rb b/spec/components/guardian/user_guardian_spec.rb index 03939c2f39b..867a9c44c5b 100644 --- a/spec/components/guardian/user_guardian_spec.rb +++ b/spec/components/guardian/user_guardian_spec.rb @@ -116,7 +116,7 @@ describe UserGuardian do context "hidden profile" do # Mixing Fabricate.build() and Fabricate() could cause ID clashes, so override :user - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } let(:hidden_user) do result = Fabricate(:user) diff --git a/spec/components/guardian_spec.rb b/spec/components/guardian_spec.rb index d5f7d7f1497..2a25eb5e1ab 100644 --- a/spec/components/guardian_spec.rb +++ b/spec/components/guardian_spec.rb @@ -8,10 +8,10 @@ require_dependency 'post_locker' describe Guardian do - let(:user) { Fabricate(:user) } - let(:moderator) { Fabricate(:moderator) } - let(:admin) { Fabricate(:admin) } - let(:anonymous_user) { Fabricate(:anonymous) } + fab!(:user) { Fabricate(:user) } + fab!(:moderator) { Fabricate(:moderator) } + fab!(:admin) { Fabricate(:admin) } + fab!(:anonymous_user) { Fabricate(:anonymous) } let(:trust_level_1) { build(:user, trust_level: 1) } let(:trust_level_2) { build(:user, trust_level: 2) } let(:trust_level_3) { build(:user, trust_level: 3) } @@ -132,7 +132,7 @@ describe Guardian do end describe 'when allow_flagging_staff is false' do - let(:staff_post) { Fabricate(:post, user: Fabricate(:moderator)) } + fab!(:staff_post) { Fabricate(:post, user: Fabricate(:moderator)) } before do SiteSetting.allow_flagging_staff = false @@ -250,9 +250,9 @@ describe Guardian do end describe 'can_send_private_message' do - let(:user) { Fabricate(:user) } - let(:another_user) { Fabricate(:user) } - let(:suspended_user) { Fabricate(:user, suspended_till: 1.week.from_now, suspended_at: 1.day.ago) } + fab!(:user) { Fabricate(:user) } + fab!(:another_user) { Fabricate(:user) } + fab!(:suspended_user) { Fabricate(:user, suspended_till: 1.week.from_now, suspended_at: 1.day.ago) } it "returns false when the user is nil" do expect(Guardian.new(nil).can_send_private_message?(user)).to be_falsey @@ -371,9 +371,9 @@ describe Guardian do end describe 'can_reply_as_new_topic' do - let(:user) { Fabricate(:user) } - let(:topic) { Fabricate(:topic) } - let(:private_message) { Fabricate(:private_message_topic) } + fab!(:user) { Fabricate(:user) } + fab!(:topic) { Fabricate(:topic) } + fab!(:private_message) { Fabricate(:private_message_topic) } it "returns false for a non logged in user" do expect(Guardian.new(nil).can_reply_as_new_topic?(topic)).to be_falsey @@ -478,8 +478,8 @@ describe Guardian do end context 'with groups' do - let(:group) { Fabricate(:group) } - let(:another_group) { Fabricate(:group) } + fab!(:group) { Fabricate(:group) } + fab!(:another_group) { Fabricate(:group) } let(:groups) { [group, another_group] } before do @@ -505,17 +505,17 @@ describe Guardian do describe 'can_invite_to?' do describe "regular topics" do - let(:group) { Fabricate(:group) } - let(:category) { Fabricate(:category, read_restricted: true) } - let(:topic) { Fabricate(:topic) } - let(:private_topic) { Fabricate(:topic, category: category) } - let(:user) { topic.user } - let(:moderator) { Fabricate(:moderator) } - let(:admin) { Fabricate(:admin) } + fab!(:group) { Fabricate(:group) } + fab!(:category) { Fabricate(:category, read_restricted: true) } + fab!(:topic) { Fabricate(:topic) } + fab!(:private_topic) { Fabricate(:topic, category: category) } + fab!(:user) { topic.user } + fab!(:moderator) { Fabricate(:moderator) } + fab!(:admin) { Fabricate(:admin) } let(:private_category) { Fabricate(:private_category, group: group) } let(:group_private_topic) { Fabricate(:topic, category: private_category) } let(:group_owner) { group_private_topic.user.tap { |u| group.add_owner(u) } } - let(:pm) { Fabricate(:topic) } + fab!(:pm) { Fabricate(:topic) } it 'handles invitation correctly' do expect(Guardian.new(nil).can_invite_to?(topic)).to be_falsey @@ -548,8 +548,8 @@ describe Guardian do end describe 'for a private category for automatic and non-automatic group' do - let(:automatic_group) { Fabricate(:group, automatic: true) } - let(:group) { Fabricate(:group) } + fab!(:automatic_group) { Fabricate(:group, automatic: true) } + fab!(:group) { Fabricate(:group) } let(:category) do Fabricate(:category, read_restricted: true).tap do |category| @@ -592,10 +592,10 @@ describe Guardian do end describe "private messages" do - let(:user) { Fabricate(:user, trust_level: TrustLevel[2]) } - let!(:pm) { Fabricate(:private_message_topic, user: user) } - let(:admin) { Fabricate(:admin) } - let(:moderator) { Fabricate(:moderator) } + fab!(:user) { Fabricate(:user, trust_level: TrustLevel[2]) } + fab!(:pm) { Fabricate(:private_message_topic, user: user) } + fab!(:admin) { Fabricate(:admin) } + fab!(:moderator) { Fabricate(:moderator) } context "when private messages are disabled" do it "allows an admin to invite to the pm" do @@ -796,7 +796,7 @@ describe Guardian do end describe 'a Post' do - let(:another_admin) { Fabricate(:admin) } + fab!(:another_admin) { Fabricate(:admin) } it 'correctly handles post visibility' do post = Fabricate(:post) topic = post.topic @@ -844,7 +844,7 @@ describe Guardian do end describe 'a PostRevision' do - let(:post_revision) { Fabricate(:post_revision) } + fab!(:post_revision) { Fabricate(:post_revision) } context 'edit_history_visible_to_public is true' do before { SiteSetting.edit_history_visible_to_public = true } @@ -1030,7 +1030,7 @@ describe Guardian do end context "system message" do - let(:private_message) { + fab!(:private_message) { Fabricate( :topic, archetype: Archetype.private_message, @@ -1049,7 +1049,7 @@ describe Guardian do end context "private message" do - let(:private_message) { Fabricate(:topic, archetype: Archetype.private_message, category_id: nil) } + fab!(:private_message) { Fabricate(:topic, archetype: Archetype.private_message, category_id: nil) } before { user.save! } @@ -1542,7 +1542,7 @@ describe Guardian do describe 'a Category' do - let(:category) { Fabricate(:category) } + fab!(:category) { Fabricate(:category) } it 'returns false when not logged in' do expect(Guardian.new.can_edit?(category)).to be_falsey @@ -1700,7 +1700,7 @@ describe Guardian do end context "can_delete_post_action?" do - let(:post) { Fabricate(:post) } + fab!(:post) { Fabricate(:post) } it "allows us to remove a bookmark" do pa = PostActionCreator.bookmark(user, post).post_action @@ -2138,7 +2138,7 @@ describe Guardian do end context "delete myself" do - let(:myself) { Fabricate(:user, created_at: 6.months.ago) } + fab!(:myself) { Fabricate(:user, created_at: 6.months.ago) } subject { Guardian.new(myself).can_delete_user?(myself) } it "is true to delete myself and I have never made a post" do @@ -2332,9 +2332,9 @@ describe Guardian do end context 'with title argument' do - let(:title_badge) { Fabricate(:badge, name: 'Helper', allow_title: true) } - let(:no_title_badge) { Fabricate(:badge, name: 'Writer', allow_title: false) } - let(:group) { Fabricate(:group, title: 'Groupie') } + fab!(:title_badge) { Fabricate(:badge, name: 'Helper', allow_title: true) } + fab!(:no_title_badge) { Fabricate(:badge, name: 'Writer', allow_title: false) } + fab!(:group) { Fabricate(:group, title: 'Groupie') } it 'returns true if title belongs to a badge that user has' do BadgeGranter.grant(title_badge, user) @@ -2418,7 +2418,7 @@ describe Guardian do end context 'for a new user' do - let(:target_user) { Fabricate(:user, created_at: 1.minute.ago) } + fab!(:target_user) { Fabricate(:user, created_at: 1.minute.ago) } include_examples "staff can always change usernames" it "is true for the user to change their own username" do @@ -2818,8 +2818,8 @@ describe Guardian do end describe "#allow_themes?" do - let(:theme) { Fabricate(:theme) } - let(:theme2) { Fabricate(:theme) } + let!(:theme) { Fabricate(:theme) } + let!(:theme2) { Fabricate(:theme) } it "allows staff to use any themes" do expect(Guardian.new(moderator).allow_themes?([theme.id, theme2.id])).to eq(false) @@ -3074,7 +3074,7 @@ describe Guardian do let(:uncategorized) { Category.find(SiteSetting.uncategorized_category_id) } context "uncategorized" do - let!(:link_category) { Fabricate(:link_category) } + fab!(:link_category) { Fabricate(:link_category) } it "allows featured links if uncategorized allows it" do uncategorized.topic_featured_link_allowed = true @@ -3090,8 +3090,8 @@ describe Guardian do end context 'when exist' do - let!(:category) { Fabricate(:category, topic_featured_link_allowed: false) } - let!(:link_category) { Fabricate(:link_category) } + fab!(:category) { Fabricate(:category, topic_featured_link_allowed: false) } + fab!(:link_category) { Fabricate(:link_category) } it 'returns true if the category is listed' do expect(guardian.can_edit_featured_link?(link_category.id)).to eq(true) @@ -3104,14 +3104,14 @@ describe Guardian do end context "suspension reasons" do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } it "will be shown by default" do expect(Guardian.new.can_see_suspension_reason?(user)).to eq(true) end context "with hide suspension reason enabled" do - let(:moderator) { Fabricate(:moderator) } + fab!(:moderator) { Fabricate(:moderator) } before do SiteSetting.hide_suspension_reasons = true @@ -3140,8 +3140,8 @@ describe Guardian do end context 'normal user' do - let(:topic) { Fabricate(:topic, user: Fabricate(:user)) } - let(:another_user) { Fabricate(:user) } + fab!(:topic) { Fabricate(:topic, user: Fabricate(:user)) } + fab!(:another_user) { Fabricate(:user) } before do topic.allowed_users << user diff --git a/spec/components/inline_oneboxer_spec.rb b/spec/components/inline_oneboxer_spec.rb index a7f81fd15bc..d9bb7ebbf32 100644 --- a/spec/components/inline_oneboxer_spec.rb +++ b/spec/components/inline_oneboxer_spec.rb @@ -24,7 +24,7 @@ describe InlineOneboxer do end context "caching" do - let(:topic) { Fabricate(:topic) } + fab!(:topic) { Fabricate(:topic) } before do InlineOneboxer.purge(topic.url) diff --git a/spec/components/new_post_manager_spec.rb b/spec/components/new_post_manager_spec.rb index be0a4f276a1..1a82f4a112c 100644 --- a/spec/components/new_post_manager_spec.rb +++ b/spec/components/new_post_manager_spec.rb @@ -5,7 +5,7 @@ require 'new_post_manager' describe NewPostManager do - let(:topic) { Fabricate(:topic) } + fab!(:topic) { Fabricate(:topic) } context "default action" do it "creates the post by default" do @@ -20,7 +20,7 @@ describe NewPostManager do end context "default action" do - let(:other_user) { Fabricate(:user) } + fab!(:other_user) { Fabricate(:user) } it "doesn't enqueue private messages" do SiteSetting.approve_unless_trust_level = 4 @@ -355,8 +355,8 @@ describe NewPostManager do end context 'when posting in the category requires approval' do - let(:user) { Fabricate(:user) } - let(:category) { Fabricate(:category) } + fab!(:user) { Fabricate(:user) } + fab!(:category) { Fabricate(:category) } context 'when new topics require approval' do before do @@ -379,7 +379,7 @@ describe NewPostManager do end context 'when new posts require approval' do - let(:topic) { Fabricate(:topic, category: category) } + fab!(:topic) { Fabricate(:topic, category: category) } before do category.custom_fields[Category::REQUIRE_REPLY_APPROVAL] = true diff --git a/spec/components/post_action_creator_spec.rb b/spec/components/post_action_creator_spec.rb index c5bf19b6ea5..ab0d2d8c8df 100644 --- a/spec/components/post_action_creator_spec.rb +++ b/spec/components/post_action_creator_spec.rb @@ -3,8 +3,8 @@ require 'rails_helper' describe PostActionCreator do - let(:user) { Fabricate(:user) } - let(:post) { Fabricate(:post) } + fab!(:user) { Fabricate(:user) } + fab!(:post) { Fabricate(:post) } let(:like_type_id) { PostActionType.types[:like] } describe "rate limits" do diff --git a/spec/components/post_creator_spec.rb b/spec/components/post_creator_spec.rb index d1f97bbb058..90dcaf3f4cf 100644 --- a/spec/components/post_creator_spec.rb +++ b/spec/components/post_creator_spec.rb @@ -6,11 +6,11 @@ require 'topic_subtype' describe PostCreator do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } let(:topic) { Fabricate(:topic, user: user) } context "new topic" do - let(:category) { Fabricate(:category, user: user) } + fab!(:category) { Fabricate(:category, user: user) } let(:basic_topic_params) { { title: "hello world topic", raw: "my name is fred", archetype_id: 1 } } let(:image_sizes) { { 'http://an.image.host/image.jpg' => { "width" => 111, "height" => 222 } } } @@ -350,7 +350,7 @@ describe PostCreator do end describe "topic's auto close based on last post" do - let(:topic_timer) do + fab!(:topic_timer) do Fabricate(:topic_timer, based_on_last_post: true, execute_at: Time.zone.now - 12.hours, @@ -360,8 +360,8 @@ describe PostCreator do let(:topic) { topic_timer.topic } - let(:post) do - Fabricate(:post, topic: topic) + fab!(:post) do + Fabricate(:post, topic: topic_timer.topic) end it "updates topic's auto close date" do @@ -475,7 +475,7 @@ describe PostCreator do end context 'whisper' do - let!(:topic) { Fabricate(:topic, user: user) } + fab!(:topic) { Fabricate(:topic, user: user) } it 'whispers do not mess up the public view' do first = PostCreator.new(user, @@ -544,7 +544,7 @@ describe PostCreator do context 'uniqueness' do - let!(:topic) { Fabricate(:topic, user: user) } + fab!(:topic) { Fabricate(:topic, user: user) } let(:basic_topic_params) { { raw: 'test reply', topic_id: topic.id, reply_to_post_number: 4 } } let(:creator) { PostCreator.new(user, basic_topic_params) } @@ -606,7 +606,7 @@ describe PostCreator do context "host spam" do - let!(:topic) { Fabricate(:topic, user: user) } + fab!(:topic) { Fabricate(:topic, user: user) } let(:basic_topic_params) { { raw: 'test reply', topic_id: topic.id, reply_to_post_number: 4 } } let(:creator) { PostCreator.new(user, basic_topic_params) } @@ -633,7 +633,7 @@ describe PostCreator do # more integration testing ... maximise our testing context 'existing topic' do - let(:topic) { Fabricate(:topic, user: user, title: 'topic title with 25 chars') } + fab!(:topic) { Fabricate(:topic, user: user, title: 'topic title with 25 chars') } let(:creator) { PostCreator.new(user, raw: 'test reply', topic_id: topic.id, reply_to_post_number: 4) } it 'ensures the user can create the post' do @@ -686,7 +686,7 @@ describe PostCreator do end context 'closed topic' do - let!(:topic) { Fabricate(:topic, user: user, closed: true) } + fab!(:topic) { Fabricate(:topic, user: user, closed: true) } let(:creator) { PostCreator.new(user, raw: 'test reply', topic_id: topic.id, reply_to_post_number: 4) } it 'responds with an error message' do @@ -698,7 +698,7 @@ describe PostCreator do end context 'missing topic' do - let!(:topic) { Fabricate(:topic, user: user, deleted_at: 5.minutes.ago) } + let(:topic) { Fabricate(:topic, user: user, deleted_at: 5.minutes.ago) } let(:creator) { PostCreator.new(user, raw: 'test reply', topic_id: topic.id, reply_to_post_number: 4) } it 'responds with an error message' do @@ -726,8 +726,8 @@ describe PostCreator do # integration test ... minimise db work context 'private message' do let(:target_user1) { Fabricate(:coding_horror) } - let(:target_user2) { Fabricate(:moderator) } - let(:unrelated) { Fabricate(:user) } + fab!(:target_user2) { Fabricate(:moderator) } + fab!(:unrelated) { Fabricate(:user) } let(:post) do PostCreator.create(user, title: 'hi there welcome to my topic', raw: "this is my awesome message @#{unrelated.username_lower}", @@ -804,7 +804,7 @@ describe PostCreator do context "warnings" do let(:target_user1) { Fabricate(:coding_horror) } - let(:target_user2) { Fabricate(:moderator) } + fab!(:target_user2) { Fabricate(:moderator) } let(:base_args) do { title: 'you need a warning buddy!', raw: "you did something bad and I'm telling you about it!", @@ -885,7 +885,7 @@ describe PostCreator do context 'private message to group' do let(:target_user1) { Fabricate(:coding_horror) } - let(:target_user2) { Fabricate(:moderator) } + fab!(:target_user2) { Fabricate(:moderator) } let(:group) do g = Fabricate.build(:group, messageable_level: Group::ALIAS_LEVELS[:everyone]) g.add(target_user1) @@ -893,7 +893,7 @@ describe PostCreator do g.save g end - let(:unrelated) { Fabricate(:user) } + fab!(:unrelated) { Fabricate(:user) } let(:post) do PostCreator.create!(user, title: 'hi there welcome to my topic', @@ -1044,7 +1044,7 @@ describe PostCreator do end context "staged users" do - let(:staged) { Fabricate(:staged) } + fab!(:staged) { Fabricate(:staged) } it "automatically watches all messages it participates in" do post = PostCreator.create(staged, @@ -1171,7 +1171,7 @@ describe PostCreator do end context 'private message to a user that has disabled private messages' do - let(:another_user) { Fabricate(:user) } + fab!(:another_user) { Fabricate(:user) } before do another_user.user_option.update!(allow_private_messages: false) @@ -1195,8 +1195,8 @@ describe PostCreator do end context "private message to a muted user" do - let(:muted_me) { Fabricate(:evil_trout) } - let(:another_user) { Fabricate(:user) } + fab!(:muted_me) { Fabricate(:evil_trout) } + fab!(:another_user) { Fabricate(:user) } it 'should fail' do updater = UserUpdater.new(muted_me, muted_me) @@ -1217,7 +1217,7 @@ describe PostCreator do ) end - let(:staff_user) { Fabricate(:admin) } + fab!(:staff_user) { Fabricate(:admin) } it 'succeeds if the user is staff' do updater = UserUpdater.new(muted_me, muted_me) @@ -1236,8 +1236,8 @@ describe PostCreator do end context "private message to an ignored user" do - let(:ignorer) { Fabricate(:evil_trout) } - let(:another_user) { Fabricate(:user) } + fab!(:ignorer) { Fabricate(:evil_trout) } + fab!(:another_user) { Fabricate(:user) } context "when post author is ignored" do let!(:ignored_user) { Fabricate(:ignored_user, user: ignorer, ignored_user: user) } @@ -1259,8 +1259,8 @@ describe PostCreator do end context "when post author is admin who is ignored" do - let(:staff_user) { Fabricate(:admin) } - let!(:ignored_user) { Fabricate(:ignored_user, user: ignorer, ignored_user: staff_user) } + fab!(:staff_user) { Fabricate(:admin) } + fab!(:ignored_user) { Fabricate(:ignored_user, user: ignorer, ignored_user: staff_user) } it 'succeeds if the user is staff' do pc = PostCreator.new( @@ -1278,9 +1278,9 @@ describe PostCreator do end context "private message recipients limit (max_allowed_message_recipients) reached" do - let(:target_user1) { Fabricate(:coding_horror) } - let(:target_user2) { Fabricate(:evil_trout) } - let(:target_user3) { Fabricate(:walter_white) } + fab!(:target_user1) { Fabricate(:coding_horror) } + fab!(:target_user2) { Fabricate(:evil_trout) } + fab!(:target_user3) { Fabricate(:walter_white) } before do SiteSetting.max_allowed_message_recipients = 2 @@ -1314,7 +1314,7 @@ describe PostCreator do end context "always succeeds if the user is staff" do - let(:staff_user) { Fabricate(:admin) } + fab!(:staff_user) { Fabricate(:admin) } it 'when sending message to multiple recipients' do pc = PostCreator.new( @@ -1331,9 +1331,9 @@ describe PostCreator do end context "#create_post_notice" do - let(:user) { Fabricate(:user) } - let(:staged) { Fabricate(:staged) } - let(:anonymous) { Fabricate(:anonymous) } + fab!(:user) { Fabricate(:user) } + fab!(:staged) { Fabricate(:staged) } + fab!(:anonymous) { Fabricate(:anonymous) } it "generates post notices for new users" do post = PostCreator.create!(user, title: "one of my first topics", raw: "one of my first posts") diff --git a/spec/components/post_destroyer_spec.rb b/spec/components/post_destroyer_spec.rb index 2ab25e8e03a..52f9d26fb75 100644 --- a/spec/components/post_destroyer_spec.rb +++ b/spec/components/post_destroyer_spec.rb @@ -9,8 +9,8 @@ describe PostDestroyer do UserActionManager.enable end - let(:moderator) { Fabricate(:moderator) } - let(:admin) { Fabricate(:admin) } + fab!(:moderator) { Fabricate(:moderator) } + fab!(:admin) { Fabricate(:admin) } let(:post) { create_post } describe "destroy_old_hidden_posts" do @@ -251,7 +251,7 @@ describe PostDestroyer do end describe "recovery and post actions" do - let(:codinghorror) { Fabricate(:coding_horror) } + fab!(:codinghorror) { Fabricate(:coding_horror) } let!(:like) { PostActionCreator.like(codinghorror, post).post_action } let!(:another_like) { PostActionCreator.like(moderator, post).post_action } @@ -436,10 +436,10 @@ describe PostDestroyer do end context 'private message' do - let(:author) { Fabricate(:user) } - let(:private_message) { Fabricate(:private_message_topic, user: author) } - let!(:first_post) { Fabricate(:post, topic: private_message, user: author) } - let!(:second_post) { Fabricate(:post, topic: private_message, user: author, post_number: 2) } + fab!(:author) { Fabricate(:user) } + fab!(:private_message) { Fabricate(:private_message_topic, user: author) } + fab!(:first_post) { Fabricate(:post, topic: private_message, user: author) } + fab!(:second_post) { Fabricate(:post, topic: private_message, user: author, post_number: 2) } it "doesn't update post_count for a reply" do expect { @@ -473,10 +473,10 @@ describe PostDestroyer do context 'deleting the second post in a topic' do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } let!(:post) { create_post(user: user) } let(:topic) { post.topic } - let(:second_user) { Fabricate(:coding_horror) } + fab!(:second_user) { Fabricate(:coding_horror) } let!(:second_post) { create_post(topic: topic, user: second_user) } before do @@ -613,8 +613,8 @@ describe PostDestroyer do describe 'after delete' do - let!(:coding_horror) { Fabricate(:coding_horror) } - let!(:post) { Fabricate(:post, raw: "Hello @CodingHorror") } + fab!(:coding_horror) { Fabricate(:coding_horror) } + fab!(:post) { Fabricate(:post, raw: "Hello @CodingHorror") } it "should feature the users again (in case they've changed)" do Jobs.expects(:enqueue).with(:feature_topic_users, has_entries(topic_id: post.topic_id)) @@ -623,7 +623,7 @@ describe PostDestroyer do describe 'with a reply' do - let!(:reply) { Fabricate(:basic_reply, user: coding_horror, topic: post.topic) } + fab!(:reply) { Fabricate(:basic_reply, user: coding_horror, topic: post.topic) } let!(:post_reply) { PostReply.create(post_id: post.id, reply_id: reply.id) } it 'changes the post count of the topic' do @@ -766,7 +766,7 @@ describe PostDestroyer do end describe 'topic links' do - let!(:first_post) { Fabricate(:post) } + fab!(:first_post) { Fabricate(:post) } let!(:topic) { first_post.topic } let!(:second_post) { Fabricate(:post_with_external_links, topic: topic) } diff --git a/spec/components/post_locker_spec.rb b/spec/components/post_locker_spec.rb index 471500c97a4..9696d39c56e 100644 --- a/spec/components/post_locker_spec.rb +++ b/spec/components/post_locker_spec.rb @@ -4,8 +4,8 @@ require 'rails_helper' require_dependency 'post_locker' describe PostLocker do - let(:moderator) { Fabricate(:moderator) } - let(:post) { Fabricate(:post) } + fab!(:moderator) { Fabricate(:moderator) } + fab!(:post) { Fabricate(:post) } it "doesn't allow regular users to lock posts" do expect { diff --git a/spec/components/post_merger_spec.rb b/spec/components/post_merger_spec.rb index 85324f1fb7d..08a7ffe1f87 100644 --- a/spec/components/post_merger_spec.rb +++ b/spec/components/post_merger_spec.rb @@ -4,9 +4,9 @@ require 'rails_helper' require 'post_merger' describe PostMerger do - let(:moderator) { Fabricate(:moderator) } - let(:admin) { Fabricate(:admin) } - let(:user) { Fabricate(:user) } + fab!(:moderator) { Fabricate(:moderator) } + fab!(:admin) { Fabricate(:admin) } + fab!(:user) { Fabricate(:user) } let(:post) { create_post } let(:topic) { post.topic } diff --git a/spec/components/post_revisor_spec.rb b/spec/components/post_revisor_spec.rb index e540ce99115..cdc23952eaf 100644 --- a/spec/components/post_revisor_spec.rb +++ b/spec/components/post_revisor_spec.rb @@ -5,8 +5,8 @@ require 'post_revisor' describe PostRevisor do - let(:topic) { Fabricate(:topic) } - let(:newuser) { Fabricate(:newuser) } + fab!(:topic) { Fabricate(:topic) } + fab!(:newuser) { Fabricate(:newuser) } let(:post_args) { { user: newuser, topic: topic } } context 'TopicChanges' do @@ -336,7 +336,7 @@ describe PostRevisor do end describe 'rate limiter' do - let(:changed_by) { Fabricate(:coding_horror) } + fab!(:changed_by) { Fabricate(:coding_horror) } it "triggers a rate limiter" do EditRateLimiter.any_instance.expects(:performed!) @@ -345,7 +345,7 @@ describe PostRevisor do end describe "admin editing a new user's post" do - let(:changed_by) { Fabricate(:admin) } + fab!(:changed_by) { Fabricate(:admin) } before do SiteSetting.newuser_max_images = 0 @@ -383,7 +383,7 @@ describe PostRevisor do SiteSetting.editing_grace_period_max_diff = 1000 end - let(:changed_by) { Fabricate(:coding_horror) } + fab!(:changed_by) { Fabricate(:coding_horror) } let!(:result) { subject.revise!(changed_by, raw: "lets update the body. Здравствуйте") } it 'correctly updates raw' do @@ -466,7 +466,7 @@ describe PostRevisor do end context "logging staff edits" do - let(:moderator) { Fabricate(:moderator) } + fab!(:moderator) { Fabricate(:moderator) } it "doesn't log when a regular user revises a post" do subject.revise!( @@ -513,7 +513,7 @@ describe PostRevisor do context "staff_edit_locks_post" do context "disabled" do - let(:moderator) { Fabricate(:moderator) } + fab!(:moderator) { Fabricate(:moderator) } before do SiteSetting.staff_edit_locks_post = false @@ -532,7 +532,7 @@ describe PostRevisor do end context "enabled" do - let(:moderator) { Fabricate(:moderator) } + fab!(:moderator) { Fabricate(:moderator) } before do SiteSetting.staff_edit_locks_post = true @@ -607,7 +607,7 @@ describe PostRevisor do context "alerts" do - let(:mentioned_user) { Fabricate(:user) } + fab!(:mentioned_user) { Fabricate(:user) } before do Jobs.run_immediately! diff --git a/spec/components/pretty_text_spec.rb b/spec/components/pretty_text_spec.rb index 182d789d5f2..d56da1ac24b 100644 --- a/spec/components/pretty_text_spec.rb +++ b/spec/components/pretty_text_spec.rb @@ -23,7 +23,7 @@ describe PrettyText do describe "with avatar" do let(:default_avatar) { "//test.localhost/uploads/default/avatars/42d/57c/46ce7ee487/{size}.png" } - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } before do User.stubs(:default_template).returns(default_avatar) @@ -134,8 +134,8 @@ describe PrettyText do describe "with primary user group" do let(:default_avatar) { "//test.localhost/uploads/default/avatars/42d/57c/46ce7ee487/{size}.png" } - let(:group) { Fabricate(:group) } - let!(:user) { Fabricate(:user, primary_group: group) } + fab!(:group) { Fabricate(:group) } + fab!(:user) { Fabricate(:user, primary_group: group) } before do User.stubs(:default_template).returns(default_avatar) @@ -202,7 +202,7 @@ describe PrettyText do end describe "with letter avatar" do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } context "subfolder" do before do @@ -713,7 +713,7 @@ describe PrettyText do describe 'format_for_email' do let(:base_url) { "http://baseurl.net" } - let(:post) { Fabricate(:post) } + fab!(:post) { Fabricate(:post) } before do Discourse.stubs(:base_url).returns(base_url) diff --git a/spec/components/promotion_spec.rb b/spec/components/promotion_spec.rb index b4b9475dfb4..8f29ef2725b 100644 --- a/spec/components/promotion_spec.rb +++ b/spec/components/promotion_spec.rb @@ -17,7 +17,7 @@ describe Promotion do context "newuser" do - let(:user) { Fabricate(:user, trust_level: TrustLevel[0], created_at: 2.days.ago) } + fab!(:user) { Fabricate(:user, trust_level: TrustLevel[0], created_at: 2.days.ago) } let(:promotion) { Promotion.new(user) } it "doesn't raise an error with a nil user" do @@ -106,7 +106,7 @@ describe Promotion do context "basic" do - let(:user) { Fabricate(:user, trust_level: TrustLevel[1], created_at: 2.days.ago) } + fab!(:user) { Fabricate(:user, trust_level: TrustLevel[1], created_at: 2.days.ago) } let(:promotion) { Promotion.new(user) } context 'that has done nothing' do @@ -167,7 +167,7 @@ describe Promotion do end context "regular" do - let(:user) { Fabricate(:user, trust_level: TrustLevel[2]) } + fab!(:user) { Fabricate(:user, trust_level: TrustLevel[2]) } let(:promotion) { Promotion.new(user) } context "doesn't qualify for promotion" do diff --git a/spec/components/quote_comparer_spec.rb b/spec/components/quote_comparer_spec.rb index 15dbe175b06..3bacaeef617 100644 --- a/spec/components/quote_comparer_spec.rb +++ b/spec/components/quote_comparer_spec.rb @@ -6,7 +6,7 @@ require 'quote_comparer' describe QuoteComparer do describe "#modified?" do - let(:post) { Fabricate(:post, raw: "This has **text** we _are_ matching") } + fab!(:post) { Fabricate(:post, raw: "This has **text** we _are_ matching") } def qc(text) QuoteComparer.new(post.topic_id, post.post_number, text) diff --git a/spec/components/rate_limiter_spec.rb b/spec/components/rate_limiter_spec.rb index a4db789a17f..4e03d06e836 100644 --- a/spec/components/rate_limiter_spec.rb +++ b/spec/components/rate_limiter_spec.rb @@ -5,7 +5,7 @@ require 'rate_limiter' describe RateLimiter do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } let(:rate_limiter) { RateLimiter.new(user, "peppermint-butler", 2, 60) } context 'disabled' do diff --git a/spec/components/score_calculator_spec.rb b/spec/components/score_calculator_spec.rb index c74ab065945..07666eec551 100644 --- a/spec/components/score_calculator_spec.rb +++ b/spec/components/score_calculator_spec.rb @@ -5,8 +5,8 @@ require 'score_calculator' describe ScoreCalculator do - let!(:post) { Fabricate(:post, reads: 111) } - let!(:another_post) { Fabricate(:post, topic: post.topic, reads: 222) } + fab!(:post) { Fabricate(:post, reads: 111) } + fab!(:another_post) { Fabricate(:post, topic: post.topic, reads: 222) } let(:topic) { post.topic } context 'with weightings' do diff --git a/spec/components/site_setting_extension_spec.rb b/spec/components/site_setting_extension_spec.rb index f89d3c4eb9d..766048d6b1b 100644 --- a/spec/components/site_setting_extension_spec.rb +++ b/spec/components/site_setting_extension_spec.rb @@ -840,8 +840,8 @@ describe SiteSettingExtension do describe '.setup_methods' do describe 'for uploads site settings' do - let(:upload) { Fabricate(:upload) } - let(:upload2) { Fabricate(:upload) } + fab!(:upload) { Fabricate(:upload) } + fab!(:upload2) { Fabricate(:upload) } it 'should return the upload record' do settings.setting(:some_upload, upload.id.to_s, type: :upload) diff --git a/spec/components/stylesheet/importer_spec.rb b/spec/components/stylesheet/importer_spec.rb index 7c9d1353e95..8f0d8b5a4a8 100644 --- a/spec/components/stylesheet/importer_spec.rb +++ b/spec/components/stylesheet/importer_spec.rb @@ -37,15 +37,15 @@ describe Stylesheet::Importer do context "#theme_variables" do - let(:theme) { Fabricate(:theme) } + let!(:theme) { Fabricate(:theme) } let(:importer) { described_class.new(theme: theme) } - let(:upload) { Fabricate(:upload) } - let(:upload_s3) { Fabricate(:upload_s3) } + fab!(:upload) { Fabricate(:upload) } + fab!(:upload_s3) { Fabricate(:upload_s3) } - let(:theme_field) { ThemeField.create!(theme: theme, target_id: 0, name: "var", upload: upload, value: "", type_id: ThemeField.types[:theme_upload_var]) } - let(:theme_field_s3) { ThemeField.create!(theme: theme, target_id: 1, name: "var_s3", upload: upload_s3, value: "", type_id: ThemeField.types[:theme_upload_var]) } + let!(:theme_field) { ThemeField.create!(theme: theme, target_id: 0, name: "var", upload: upload, value: "", type_id: ThemeField.types[:theme_upload_var]) } + let!(:theme_field_s3) { ThemeField.create!(theme: theme, target_id: 1, name: "var_s3", upload: upload_s3, value: "", type_id: ThemeField.types[:theme_upload_var]) } it "should contain the URL" do theme_field.save! diff --git a/spec/components/suggested_topics_builder_spec.rb b/spec/components/suggested_topics_builder_spec.rb index 69264c2a5c5..ab135df796e 100644 --- a/spec/components/suggested_topics_builder_spec.rb +++ b/spec/components/suggested_topics_builder_spec.rb @@ -5,7 +5,7 @@ require 'suggested_topics_builder' describe SuggestedTopicsBuilder do - let(:topic) { Fabricate(:topic) } + fab!(:topic) { Fabricate(:topic) } let(:builder) { SuggestedTopicsBuilder.new(topic) } before do @@ -68,7 +68,7 @@ describe SuggestedTopicsBuilder do end context "adding topics" do - let!(:other_topic) { Fabricate(:topic) } + fab!(:other_topic) { Fabricate(:topic) } before do # Add all topics @@ -86,9 +86,9 @@ describe SuggestedTopicsBuilder do end context "adding topics that are not open" do - let!(:archived_topic) { Fabricate(:topic, archived: true) } - let!(:closed_topic) { Fabricate(:topic, closed: true) } - let!(:invisible_topic) { Fabricate(:topic, visible: false) } + fab!(:archived_topic) { Fabricate(:topic, archived: true) } + fab!(:closed_topic) { Fabricate(:topic, closed: true) } + fab!(:invisible_topic) { Fabricate(:topic, visible: false) } it "adds archived and closed, but not invisible topics" do builder.add_results(Topic) @@ -98,7 +98,7 @@ describe SuggestedTopicsBuilder do end context "category definition topics" do - let!(:category) { Fabricate(:category) } + fab!(:category) { Fabricate(:category) } it "doesn't add a category definition topic" do expect(category.topic_id).to be_present diff --git a/spec/components/system_message_spec.rb b/spec/components/system_message_spec.rb index 29c25c4f59e..b501fc5ebb1 100644 --- a/spec/components/system_message_spec.rb +++ b/spec/components/system_message_spec.rb @@ -8,8 +8,8 @@ describe SystemMessage do context 'send' do - let(:admin) { Fabricate(:admin) } - let(:user) { Fabricate(:user) } + fab!(:admin) { Fabricate(:admin) } + fab!(:user) { Fabricate(:user) } before do SiteSetting.site_contact_username = admin.username diff --git a/spec/components/theme_settings_manager_spec.rb b/spec/components/theme_settings_manager_spec.rb index 8dba26c3307..d66addeb3d5 100644 --- a/spec/components/theme_settings_manager_spec.rb +++ b/spec/components/theme_settings_manager_spec.rb @@ -5,7 +5,7 @@ require 'theme_settings_manager' describe ThemeSettingsManager do - let(:theme) { Fabricate(:theme) } + let!(:theme) { Fabricate(:theme) } let(:theme_settings) do yaml = File.read("#{Rails.root}/spec/fixtures/theme_settings/valid_settings.yaml") theme.set_field(target: :settings, name: "yaml", value: yaml) diff --git a/spec/components/theme_store/tgz_exporter_spec.rb b/spec/components/theme_store/tgz_exporter_spec.rb index eb2ff1afa53..5c3d08ec670 100644 --- a/spec/components/theme_store/tgz_exporter_spec.rb +++ b/spec/components/theme_store/tgz_exporter_spec.rb @@ -4,7 +4,7 @@ require 'rails_helper' require 'theme_store/tgz_exporter' describe ThemeStore::TgzExporter do - let(:theme) do + let!(:theme) do Fabricate(:theme, name: "Header Icons").tap do |theme| theme.set_field(target: :common, name: :body_tag, value: "testtheme1") theme.set_field(target: :settings, name: :yaml, value: "somesetting: test") diff --git a/spec/components/topic_creator_spec.rb b/spec/components/topic_creator_spec.rb index b3d62d7a485..cda1cb67192 100644 --- a/spec/components/topic_creator_spec.rb +++ b/spec/components/topic_creator_spec.rb @@ -4,9 +4,9 @@ require 'rails_helper' describe TopicCreator do - let(:user) { Fabricate(:user, trust_level: TrustLevel[2]) } - let(:moderator) { Fabricate(:moderator) } - let(:admin) { Fabricate(:admin) } + fab!(:user) { Fabricate(:user, trust_level: TrustLevel[2]) } + fab!(:moderator) { Fabricate(:moderator) } + fab!(:admin) { Fabricate(:admin) } let(:valid_attrs) { Fabricate.attributes_for(:topic) } let(:pm_valid_attrs) { { raw: 'this is a new post', title: 'this is a new title', archetype: Archetype.private_message, target_usernames: moderator.username } } @@ -63,8 +63,8 @@ describe TopicCreator do end context 'tags' do - let!(:tag1) { Fabricate(:tag, name: "fun") } - let!(:tag2) { Fabricate(:tag, name: "fun2") } + fab!(:tag1) { Fabricate(:tag, name: "fun") } + fab!(:tag2) { Fabricate(:tag, name: "fun2") } before do SiteSetting.tagging_enabled = true @@ -99,7 +99,7 @@ describe TopicCreator do end context 'minimum_required_tags is present' do - let!(:category) { Fabricate(:category, name: "beta", minimum_required_tags: 2) } + fab!(:category) { Fabricate(:category, name: "beta", minimum_required_tags: 2) } it "fails for regular user if minimum_required_tags is not satisfied" do expect do diff --git a/spec/components/topic_publisher_spec.rb b/spec/components/topic_publisher_spec.rb index 00a4f7b120b..c684d3de779 100644 --- a/spec/components/topic_publisher_spec.rb +++ b/spec/components/topic_publisher_spec.rb @@ -6,18 +6,18 @@ require 'rails_helper' describe TopicPublisher do context "shared drafts" do - let(:shared_drafts_category) { Fabricate(:category) } - let(:category) { Fabricate(:category) } + fab!(:shared_drafts_category) { Fabricate(:category) } + fab!(:category) { Fabricate(:category) } before do SiteSetting.shared_drafts_category = shared_drafts_category.id end context "publishing" do - let(:topic) { Fabricate(:topic, category: shared_drafts_category, visible: false) } - let(:shared_draft) { Fabricate(:shared_draft, topic: topic, category: category) } - let(:moderator) { Fabricate(:moderator) } - let(:op) { Fabricate(:post, topic: topic) } + fab!(:topic) { Fabricate(:topic, category: shared_drafts_category, visible: false) } + fab!(:shared_draft) { Fabricate(:shared_draft, topic: topic, category: category) } + fab!(:moderator) { Fabricate(:moderator) } + fab!(:op) { Fabricate(:post, topic: topic) } before do # Create a revision diff --git a/spec/components/topic_query_spec.rb b/spec/components/topic_query_spec.rb index 6ebbbe22615..75787e592c0 100644 --- a/spec/components/topic_query_spec.rb +++ b/spec/components/topic_query_spec.rb @@ -11,11 +11,11 @@ describe TopicQuery do # we should remove the let! here and use freeze time to communicate how the clock moves let!(:user) { Fabricate(:coding_horror) } - let(:creator) { Fabricate(:user) } + fab!(:creator) { Fabricate(:user) } let(:topic_query) { TopicQuery.new(user) } - let(:moderator) { Fabricate(:moderator) } - let(:admin) { Fabricate(:admin) } + fab!(:moderator) { Fabricate(:moderator) } + fab!(:admin) { Fabricate(:admin) } context 'secure category' do it "filters categories out correctly" do @@ -165,20 +165,20 @@ describe TopicQuery do end context 'tag filter' do - let(:tag) { Fabricate(:tag) } - let(:other_tag) { Fabricate(:tag) } - let(:uppercase_tag) { Fabricate(:tag, name: "HeLlO") } + fab!(:tag) { Fabricate(:tag) } + fab!(:other_tag) { Fabricate(:tag) } + fab!(:uppercase_tag) { Fabricate(:tag, name: "HeLlO") } before do SiteSetting.tagging_enabled = true end context "no category filter" do - let!(:tagged_topic1) { Fabricate(:topic, tags: [tag]) } - let!(:tagged_topic2) { Fabricate(:topic, tags: [other_tag]) } - let!(:tagged_topic3) { Fabricate(:topic, tags: [tag, other_tag]) } - let!(:tagged_topic4) { Fabricate(:topic, tags: [uppercase_tag]) } - let!(:no_tags_topic) { Fabricate(:topic) } + fab!(:tagged_topic1) { Fabricate(:topic, tags: [tag]) } + fab!(:tagged_topic2) { Fabricate(:topic, tags: [other_tag]) } + fab!(:tagged_topic3) { Fabricate(:topic, tags: [tag, other_tag]) } + fab!(:tagged_topic4) { Fabricate(:topic, tags: [uppercase_tag]) } + fab!(:no_tags_topic) { Fabricate(:topic) } it "returns topics with the tag when filtered to it" do expect(TopicQuery.new(moderator, tags: tag.name).list_latest.topics) @@ -269,7 +269,7 @@ describe TopicQuery do end context 'a bunch of topics' do - let!(:regular_topic) do + fab!(:regular_topic) do Fabricate(:topic, title: 'this is a regular topic', user: creator, views: 100, @@ -278,7 +278,7 @@ describe TopicQuery do participant_count: 11, bumped_at: 15.minutes.ago) end - let!(:pinned_topic) do + fab!(:pinned_topic) do Fabricate(:topic, title: 'this is a pinned topic', user: creator, views: 10, @@ -289,7 +289,7 @@ describe TopicQuery do pinned_globally: true, bumped_at: 10.minutes.ago) end - let!(:archived_topic) do + fab!(:archived_topic) do Fabricate(:topic, title: 'this is an archived topic', user: creator, views: 50, @@ -299,7 +299,7 @@ describe TopicQuery do participant_count: 1, bumped_at: 6.minutes.ago) end - let!(:invisible_topic) do + fab!(:invisible_topic) do Fabricate(:topic, title: 'this is an invisible topic', user: creator, views: 1, @@ -309,7 +309,7 @@ describe TopicQuery do participant_count: 3, bumped_at: 5.minutes.ago) end - let!(:closed_topic) do + fab!(:closed_topic) do Fabricate(:topic, title: 'this is a closed topic', user: creator, views: 2, @@ -319,7 +319,7 @@ describe TopicQuery do participant_count: 2, bumped_at: 1.minute.ago) end - let!(:future_topic) do + fab!(:future_topic) do Fabricate(:topic, title: 'this is a topic in far future', user: creator, views: 30, @@ -417,13 +417,13 @@ describe TopicQuery do end context 'categorized' do - let(:category) { Fabricate(:category) } + fab!(:category) { Fabricate(:category) } let(:topic_category) { category.topic } - let!(:topic_no_cat) { Fabricate(:topic) } - let!(:topic_in_cat1) { Fabricate(:topic, category: category, + fab!(:topic_no_cat) { Fabricate(:topic) } + fab!(:topic_in_cat1) { Fabricate(:topic, category: category, bumped_at: 10.minutes.ago, created_at: 10.minutes.ago) } - let!(:topic_in_cat2) { Fabricate(:topic, category: category) } + fab!(:topic_in_cat2) { Fabricate(:topic, category: category) } describe '#list_new_in_category' do it 'returns the topic category and the categorized topic' do @@ -486,8 +486,8 @@ describe TopicQuery do end context 'with read data' do - let!(:partially_read) { Fabricate(:post, user: creator).topic } - let!(:fully_read) { Fabricate(:post, user: creator).topic } + fab!(:partially_read) { Fabricate(:post, user: creator).topic } + fab!(:fully_read) { Fabricate(:post, user: creator).topic } before do TopicUser.update_last_read(user, partially_read.id, 0, 0, 0) @@ -918,7 +918,7 @@ describe TopicQuery do end describe '#list_group_topics' do - let(:group) { Fabricate(:group) } + fab!(:group) { Fabricate(:group) } let(:user) do user = Fabricate(:user) @@ -932,9 +932,9 @@ describe TopicQuery do user end - let(:user3) { Fabricate(:user) } + fab!(:user3) { Fabricate(:user) } - let(:private_category) do + fab!(:private_category) do Fabricate(:private_category, group: group) end @@ -970,7 +970,7 @@ describe TopicQuery do end describe '#list_private_messages_group' do - let(:group) { Fabricate(:group) } + fab!(:group) { Fabricate(:group) } let!(:group_message) do Fabricate(:private_message_topic, @@ -1011,13 +1011,13 @@ describe TopicQuery do end context "shared drafts" do - let(:category) { Fabricate(:category) } - let(:shared_drafts_category) { Fabricate(:category) } - let!(:topic) { Fabricate(:topic, category: shared_drafts_category) } - let!(:shared_draft) { Fabricate(:shared_draft, topic: topic, category: category) } - let(:admin) { Fabricate(:admin) } - let(:user) { Fabricate(:user) } - let(:group) { Fabricate(:group) } + fab!(:category) { Fabricate(:category) } + fab!(:shared_drafts_category) { Fabricate(:category) } + fab!(:topic) { Fabricate(:topic, category: shared_drafts_category) } + fab!(:shared_draft) { Fabricate(:shared_draft, topic: topic, category: category) } + fab!(:admin) { Fabricate(:admin) } + fab!(:user) { Fabricate(:user) } + fab!(:group) { Fabricate(:group) } before do shared_drafts_category.set_permissions(group => :full) diff --git a/spec/components/topic_view_spec.rb b/spec/components/topic_view_spec.rb index 0b03d5361ff..042c0cced46 100644 --- a/spec/components/topic_view_spec.rb +++ b/spec/components/topic_view_spec.rb @@ -6,7 +6,7 @@ require 'topic_view' describe TopicView do let(:topic) { create_topic } - let(:evil_trout) { Fabricate(:evil_trout) } + fab!(:evil_trout) { Fabricate(:evil_trout) } let(:first_poster) { topic.user } let(:topic_view) { TopicView.new(topic.id, evil_trout) } @@ -35,8 +35,8 @@ describe TopicView do context "setup_filtered_posts" do describe "filters posts with ignored users" do - let!(:user) { Fabricate(:user) } - let!(:ignored_user) { Fabricate(:ignored_user, user: evil_trout, ignored_user: user) } + fab!(:user) { Fabricate(:user) } + fab!(:ignored_user) { Fabricate(:ignored_user, user: evil_trout, ignored_user: user) } let!(:post) { Fabricate(:post, topic: topic, user: first_poster) } let!(:post2) { Fabricate(:post, topic: topic, user: evil_trout) } let!(:post3) { Fabricate(:post, topic: topic, user: user) } @@ -104,8 +104,8 @@ describe TopicView do let!(:p2) { Fabricate(:post, topic: topic, user: evil_trout, percent_rank: 0.5) } let!(:p3) { Fabricate(:post, topic: topic, user: first_poster, percent_rank: 0) } - let(:moderator) { Fabricate(:moderator) } - let(:admin) { Fabricate(:admin) } + fab!(:moderator) { Fabricate(:moderator) } + fab!(:admin) { Fabricate(:admin) } it "it can find the best responses" do @@ -167,8 +167,8 @@ describe TopicView do end context 'log_check_personal_message is enabled' do - let(:group) { Fabricate(:group) } - let(:private_message) { Fabricate(:private_message_topic, allowed_groups: [group]) } + fab!(:group) { Fabricate(:group) } + fab!(:private_message) { Fabricate(:private_message_topic, allowed_groups: [group]) } before do SiteSetting.log_personal_messages_views = true @@ -232,8 +232,8 @@ describe TopicView do end describe "#get_canonical_path" do - let(:user) { Fabricate(:user) } - let(:topic) { Fabricate(:topic) } + fab!(:user) { Fabricate(:user) } + fab!(:topic) { Fabricate(:topic) } let(:path) { "/1234" } before do @@ -574,8 +574,8 @@ describe TopicView do end context "page_title" do - let(:tag1) { Fabricate(:tag) } - let(:tag2) { Fabricate(:tag, topic_count: 2) } + fab!(:tag1) { Fabricate(:tag) } + fab!(:tag2) { Fabricate(:tag, topic_count: 2) } subject { TopicView.new(topic.id, evil_trout).page_title } diff --git a/spec/components/topics_bulk_action_spec.rb b/spec/components/topics_bulk_action_spec.rb index b73ef4d2a68..f722264ba8b 100644 --- a/spec/components/topics_bulk_action_spec.rb +++ b/spec/components/topics_bulk_action_spec.rb @@ -32,8 +32,8 @@ describe TopicsBulkAction do end describe "change_category" do - let(:topic) { Fabricate(:topic) } - let(:category) { Fabricate(:category) } + fab!(:topic) { Fabricate(:topic) } + fab!(:category) { Fabricate(:category) } context "when the user can edit the topic" do it "changes the category and returns the topic_id" do @@ -58,7 +58,7 @@ describe TopicsBulkAction do end describe "reset_read" do - let(:topic) { Fabricate(:topic) } + fab!(:topic) { Fabricate(:topic) } it "delegates to PostTiming.destroy_for" do tba = TopicsBulkAction.new(topic.user, [topic.id], type: 'reset_read') @@ -68,8 +68,8 @@ describe TopicsBulkAction do end describe "delete" do - let(:topic) { Fabricate(:post).topic } - let(:moderator) { Fabricate(:moderator) } + fab!(:topic) { Fabricate(:post).topic } + fab!(:moderator) { Fabricate(:moderator) } it "deletes the topic" do tba = TopicsBulkAction.new(moderator, [topic.id], type: 'delete') @@ -80,7 +80,7 @@ describe TopicsBulkAction do end describe "change_notification_level" do - let(:topic) { Fabricate(:topic) } + fab!(:topic) { Fabricate(:topic) } context "when the user can see the topic" do it "updates the notification level" do @@ -103,7 +103,7 @@ describe TopicsBulkAction do end describe "close" do - let(:topic) { Fabricate(:topic) } + fab!(:topic) { Fabricate(:topic) } context "when the user can moderate the topic" do it "closes the topic and returns the topic_id" do @@ -130,7 +130,7 @@ describe TopicsBulkAction do end describe "archive" do - let(:topic) { Fabricate(:topic) } + fab!(:topic) { Fabricate(:topic) } context "when the user can moderate the topic" do it "archives the topic and returns the topic_id" do @@ -157,7 +157,7 @@ describe TopicsBulkAction do end describe "unlist" do - let(:topic) { Fabricate(:topic) } + fab!(:topic) { Fabricate(:topic) } context "when the user can moderate the topic" do it "unlists the topic and returns the topic_id" do @@ -184,9 +184,9 @@ describe TopicsBulkAction do end describe "change_tags" do - let(:topic) { Fabricate(:topic) } - let(:tag1) { Fabricate(:tag) } - let(:tag2) { Fabricate(:tag) } + fab!(:topic) { Fabricate(:topic) } + fab!(:tag1) { Fabricate(:tag) } + fab!(:tag2) { Fabricate(:tag) } before do SiteSetting.tagging_enabled = true @@ -236,10 +236,10 @@ describe TopicsBulkAction do end describe "append tags" do - let(:topic) { Fabricate(:topic) } - let(:tag1) { Fabricate(:tag) } - let(:tag2) { Fabricate(:tag) } - let(:tag3) { Fabricate(:tag) } + fab!(:topic) { Fabricate(:topic) } + fab!(:tag1) { Fabricate(:tag) } + fab!(:tag2) { Fabricate(:tag) } + fab!(:tag3) { Fabricate(:tag) } before do SiteSetting.tagging_enabled = true diff --git a/spec/components/validators/post_validator_spec.rb b/spec/components/validators/post_validator_spec.rb index 1426caaf27d..275a32b7867 100644 --- a/spec/components/validators/post_validator_spec.rb +++ b/spec/components/validators/post_validator_spec.rb @@ -4,7 +4,7 @@ require 'rails_helper' require_dependency 'validators/post_validator' describe Validators::PostValidator do - let(:topic) { Fabricate(:topic) } + fab!(:topic) { Fabricate(:topic) } let(:post) { build(:post, topic: topic) } let(:validator) { Validators::PostValidator.new({}) } @@ -26,8 +26,8 @@ describe Validators::PostValidator do end describe "when post's topic is a PM between a human and a non human user" do - let(:robot) { Fabricate(:user, id: -3) } - let(:user) { Fabricate(:user) } + fab!(:robot) { Fabricate(:user, id: -3) } + fab!(:user) { Fabricate(:user) } let(:topic) do Fabricate(:private_message_topic, topic_allowed_users: [ @@ -189,8 +189,8 @@ describe Validators::PostValidator do end describe "unique_post_validator" do - let(:user) { Fabricate(:user, id: 999) } - let(:post) { Fabricate(:post, user: user, topic: topic) } + fab!(:user) { Fabricate(:user, id: 999) } + fab!(:post) { Fabricate(:post, user: user, topic: topic) } before do SiteSetting.unique_posts_mins = 5 @@ -240,9 +240,9 @@ describe Validators::PostValidator do context "force_edit_last_validator" do - let(:user) { Fabricate(:user) } - let(:other_user) { Fabricate(:user) } - let(:topic) { Fabricate(:topic) } + fab!(:user) { Fabricate(:user) } + fab!(:other_user) { Fabricate(:user) } + fab!(:topic) { Fabricate(:topic) } before do SiteSetting.max_consecutive_replies = 2 diff --git a/spec/components/validators/upload_validator_spec.rb b/spec/components/validators/upload_validator_spec.rb index cd4c339b279..e9a3dfe601a 100644 --- a/spec/components/validators/upload_validator_spec.rb +++ b/spec/components/validators/upload_validator_spec.rb @@ -7,7 +7,7 @@ describe Validators::UploadValidator do subject(:validator) { described_class.new } describe 'validate' do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } let(:filename) { "discourse.csv" } let(:csv_file) { file_from_fixtures(filename, "csv") } @@ -57,7 +57,7 @@ describe Validators::UploadValidator do end describe 'upload for site settings' do - let(:user) { Fabricate(:admin) } + fab!(:user) { Fabricate(:admin) } let(:upload) do Fabricate.build(:upload, @@ -85,7 +85,7 @@ describe Validators::UploadValidator do end describe 'for normal user' do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } it 'should not allow the upload' do expect(subject.validate(upload)).to eq(nil) diff --git a/spec/components/validators/username_setting_validator_spec.rb b/spec/components/validators/username_setting_validator_spec.rb index 36e541ca9e6..99bbfd96716 100644 --- a/spec/components/validators/username_setting_validator_spec.rb +++ b/spec/components/validators/username_setting_validator_spec.rb @@ -21,8 +21,8 @@ describe UsernameSettingValidator do end context "regex support" do - let!(:darthvader) { Fabricate(:user, username: 'darthvader') } - let!(:luke) { Fabricate(:user, username: 'luke') } + fab!(:darthvader) { Fabricate(:user, username: 'darthvader') } + fab!(:luke) { Fabricate(:user, username: 'luke') } it "returns false if regex doesn't match" do v = described_class.new(regex: 'darth') diff --git a/spec/components/wizard/step_updater_spec.rb b/spec/components/wizard/step_updater_spec.rb index ccaab1d0029..b8cec248747 100644 --- a/spec/components/wizard/step_updater_spec.rb +++ b/spec/components/wizard/step_updater_spec.rb @@ -10,7 +10,7 @@ describe Wizard::StepUpdater do SiteSetting.wizard_enabled = true end - let(:user) { Fabricate(:admin) } + fab!(:user) { Fabricate(:admin) } let(:wizard) { Wizard::Builder.new(user).build } context "locale" do @@ -171,7 +171,7 @@ describe Wizard::StepUpdater do context "colors step" do context "with an existing color scheme" do - let!(:color_scheme) { Fabricate(:color_scheme, name: 'existing', via_wizard: true) } + fab!(:color_scheme) { Fabricate(:color_scheme, name: 'existing', via_wizard: true) } it "updates the scheme" do updater = wizard.create_updater('colors', theme_previews: 'Dark') diff --git a/spec/helpers/application_helper_spec.rb b/spec/helpers/application_helper_spec.rb index fb54c60192a..d55023f3e1b 100644 --- a/spec/helpers/application_helper_spec.rb +++ b/spec/helpers/application_helper_spec.rb @@ -166,7 +166,7 @@ describe ApplicationHelper do end describe '#html_classes' do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } it "includes 'rtl' when the I18n.locale is rtl" do I18n.stubs(:locale).returns(:he) diff --git a/spec/import_export/category_exporter_spec.rb b/spec/import_export/category_exporter_spec.rb index 4d1125d180b..88657f646b5 100644 --- a/spec/import_export/category_exporter_spec.rb +++ b/spec/import_export/category_exporter_spec.rb @@ -5,11 +5,11 @@ require "import_export/category_exporter" describe ImportExport::CategoryExporter do - let(:category) { Fabricate(:category) } - let(:group) { Fabricate(:group) } - let(:user) { Fabricate(:user) } - let(:user2) { Fabricate(:user) } - let(:user3) { Fabricate(:user) } + fab!(:category) { Fabricate(:category) } + fab!(:group) { Fabricate(:group) } + fab!(:user) { Fabricate(:user) } + fab!(:user2) { Fabricate(:user) } + fab!(:user3) { Fabricate(:user) } before do STDOUT.stubs(:write) diff --git a/spec/import_export/topic_exporter_spec.rb b/spec/import_export/topic_exporter_spec.rb index 62eeba0341a..d216846fa80 100644 --- a/spec/import_export/topic_exporter_spec.rb +++ b/spec/import_export/topic_exporter_spec.rb @@ -9,9 +9,9 @@ describe ImportExport::TopicExporter do STDOUT.stubs(:write) end - let(:user) { Fabricate(:user) } - let(:topic) { Fabricate(:topic, user: user) } - let!(:post) { Fabricate(:post, topic: topic, user: user) } + fab!(:user) { Fabricate(:user) } + fab!(:topic) { Fabricate(:topic, user: user) } + fab!(:post) { Fabricate(:post, topic: topic, user: user) } context '.perform' do it 'export a single topic' do diff --git a/spec/integration/category_tag_spec.rb b/spec/integration/category_tag_spec.rb index ba6c93de649..b42839a18d1 100644 --- a/spec/integration/category_tag_spec.rb +++ b/spec/integration/category_tag_spec.rb @@ -14,13 +14,13 @@ describe "category tag restrictions" do DiscourseTagging.filter_allowed_tags(Tag.all, Guardian.new(user), opts) end - let!(:tag1) { Fabricate(:tag, name: 'tag1') } - let!(:tag2) { Fabricate(:tag, name: 'tag2') } - let!(:tag3) { Fabricate(:tag, name: 'tag3') } - let!(:tag4) { Fabricate(:tag, name: 'tag4') } + fab!(:tag1) { Fabricate(:tag, name: 'tag1') } + fab!(:tag2) { Fabricate(:tag, name: 'tag2') } + fab!(:tag3) { Fabricate(:tag, name: 'tag3') } + fab!(:tag4) { Fabricate(:tag, name: 'tag4') } - let(:user) { Fabricate(:user) } - let(:admin) { Fabricate(:admin) } + fab!(:user) { Fabricate(:user) } + fab!(:admin) { Fabricate(:admin) } before do SiteSetting.tagging_enabled = true @@ -29,8 +29,8 @@ describe "category tag restrictions" do end context "tags restricted to one category" do - let!(:category_with_tags) { Fabricate(:category) } - let!(:other_category) { Fabricate(:category) } + fab!(:category_with_tags) { Fabricate(:category) } + fab!(:other_category) { Fabricate(:category) } before do category_with_tags.tags = [tag1, tag2] @@ -98,9 +98,9 @@ describe "category tag restrictions" do end context "tag groups restricted to a category" do - let!(:tag_group1) { Fabricate(:tag_group) } - let!(:category) { Fabricate(:category) } - let!(:other_category) { Fabricate(:category) } + fab!(:tag_group1) { Fabricate(:tag_group) } + fab!(:category) { Fabricate(:category) } + fab!(:other_category) { Fabricate(:category) } before do tag_group1.tags = [tag1, tag2] @@ -156,8 +156,8 @@ describe "category tag restrictions" do end context 'another category has restricted tags using groups' do - let(:category2) { Fabricate(:category) } - let(:tag_group2) { Fabricate(:tag_group) } + fab!(:category2) { Fabricate(:category) } + fab!(:tag_group2) { Fabricate(:tag_group) } before do tag_group2.tags = [tag2, tag3] @@ -183,7 +183,7 @@ describe "category tag restrictions" do end context 'another category has restricted tags' do - let(:category2) { Fabricate(:category) } + fab!(:category2) { Fabricate(:category) } it "doesn't filter tags that are also restricted in another category" do category2.tags = [tag2, tag3] @@ -214,11 +214,11 @@ describe "category tag restrictions" do end context "and category restrictions" do - let(:car_category) { Fabricate(:category) } - let(:other_category) { Fabricate(:category) } - let(:makes) { Fabricate(:tag_group, name: "Makes") } - let(:honda_group) { Fabricate(:tag_group, name: "Honda Models") } - let(:ford_group) { Fabricate(:tag_group, name: "Ford Models") } + fab!(:car_category) { Fabricate(:category) } + fab!(:other_category) { Fabricate(:category) } + fab!(:makes) { Fabricate(:tag_group, name: "Makes") } + fab!(:honda_group) { Fabricate(:tag_group, name: "Honda Models") } + fab!(:ford_group) { Fabricate(:tag_group, name: "Ford Models") } before do @tags = {} @@ -290,12 +290,12 @@ describe "category tag restrictions" do end describe "tag topic counts per category" do - let(:admin) { Fabricate(:admin) } - let(:category) { Fabricate(:category) } - let(:category2) { Fabricate(:category) } - let(:tag1) { Fabricate(:tag) } - let(:tag2) { Fabricate(:tag) } - let(:tag3) { Fabricate(:tag) } + fab!(:admin) { Fabricate(:admin) } + fab!(:category) { Fabricate(:category) } + fab!(:category2) { Fabricate(:category) } + fab!(:tag1) { Fabricate(:tag) } + fab!(:tag2) { Fabricate(:tag) } + fab!(:tag3) { Fabricate(:tag) } before do SiteSetting.tagging_enabled = true @@ -323,8 +323,8 @@ describe "tag topic counts per category" do end context "topic with 2 tags" do - let(:topic) { Fabricate(:topic, category: category, tags: [tag1, tag2]) } - let(:post) { Fabricate(:post, user: topic.user, topic: topic) } + fab!(:topic) { Fabricate(:topic, category: category, tags: [tag1, tag2]) } + fab!(:post) { Fabricate(:post, user: topic.user, topic: topic) } it "has correct counts after tag is removed from a topic" do post @@ -355,8 +355,8 @@ describe "tag topic counts per category" do end context "topic with one tag" do - let(:topic) { Fabricate(:topic, tags: [tag1], category: category) } - let(:post) { Fabricate(:post, user: topic.user, topic: topic) } + fab!(:topic) { Fabricate(:topic, tags: [tag1], category: category) } + fab!(:post) { Fabricate(:post, user: topic.user, topic: topic) } it "counts after topic becomes uncategorized" do PostRevisor.new(post).revise!(topic.user, raw: post.raw, tags: [tag1.name], category_id: SiteSetting.uncategorized_category_id) diff --git a/spec/integration/spam_rules_spec.rb b/spec/integration/spam_rules_spec.rb index f9ec29ff584..d5c482e38b0 100644 --- a/spec/integration/spam_rules_spec.rb +++ b/spec/integration/spam_rules_spec.rb @@ -6,10 +6,10 @@ require 'rails_helper' describe "spam rules for users" do describe 'auto-silence users based on flagging' do - let!(:admin) { Fabricate(:admin) } # needed to send a system message - let!(:moderator) { Fabricate(:moderator) } - let(:user1) { Fabricate(:user) } - let(:user2) { Fabricate(:user) } + fab!(:admin) { Fabricate(:admin) } # needed to send a system message + fab!(:moderator) { Fabricate(:moderator) } + fab!(:user1) { Fabricate(:user) } + fab!(:user2) { Fabricate(:user) } before do SiteSetting.score_required_to_hide_post = 0 @@ -18,7 +18,7 @@ describe "spam rules for users" do end context 'spammer is a new user' do - let(:spammer) { Fabricate(:user, trust_level: TrustLevel[0]) } + fab!(:spammer) { Fabricate(:user, trust_level: TrustLevel[0]) } context 'spammer post is not flagged enough times' do let!(:spam_post) { create_post(user: spammer) } @@ -43,7 +43,7 @@ describe "spam rules for users" do end context 'one spam post is flagged enough times by enough users' do - let!(:another_topic) { Fabricate(:topic) } + fab!(:another_topic) { Fabricate(:topic) } let!(:private_messages_count) { spammer.private_topics_count } let!(:mod_pm_count) { moderator.private_topics_count } let!(:reviewable) { PostActionCreator.spam(user2, spam_post).reviewable } diff --git a/spec/integration/user_api_keys_spec.rb b/spec/integration/user_api_keys_spec.rb index 24607b22d97..e094ed3a848 100644 --- a/spec/integration/user_api_keys_spec.rb +++ b/spec/integration/user_api_keys_spec.rb @@ -4,7 +4,7 @@ require 'rails_helper' describe 'user api keys integration' do - let(:user_api_key) { Fabricate(:readonly_user_api_key) } + fab!(:user_api_key) { Fabricate(:readonly_user_api_key) } it 'updates last used time on use' do user_api_key.update_columns(last_used_at: 7.days.ago) diff --git a/spec/integration/watched_words_spec.rb b/spec/integration/watched_words_spec.rb index cbb8fc0d5a8..d8d127ef260 100644 --- a/spec/integration/watched_words_spec.rb +++ b/spec/integration/watched_words_spec.rb @@ -3,12 +3,12 @@ require 'rails_helper' describe WatchedWord do - let(:tl2_user) { Fabricate(:user, trust_level: TrustLevel[2]) } - let(:admin) { Fabricate(:admin) } - let(:moderator) { Fabricate(:moderator) } + fab!(:tl2_user) { Fabricate(:user, trust_level: TrustLevel[2]) } + fab!(:admin) { Fabricate(:admin) } + fab!(:moderator) { Fabricate(:moderator) } - let(:topic) { Fabricate(:topic) } - let(:first_post) { Fabricate(:post, topic: topic) } + fab!(:topic) { Fabricate(:topic) } + fab!(:first_post) { Fabricate(:post, topic: topic) } let(:require_approval_word) { Fabricate(:watched_word, action: WatchedWord.actions[:require_approval]) } let(:flag_word) { Fabricate(:watched_word, action: WatchedWord.actions[:flag]) } diff --git a/spec/jobs/auto_expire_user_api_keys_spec.rb b/spec/jobs/auto_expire_user_api_keys_spec.rb index 37da63ea85a..ef490a113e2 100644 --- a/spec/jobs/auto_expire_user_api_keys_spec.rb +++ b/spec/jobs/auto_expire_user_api_keys_spec.rb @@ -3,8 +3,8 @@ require 'rails_helper' RSpec.describe Jobs::AutoExpireUserApiKeys do - let(:key1) { Fabricate(:readonly_user_api_key) } - let(:key2) { Fabricate(:readonly_user_api_key) } + fab!(:key1) { Fabricate(:readonly_user_api_key) } + fab!(:key2) { Fabricate(:readonly_user_api_key) } context 'when user api key is unused in last 1 days' do diff --git a/spec/jobs/auto_queue_handler_spec.rb b/spec/jobs/auto_queue_handler_spec.rb index 2218faeada7..d0737184722 100644 --- a/spec/jobs/auto_queue_handler_spec.rb +++ b/spec/jobs/auto_queue_handler_spec.rb @@ -7,8 +7,8 @@ describe Jobs::AutoQueueHandler do subject { Jobs::AutoQueueHandler.new.execute({}) } context "old flag" do - let!(:old) { Fabricate(:reviewable_flagged_post, created_at: 61.days.ago) } - let!(:not_old) { Fabricate(:reviewable_flagged_post, created_at: 59.days.ago) } + fab!(:old) { Fabricate(:reviewable_flagged_post, created_at: 61.days.ago) } + fab!(:not_old) { Fabricate(:reviewable_flagged_post, created_at: 59.days.ago) } it "defers the old flag if auto_handle_queued_age is 60" do SiteSetting.auto_handle_queued_age = 60 @@ -26,10 +26,10 @@ describe Jobs::AutoQueueHandler do end context "reviewables" do - let!(:new_post) { Fabricate(:reviewable_queued_post, created_at: 59.days.ago) } - let!(:old_post) { Fabricate(:reviewable_queued_post, created_at: 61.days.ago) } - let!(:new_user) { Fabricate(:reviewable, created_at: 10.days.ago) } - let!(:old_user) { Fabricate(:reviewable, created_at: 80.days.ago) } + fab!(:new_post) { Fabricate(:reviewable_queued_post, created_at: 59.days.ago) } + fab!(:old_post) { Fabricate(:reviewable_queued_post, created_at: 61.days.ago) } + fab!(:new_user) { Fabricate(:reviewable, created_at: 10.days.ago) } + fab!(:old_user) { Fabricate(:reviewable, created_at: 80.days.ago) } it "rejects the post when auto_handle_queued_age is 60" do SiteSetting.auto_handle_queued_age = 60 diff --git a/spec/jobs/bulk_invite_spec.rb b/spec/jobs/bulk_invite_spec.rb index 53bdcf2ec9d..e6a7d0c2cc3 100644 --- a/spec/jobs/bulk_invite_spec.rb +++ b/spec/jobs/bulk_invite_spec.rb @@ -4,11 +4,11 @@ require 'rails_helper' describe Jobs::BulkInvite do describe '#execute' do - let(:user) { Fabricate(:user) } - let(:admin) { Fabricate(:admin) } - let!(:group1) { Fabricate(:group, name: 'group1') } - let!(:group2) { Fabricate(:group, name: 'group2') } - let!(:topic) { Fabricate(:topic, id: 999) } + fab!(:user) { Fabricate(:user) } + fab!(:admin) { Fabricate(:admin) } + fab!(:group1) { Fabricate(:group, name: 'group1') } + fab!(:group2) { Fabricate(:group, name: 'group2') } + fab!(:topic) { Fabricate(:topic, id: 999) } let(:email) { "test@discourse.org" } let(:basename) { "bulk_invite.csv" } let(:filename) { "#{Invite.base_directory}/#{basename}" } diff --git a/spec/jobs/bump_topic_spec.rb b/spec/jobs/bump_topic_spec.rb index a52c0d20f8c..b228a519659 100644 --- a/spec/jobs/bump_topic_spec.rb +++ b/spec/jobs/bump_topic_spec.rb @@ -3,8 +3,8 @@ require 'rails_helper' describe Jobs::BumpTopic do - let(:admin) { Fabricate(:admin) } - let(:user) { Fabricate(:user) } + fab!(:admin) { Fabricate(:admin) } + fab!(:user) { Fabricate(:user) } it "can bump a topic" do topic = Fabricate(:topic_timer, user: admin).topic diff --git a/spec/jobs/clean_up_email_logs_spec.rb b/spec/jobs/clean_up_email_logs_spec.rb index 2e987333ade..7c84aa2b8fc 100644 --- a/spec/jobs/clean_up_email_logs_spec.rb +++ b/spec/jobs/clean_up_email_logs_spec.rb @@ -3,15 +3,15 @@ require 'rails_helper' describe Jobs::CleanUpEmailLogs do - let!(:email_log) { Fabricate(:email_log, created_at: 2.years.ago) } - let!(:email_log2) { Fabricate(:email_log, created_at: 2.weeks.ago) } - let!(:email_log3) { Fabricate(:email_log, created_at: 2.days.ago) } + fab!(:email_log) { Fabricate(:email_log, created_at: 2.years.ago) } + fab!(:email_log2) { Fabricate(:email_log, created_at: 2.weeks.ago) } + fab!(:email_log3) { Fabricate(:email_log, created_at: 2.days.ago) } let!(:skipped_email_log) do Fabricate(:skipped_email_log, created_at: 2.years.ago) end - let!(:skipped_email_log2) { Fabricate(:skipped_email_log) } + fab!(:skipped_email_log2) { Fabricate(:skipped_email_log) } it "removes old email logs" do Jobs::CleanUpEmailLogs.new.execute({}) diff --git a/spec/jobs/clean_up_unused_staged_users_spec.rb b/spec/jobs/clean_up_unused_staged_users_spec.rb index 9140c765c7f..2a8679dcdb8 100644 --- a/spec/jobs/clean_up_unused_staged_users_spec.rb +++ b/spec/jobs/clean_up_unused_staged_users_spec.rb @@ -3,8 +3,8 @@ require 'rails_helper' RSpec.describe Jobs::CleanUpUnusedStagedUsers do - let(:user) { Fabricate(:user) } - let(:staged_user) { Fabricate(:user, staged: true) } + fab!(:user) { Fabricate(:user) } + fab!(:staged_user) { Fabricate(:user, staged: true) } context 'when staged user is unused' do it 'should clean up the staged user' do diff --git a/spec/jobs/delete_topic_spec.rb b/spec/jobs/delete_topic_spec.rb index 4acf85d69f7..7b420ed3447 100644 --- a/spec/jobs/delete_topic_spec.rb +++ b/spec/jobs/delete_topic_spec.rb @@ -3,9 +3,9 @@ require 'rails_helper' describe Jobs::DeleteTopic do - let(:admin) { Fabricate(:admin) } + fab!(:admin) { Fabricate(:admin) } - let(:topic) do + fab!(:topic) do Fabricate(:topic_timer, user: admin).topic end diff --git a/spec/jobs/disable_bootstrap_mode_spec.rb b/spec/jobs/disable_bootstrap_mode_spec.rb index 46001c3a179..69cb62d9ca2 100644 --- a/spec/jobs/disable_bootstrap_mode_spec.rb +++ b/spec/jobs/disable_bootstrap_mode_spec.rb @@ -5,7 +5,7 @@ require 'rails_helper' describe Jobs::DisableBootstrapMode do context '.execute' do - let(:admin) { Fabricate(:admin) } + fab!(:admin) { Fabricate(:admin) } before do SiteSetting.bootstrap_mode_enabled = true diff --git a/spec/jobs/download_avatar_from_url_spec.rb b/spec/jobs/download_avatar_from_url_spec.rb index 98785c0c876..b34119e2b45 100644 --- a/spec/jobs/download_avatar_from_url_spec.rb +++ b/spec/jobs/download_avatar_from_url_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' RSpec.describe Jobs::DownloadAvatarFromUrl do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } describe 'when url is invalid' do it 'should not raise any error' do diff --git a/spec/jobs/download_backup_email_spec.rb b/spec/jobs/download_backup_email_spec.rb index 488db8dbbd1..9fe526d7fe7 100644 --- a/spec/jobs/download_backup_email_spec.rb +++ b/spec/jobs/download_backup_email_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' RSpec.describe Jobs::DownloadBackupEmail do - let(:user) { Fabricate(:admin) } + fab!(:user) { Fabricate(:admin) } it "should work" do described_class.new.execute( diff --git a/spec/jobs/download_profile_background_from_url_spec.rb b/spec/jobs/download_profile_background_from_url_spec.rb index ca66a51d363..b28b798e0ca 100644 --- a/spec/jobs/download_profile_background_from_url_spec.rb +++ b/spec/jobs/download_profile_background_from_url_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' RSpec.describe Jobs::DownloadProfileBackgroundFromUrl do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } describe 'when url is invalid' do it 'should not raise any error' do diff --git a/spec/jobs/emit_web_hook_event_spec.rb b/spec/jobs/emit_web_hook_event_spec.rb index 0426e346ca2..10ae498c9ad 100644 --- a/spec/jobs/emit_web_hook_event_spec.rb +++ b/spec/jobs/emit_web_hook_event_spec.rb @@ -4,10 +4,10 @@ require 'rails_helper' require 'excon' describe Jobs::EmitWebHookEvent do - let(:post_hook) { Fabricate(:web_hook) } - let(:inactive_hook) { Fabricate(:inactive_web_hook) } - let(:post) { Fabricate(:post) } - let(:user) { Fabricate(:user) } + fab!(:post_hook) { Fabricate(:web_hook) } + fab!(:inactive_hook) { Fabricate(:inactive_web_hook) } + fab!(:post) { Fabricate(:post) } + fab!(:user) { Fabricate(:user) } it 'raises an error when there is no web hook record' do expect do @@ -157,10 +157,10 @@ describe Jobs::EmitWebHookEvent do end context 'with category filters' do - let(:category) { Fabricate(:category) } - let(:topic) { Fabricate(:topic) } - let(:topic_with_category) { Fabricate(:topic, category_id: category.id) } - let(:topic_hook) { Fabricate(:topic_web_hook, categories: [category]) } + fab!(:category) { Fabricate(:category) } + fab!(:topic) { Fabricate(:topic) } + fab!(:topic_with_category) { Fabricate(:topic, category_id: category.id) } + fab!(:topic_hook) { Fabricate(:topic_web_hook, categories: [category]) } it "doesn't emit when event is not related with defined categories" do subject.execute( @@ -186,9 +186,9 @@ describe Jobs::EmitWebHookEvent do end context 'with tag filters' do - let(:tag) { Fabricate(:tag) } - let(:topic) { Fabricate(:topic, tags: [tag]) } - let(:topic_hook) { Fabricate(:topic_web_hook, tags: [tag]) } + fab!(:tag) { Fabricate(:tag) } + fab!(:topic) { Fabricate(:topic, tags: [tag]) } + fab!(:topic_hook) { Fabricate(:topic_web_hook, tags: [tag]) } it "doesn't emit when event is not included any tags" do subject.execute( diff --git a/spec/jobs/enable_bootstrap_mode_spec.rb b/spec/jobs/enable_bootstrap_mode_spec.rb index 0562f4ab701..35ef588839b 100644 --- a/spec/jobs/enable_bootstrap_mode_spec.rb +++ b/spec/jobs/enable_bootstrap_mode_spec.rb @@ -5,7 +5,7 @@ require 'rails_helper' describe Jobs::EnableBootstrapMode do context '.execute' do - let(:admin) { Fabricate(:admin) } + fab!(:admin) { Fabricate(:admin) } before do SiteSetting.bootstrap_mode_enabled = false diff --git a/spec/jobs/export_csv_file_spec.rb b/spec/jobs/export_csv_file_spec.rb index eb076e6d815..615547c0860 100644 --- a/spec/jobs/export_csv_file_spec.rb +++ b/spec/jobs/export_csv_file_spec.rb @@ -5,7 +5,7 @@ require 'rails_helper' describe Jobs::ExportCsvFile do context '.execute' do - let(:user) { Fabricate(:user, username: "john_doe") } + fab!(:user) { Fabricate(:user, username: "john_doe") } it 'raises an error when the entity is missing' do expect { Jobs::ExportCsvFile.new.execute(user_id: user.id) }.to raise_error(Discourse::InvalidParameters) diff --git a/spec/jobs/feature_topic_users_spec.rb b/spec/jobs/feature_topic_users_spec.rb index 8afc87125c6..ac74f378919 100644 --- a/spec/jobs/feature_topic_users_spec.rb +++ b/spec/jobs/feature_topic_users_spec.rb @@ -17,8 +17,8 @@ describe Jobs::FeatureTopicUsers do context 'with a topic' do let!(:post) { create_post } let(:topic) { post.topic } - let!(:coding_horror) { Fabricate(:coding_horror) } - let!(:evil_trout) { Fabricate(:evil_trout) } + fab!(:coding_horror) { Fabricate(:coding_horror) } + fab!(:evil_trout) { Fabricate(:evil_trout) } let!(:second_post) { create_post(topic: topic, user: coding_horror) } let!(:third_post) { create_post(topic: topic, user: evil_trout) } diff --git a/spec/jobs/ignored_users_summary_spec.rb b/spec/jobs/ignored_users_summary_spec.rb index fa41210cfd4..b98e6e0dace 100644 --- a/spec/jobs/ignored_users_summary_spec.rb +++ b/spec/jobs/ignored_users_summary_spec.rb @@ -20,9 +20,9 @@ describe Jobs::IgnoredUsersSummary do end context "when some ignored users exist" do - let(:tarek) { Fabricate(:user, username: "tarek") } - let(:matt) { Fabricate(:user, username: "matt") } - let(:john) { Fabricate(:user, username: "john") } + fab!(:tarek) { Fabricate(:user, username: "tarek") } + fab!(:matt) { Fabricate(:user, username: "matt") } + fab!(:john) { Fabricate(:user, username: "john") } before do Fabricate(:ignored_user, user: tarek, ignored_user: matt) diff --git a/spec/jobs/invalidate_inactive_admins_spec.rb b/spec/jobs/invalidate_inactive_admins_spec.rb index baf3ce65192..dfae43525b3 100644 --- a/spec/jobs/invalidate_inactive_admins_spec.rb +++ b/spec/jobs/invalidate_inactive_admins_spec.rb @@ -5,7 +5,7 @@ require 'rails_helper' require_dependency 'jobs/scheduled/invalidate_inactive_admins' describe Jobs::InvalidateInactiveAdmins do - let!(:active_admin) { Fabricate(:admin, last_seen_at: 1.hour.ago) } + fab!(:active_admin) { Fabricate(:admin, last_seen_at: 1.hour.ago) } before { active_admin.email_tokens.update_all(confirmed: true) } subject { Jobs::InvalidateInactiveAdmins.new.execute({}) } @@ -18,7 +18,7 @@ describe Jobs::InvalidateInactiveAdmins do end context "with an admin who hasn't been seen recently" do - let!(:not_seen_admin) { Fabricate(:admin, last_seen_at: 370.days.ago) } + fab!(:not_seen_admin) { Fabricate(:admin, last_seen_at: 370.days.ago) } before { not_seen_admin.email_tokens.update_all(confirmed: true) } context 'invalidate_inactive_admin_email_after_days = 365' do diff --git a/spec/jobs/invite_email_spec.rb b/spec/jobs/invite_email_spec.rb index 270123c7f93..726a31600a5 100644 --- a/spec/jobs/invite_email_spec.rb +++ b/spec/jobs/invite_email_spec.rb @@ -14,7 +14,7 @@ describe Jobs::InviteEmail do context 'with an invite id' do let (:mailer) { Mail::Message.new(to: 'eviltrout@test.domain') } - let (:invite) { Fabricate(:invite) } + fab!(:invite) { Fabricate(:invite) } it 'delegates to the test mailer' do Email::Sender.any_instance.expects(:send) diff --git a/spec/jobs/notify_mailing_list_subscribers_spec.rb b/spec/jobs/notify_mailing_list_subscribers_spec.rb index 506f2b0c460..5f4fb51dd05 100644 --- a/spec/jobs/notify_mailing_list_subscribers_spec.rb +++ b/spec/jobs/notify_mailing_list_subscribers_spec.rb @@ -4,12 +4,12 @@ require "rails_helper" describe Jobs::NotifyMailingListSubscribers do - let(:mailing_list_user) { Fabricate(:user) } + fab!(:mailing_list_user) { Fabricate(:user) } before { mailing_list_user.user_option.update(mailing_list_mode: true, mailing_list_mode_frequency: 1) } - let(:user) { Fabricate(:user) } - let(:post) { Fabricate(:post, user: user) } + fab!(:user) { Fabricate(:user) } + fab!(:post) { Fabricate(:post, user: user) } shared_examples "no emails" do it "doesn't send any emails" do @@ -88,7 +88,7 @@ describe Jobs::NotifyMailingListSubscribers do end context "to an anonymous user" do - let(:mailing_list_user) { Fabricate(:anonymous) } + fab!(:mailing_list_user) { Fabricate(:anonymous) } include_examples "no emails" end @@ -195,7 +195,7 @@ describe Jobs::NotifyMailingListSubscribers do end context "with a valid post from same user" do - let(:post) { Fabricate(:post, user: mailing_list_user) } + fab!(:post) { Fabricate(:post, user: mailing_list_user) } context "to an user who has frequency set to 'daily'" do before { mailing_list_user.user_option.update(mailing_list_mode_frequency: 0) } diff --git a/spec/jobs/notify_moved_posts_spec.rb b/spec/jobs/notify_moved_posts_spec.rb index 271fa950f54..68b1e68267d 100644 --- a/spec/jobs/notify_moved_posts_spec.rb +++ b/spec/jobs/notify_moved_posts_spec.rb @@ -15,10 +15,10 @@ describe Jobs::NotifyMovedPosts do end context 'with post ids' do - let!(:p1) { Fabricate(:post) } - let!(:p2) { Fabricate(:post, user: Fabricate(:evil_trout), topic: p1.topic) } - let!(:p3) { Fabricate(:post, user: p1.user, topic: p1.topic) } - let(:admin) { Fabricate(:admin) } + fab!(:p1) { Fabricate(:post) } + fab!(:p2) { Fabricate(:post, user: Fabricate(:evil_trout), topic: p1.topic) } + fab!(:p3) { Fabricate(:post, user: p1.user, topic: p1.topic) } + fab!(:admin) { Fabricate(:admin) } let(:moved_post_notifications) { Notification.where(notification_type: Notification.types[:moved_post]) } diff --git a/spec/jobs/notify_reviewable_spec.rb b/spec/jobs/notify_reviewable_spec.rb index 7ce15536d32..d3d2871e120 100644 --- a/spec/jobs/notify_reviewable_spec.rb +++ b/spec/jobs/notify_reviewable_spec.rb @@ -4,9 +4,9 @@ require 'rails_helper' describe Jobs::NotifyReviewable do describe '.execute' do - let!(:admin) { Fabricate(:admin, moderator: true) } - let!(:moderator) { Fabricate(:moderator) } - let!(:group_user) { Fabricate(:group_user) } + fab!(:admin) { Fabricate(:admin, moderator: true) } + fab!(:moderator) { Fabricate(:moderator) } + fab!(:group_user) { Fabricate(:group_user) } let(:user) { group_user.user } let(:group) { group_user.group } diff --git a/spec/jobs/poll_feed_spec.rb b/spec/jobs/poll_feed_spec.rb index 24b09f7db89..cee8520e0dd 100644 --- a/spec/jobs/poll_feed_spec.rb +++ b/spec/jobs/poll_feed_spec.rb @@ -46,8 +46,8 @@ describe Jobs::PollFeed do describe '#poll_feed' do let(:embed_by_username) { 'eviltrout' } let(:embed_username_key_from_feed) { 'discourse:username' } - let!(:default_user) { Fabricate(:evil_trout) } - let!(:feed_author) { Fabricate(:user, username: 'xrav3nz', email: 'hi@bye.com') } + fab!(:default_user) { Fabricate(:evil_trout) } + fab!(:feed_author) { Fabricate(:user, username: 'xrav3nz', email: 'hi@bye.com') } shared_examples 'topic creation based on the the feed' do describe 'author username parsing' do diff --git a/spec/jobs/process_post_spec.rb b/spec/jobs/process_post_spec.rb index 5dd207e2398..35794be2959 100644 --- a/spec/jobs/process_post_spec.rb +++ b/spec/jobs/process_post_spec.rb @@ -11,7 +11,7 @@ describe Jobs::ProcessPost do context 'with a post' do - let(:post) { Fabricate(:post) } + fab!(:post) { Fabricate(:post) } it 'does not erase posts when CookedPostProcessor malfunctions' do # Look kids, an actual reason why you want to use mocks diff --git a/spec/jobs/publish_topic_to_category_spec.rb b/spec/jobs/publish_topic_to_category_spec.rb index 27e8a71cbbd..4b9a526b12c 100644 --- a/spec/jobs/publish_topic_to_category_spec.rb +++ b/spec/jobs/publish_topic_to_category_spec.rb @@ -3,8 +3,8 @@ require 'rails_helper' RSpec.describe Jobs::PublishTopicToCategory do - let(:category) { Fabricate(:category) } - let(:another_category) { Fabricate(:category) } + fab!(:category) { Fabricate(:category) } + fab!(:another_category) { Fabricate(:category) } let(:topic) do topic = Fabricate(:topic, category: category) diff --git a/spec/jobs/pull_hotlinked_images_spec.rb b/spec/jobs/pull_hotlinked_images_spec.rb index f4a65b3850f..ba92da9530a 100644 --- a/spec/jobs/pull_hotlinked_images_spec.rb +++ b/spec/jobs/pull_hotlinked_images_spec.rb @@ -171,7 +171,7 @@ describe Jobs::PullHotlinkedImages do end describe "with a lightboxed image" do - let(:upload) { Fabricate(:upload) } + fab!(:upload) { Fabricate(:upload) } before do FastImage.expects(:size).returns([1750, 2000]) diff --git a/spec/jobs/purge_expired_ignored_users_spec.rb b/spec/jobs/purge_expired_ignored_users_spec.rb index 707fe20c523..c49a45bd34c 100644 --- a/spec/jobs/purge_expired_ignored_users_spec.rb +++ b/spec/jobs/purge_expired_ignored_users_spec.rb @@ -14,9 +14,9 @@ describe Jobs::PurgeExpiredIgnoredUsers do end context "when some ignored users exist" do - let(:tarek) { Fabricate(:user, username: "tarek") } - let(:matt) { Fabricate(:user, username: "matt") } - let(:john) { Fabricate(:user, username: "john") } + fab!(:tarek) { Fabricate(:user, username: "tarek") } + fab!(:matt) { Fabricate(:user, username: "matt") } + fab!(:john) { Fabricate(:user, username: "john") } before do Fabricate(:ignored_user, user: tarek, ignored_user: matt) @@ -30,7 +30,7 @@ describe Jobs::PurgeExpiredIgnoredUsers do end context "when there are expired ignored users" do - let(:fred) { Fabricate(:user, username: "fred") } + fab!(:fred) { Fabricate(:user, username: "fred") } it "purges expired ignored users" do freeze_time(5.months.ago) do @@ -43,7 +43,7 @@ describe Jobs::PurgeExpiredIgnoredUsers do end context "when there are expired ignored users by expiring_at" do - let(:fred) { Fabricate(:user, username: "fred") } + fab!(:fred) { Fabricate(:user, username: "fred") } it "purges expired ignored users" do Fabricate(:ignored_user, user: tarek, ignored_user: fred, expiring_at: 1.month.from_now) diff --git a/spec/jobs/send_system_message_spec.rb b/spec/jobs/send_system_message_spec.rb index 09f8a5962b2..58b7e79516c 100644 --- a/spec/jobs/send_system_message_spec.rb +++ b/spec/jobs/send_system_message_spec.rb @@ -15,7 +15,7 @@ describe Jobs::SendSystemMessage do context 'with valid parameters' do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } it "should call SystemMessage.create" do SystemMessage.any_instance.expects(:create).with('welcome_invite', {}) diff --git a/spec/jobs/suspicious_login_spec.rb b/spec/jobs/suspicious_login_spec.rb index 8e1ecef2362..e3c9b34c32a 100644 --- a/spec/jobs/suspicious_login_spec.rb +++ b/spec/jobs/suspicious_login_spec.rb @@ -4,7 +4,7 @@ require 'rails_helper' describe Jobs::SuspiciousLogin do - let(:user) { Fabricate(:moderator) } + fab!(:user) { Fabricate(:moderator) } let(:zurich) { { latitude: 47.3686498, longitude: 8.5391825 } } # Zurich, Switzerland let(:bern) { { latitude: 46.947922, longitude: 7.444608 } } # Bern, Switzerland diff --git a/spec/jobs/toggle_topic_closed_spec.rb b/spec/jobs/toggle_topic_closed_spec.rb index f52031ddb73..d903b693451 100644 --- a/spec/jobs/toggle_topic_closed_spec.rb +++ b/spec/jobs/toggle_topic_closed_spec.rb @@ -3,9 +3,9 @@ require 'rails_helper' describe Jobs::ToggleTopicClosed do - let(:admin) { Fabricate(:admin) } + fab!(:admin) { Fabricate(:admin) } - let(:topic) do + fab!(:topic) do Fabricate(:topic_timer, user: admin).topic end @@ -45,8 +45,8 @@ describe Jobs::ToggleTopicClosed do end describe 'when category has auto close configured' do - let(:category) { Fabricate(:category, auto_close_hours: 5) } - let(:topic) { Fabricate(:topic, category: category, closed: true) } + fab!(:category) { Fabricate(:category, auto_close_hours: 5) } + fab!(:topic) { Fabricate(:topic, category: category, closed: true) } it "should restore the category's auto close timer" do Fabricate(:topic_timer, @@ -86,7 +86,7 @@ describe Jobs::ToggleTopicClosed do end describe 'when user is not authorized to close topics' do - let(:topic) do + fab!(:topic) do Fabricate(:topic_timer, execute_at: 2.hours.from_now).topic end diff --git a/spec/jobs/topic_reminder_spec.rb b/spec/jobs/topic_reminder_spec.rb index 74e8affa4ee..a0c331a889a 100644 --- a/spec/jobs/topic_reminder_spec.rb +++ b/spec/jobs/topic_reminder_spec.rb @@ -3,9 +3,9 @@ require 'rails_helper' describe Jobs::TopicReminder do - let(:admin) { Fabricate(:admin) } + fab!(:admin) { Fabricate(:admin) } - let(:topic) do + fab!(:topic) do Fabricate(:topic_timer, user: admin, status_type: TopicTimer.types[:reminder] diff --git a/spec/jobs/truncate_user_flag_stats_spec.rb b/spec/jobs/truncate_user_flag_stats_spec.rb index 03e12314244..b7e23fbb8b8 100644 --- a/spec/jobs/truncate_user_flag_stats_spec.rb +++ b/spec/jobs/truncate_user_flag_stats_spec.rb @@ -3,8 +3,8 @@ require 'rails_helper' describe Jobs::TruncateUserFlagStats do - let(:user) { Fabricate(:user) } - let(:other_user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } + fab!(:other_user) { Fabricate(:user) } before do # We might make this a site setting eventually diff --git a/spec/jobs/user_email_spec.rb b/spec/jobs/user_email_spec.rb index 8eb2f95394e..5615078a927 100644 --- a/spec/jobs/user_email_spec.rb +++ b/spec/jobs/user_email_spec.rb @@ -9,10 +9,10 @@ describe Jobs::UserEmail do SiteSetting.email_time_window_mins = 10 end - let(:user) { Fabricate(:user, last_seen_at: 11.minutes.ago) } - let(:staged) { Fabricate(:user, staged: true, last_seen_at: 11.minutes.ago) } - let(:suspended) { Fabricate(:user, last_seen_at: 10.minutes.ago, suspended_at: 5.minutes.ago, suspended_till: 7.days.from_now) } - let(:anonymous) { Fabricate(:anonymous, last_seen_at: 11.minutes.ago) } + fab!(:user) { Fabricate(:user, last_seen_at: 11.minutes.ago) } + fab!(:staged) { Fabricate(:user, staged: true, last_seen_at: 11.minutes.ago) } + fab!(:suspended) { Fabricate(:user, last_seen_at: 10.minutes.ago, suspended_at: 5.minutes.ago, suspended_till: 7.days.from_now) } + fab!(:anonymous) { Fabricate(:anonymous, last_seen_at: 11.minutes.ago) } it "raises an error when there is no user" do expect { Jobs::UserEmail.new.execute(type: :digest) }.to raise_error(Discourse::InvalidParameters) @@ -27,8 +27,8 @@ describe Jobs::UserEmail do end context 'digest can be generated' do - let(:user) { Fabricate(:user, last_seen_at: 8.days.ago, last_emailed_at: 8.days.ago) } - let!(:popular_topic) { Fabricate(:topic, user: Fabricate(:admin), created_at: 1.hour.ago) } + fab!(:user) { Fabricate(:user, last_seen_at: 8.days.ago, last_emailed_at: 8.days.ago) } + fab!(:popular_topic) { Fabricate(:topic, user: Fabricate(:admin), created_at: 1.hour.ago) } it "doesn't call the mailer when the user is missing" do Jobs::UserEmail.new.execute(type: :digest, user_id: 1234) @@ -112,8 +112,8 @@ describe Jobs::UserEmail do end context "recently seen" do - let(:post) { Fabricate(:post, user: user) } - let(:notification) { Fabricate( + fab!(:post) { Fabricate(:post, user: user) } + fab!(:notification) { Fabricate( :notification, user: user, topic: post.topic, @@ -177,7 +177,7 @@ describe Jobs::UserEmail do end context "email_log" do - let(:post) { Fabricate(:post) } + fab!(:post) { Fabricate(:post) } before do SiteSetting.editing_grace_period = 0 @@ -233,7 +233,7 @@ describe Jobs::UserEmail do end context "post" do - let(:post) { Fabricate(:post, user: user) } + fab!(:post) { Fabricate(:post, user: user) } it "doesn't send the email if you've seen the post" do PostTiming.record_timing(topic_id: post.topic_id, user_id: user.id, post_number: post.post_number, msecs: 6666) @@ -307,8 +307,8 @@ describe Jobs::UserEmail do end context 'notification' do - let(:post) { Fabricate(:post, user: user) } - let!(:notification) { + fab!(:post) { Fabricate(:post, user: user) } + fab!(:notification) { Fabricate(:notification, user: user, topic: post.topic, diff --git a/spec/lib/upload_creator_spec.rb b/spec/lib/upload_creator_spec.rb index d32e7b34f43..1225873778f 100644 --- a/spec/lib/upload_creator_spec.rb +++ b/spec/lib/upload_creator_spec.rb @@ -4,7 +4,7 @@ require 'rails_helper' require 'file_store/s3_store' RSpec.describe UploadCreator do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } describe '#create_for' do describe 'when upload is not an image' do diff --git a/spec/lib/upload_recovery_spec.rb b/spec/lib/upload_recovery_spec.rb index 422baaa6096..afcff5025c2 100644 --- a/spec/lib/upload_recovery_spec.rb +++ b/spec/lib/upload_recovery_spec.rb @@ -4,7 +4,7 @@ require 'rails_helper' require_dependency "upload_recovery" RSpec.describe UploadRecovery do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } let(:upload) do UploadCreator.new( diff --git a/spec/mailers/invite_mailer_spec.rb b/spec/mailers/invite_mailer_spec.rb index d760501003a..153799424a5 100644 --- a/spec/mailers/invite_mailer_spec.rb +++ b/spec/mailers/invite_mailer_spec.rb @@ -9,7 +9,7 @@ describe InviteMailer do context "invite to site" do context "default invite message" do - let(:invite) { Fabricate(:invite) } + fab!(:invite) { Fabricate(:invite) } let(:invite_mail) { InviteMailer.send_invite(invite) } it 'renders the invitee email' do @@ -38,7 +38,7 @@ describe InviteMailer do end context "custom invite message" do - let(:invite) { Fabricate(:invite, custom_message: "Hey, you should join this forum!") } + fab!(:invite) { Fabricate(:invite, custom_message: "Hey, you should join this forum!") } context "custom message includes invite link" do let(:custom_invite_mail) { InviteMailer.send_invite(invite) } diff --git a/spec/mailers/rejection_mailer_spec.rb b/spec/mailers/rejection_mailer_spec.rb index 51219abafdf..7facc916351 100644 --- a/spec/mailers/rejection_mailer_spec.rb +++ b/spec/mailers/rejection_mailer_spec.rb @@ -7,7 +7,7 @@ describe RejectionMailer do describe "send_rejection" do context 'sends rejection email' do - let (:user) { Fabricate(:user) } + fab! (:user) { Fabricate(:user) } let (:template_args) { { former_title: "Mail Subject", destination: user.email, site_name: SiteSetting.title } } let (:reject_mail) { RejectionMailer.send_rejection("email_reject_topic_not_found", user.email, template_args) } diff --git a/spec/models/api_key_spec.rb b/spec/models/api_key_spec.rb index 3a3d978c3ce..288916e8b9f 100644 --- a/spec/models/api_key_spec.rb +++ b/spec/models/api_key_spec.rb @@ -5,7 +5,7 @@ require 'rails_helper' require_dependency 'api_key' describe ApiKey do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } it { is_expected.to belong_to :user } it { is_expected.to belong_to :created_by } diff --git a/spec/models/badge_spec.rb b/spec/models/badge_spec.rb index eefb238ea84..eecd44ad188 100644 --- a/spec/models/badge_spec.rb +++ b/spec/models/badge_spec.rb @@ -64,7 +64,7 @@ describe Badge do end describe '#manually_grantable?' do - let(:badge) { Fabricate(:badge, name: 'Test Badge') } + fab!(:badge) { Fabricate(:badge, name: 'Test Badge') } subject { badge.manually_grantable? } context 'when system badge' do diff --git a/spec/models/category_featured_topic_spec.rb b/spec/models/category_featured_topic_spec.rb index bd4f1e0506d..0812237863b 100644 --- a/spec/models/category_featured_topic_spec.rb +++ b/spec/models/category_featured_topic_spec.rb @@ -8,8 +8,8 @@ describe CategoryFeaturedTopic do it { is_expected.to belong_to :topic } context 'feature_topics_for' do - let(:user) { Fabricate(:user) } - let(:category) { Fabricate(:category) } + fab!(:user) { Fabricate(:user) } + fab!(:category) { Fabricate(:category) } let!(:category_post) { PostCreator.create(user, raw: "I put this post in the category", title: "categorize THIS", category: category.id) } it "works in batched mode" do diff --git a/spec/models/category_list_spec.rb b/spec/models/category_list_spec.rb index 108e09b4a12..a3b5bf3b950 100644 --- a/spec/models/category_list_spec.rb +++ b/spec/models/category_list_spec.rb @@ -5,8 +5,8 @@ require 'category_list' describe CategoryList do - let(:user) { Fabricate(:user) } - let(:admin) { Fabricate(:admin) } + fab!(:user) { Fabricate(:user) } + fab!(:admin) { Fabricate(:admin) } let(:category_list) { CategoryList.new(Guardian.new(user), include_topics: true) } context "security" do @@ -63,10 +63,10 @@ describe CategoryList do context "with a category" do - let!(:topic_category) { Fabricate(:category, num_featured_topics: 2) } + fab!(:topic_category) { Fabricate(:category, num_featured_topics: 2) } context "with a topic in a category" do - let!(:topic) { Fabricate(:topic, category: topic_category) } + fab!(:topic) { Fabricate(:topic, category: topic_category) } let(:category) { category_list.categories.find { |c| c.id == topic_category.id } } it "should return the category" do @@ -77,10 +77,10 @@ describe CategoryList do end context "with pinned topics in a category" do - let!(:topic1) { Fabricate(:topic, category: topic_category, bumped_at: 8.minutes.ago) } - let!(:topic2) { Fabricate(:topic, category: topic_category, bumped_at: 5.minutes.ago) } - let!(:topic3) { Fabricate(:topic, category: topic_category, bumped_at: 2.minutes.ago) } - let!(:pinned) { Fabricate(:topic, category: topic_category, pinned_at: 10.minutes.ago, bumped_at: 10.minutes.ago) } + fab!(:topic1) { Fabricate(:topic, category: topic_category, bumped_at: 8.minutes.ago) } + fab!(:topic2) { Fabricate(:topic, category: topic_category, bumped_at: 5.minutes.ago) } + fab!(:topic3) { Fabricate(:topic, category: topic_category, bumped_at: 2.minutes.ago) } + fab!(:pinned) { Fabricate(:topic, category: topic_category, pinned_at: 10.minutes.ago, bumped_at: 10.minutes.ago) } let(:category) { category_list.categories.find { |c| c.id == topic_category.id } } it "returns pinned topic first" do diff --git a/spec/models/category_spec.rb b/spec/models/category_spec.rb index 9ff217b4ded..c176b46161c 100644 --- a/spec/models/category_spec.rb +++ b/spec/models/category_spec.rb @@ -5,7 +5,7 @@ require 'rails_helper' require_dependency 'post_creator' describe Category do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } it { is_expected.to validate_presence_of :user_id } it { is_expected.to validate_presence_of :name } @@ -151,10 +151,10 @@ describe Category do end describe "security" do - let(:category) { Fabricate(:category) } - let(:category_2) { Fabricate(:category) } - let(:user) { Fabricate(:user) } - let(:group) { Fabricate(:group) } + fab!(:category) { Fabricate(:category) } + fab!(:category_2) { Fabricate(:category) } + fab!(:user) { Fabricate(:user) } + fab!(:group) { Fabricate(:group) } it "secures categories correctly" do expect(category.read_restricted?).to be false @@ -220,7 +220,7 @@ describe Category do end describe "short name" do - let!(:category) { Fabricate(:category, name: 'xx') } + fab!(:category) { Fabricate(:category, name: 'xx') } it "creates the category" do expect(category).to be_present @@ -615,14 +615,14 @@ describe Category do end describe "#url_with_id" do - let(:category) { Fabricate(:category, name: 'cats') } + fab!(:category) { Fabricate(:category, name: 'cats') } it "includes the id in the URL" do expect(category.url_with_id).to eq("/c/#{category.id}-cats") end context "child category" do - let(:child_category) { Fabricate(:category, parent_category_id: category.id, name: 'dogs') } + fab!(:child_category) { Fabricate(:category, parent_category_id: category.id, name: 'dogs') } it "includes the id in the URL" do expect(child_category.url_with_id).to eq("/c/cats/dogs/#{child_category.id}") @@ -644,8 +644,8 @@ describe Category do end describe "parent categories" do - let(:user) { Fabricate(:user) } - let(:parent_category) { Fabricate(:category, user: user) } + fab!(:user) { Fabricate(:user) } + fab!(:parent_category) { Fabricate(:category, user: user) } it "can be associated with a parent category" do sub_category = Fabricate.build(:category, parent_category_id: parent_category.id, user: user) @@ -705,7 +705,7 @@ describe Category do end describe "validate email_in" do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } it "works with a valid email" do expect(Category.new(name: 'test', user: user, email_in: 'test@example.com').valid?).to eq(true) @@ -718,7 +718,7 @@ describe Category do end context "with a duplicate email in a group" do - let(:group) { Fabricate(:group, name: 'testgroup', incoming_email: 'test@example.com') } + fab!(:group) { Fabricate(:group, name: 'testgroup', incoming_email: 'test@example.com') } it "adds an error with an invalid email" do category = Category.new(name: 'test', user: user, email_in: group.incoming_email) @@ -727,7 +727,7 @@ describe Category do end context "with duplicate email in a category" do - let!(:category) { Fabricate(:category, user: user, name: 'cool', email_in: 'test@example.com') } + fab!(:category) { Fabricate(:category, user: user, name: 'cool', email_in: 'test@example.com') } it "adds an error with an invalid email" do category = Category.new(name: 'test', user: user, email_in: "test@example.com") @@ -739,7 +739,7 @@ describe Category do end describe 'require topic/post approval' do - let(:category) { Fabricate(:category) } + fab!(:category) { Fabricate(:category) } describe '#require_topic_approval?' do before do @@ -818,12 +818,12 @@ describe Category do end describe "validate permissions compatibility" do - let(:admin) { Fabricate(:admin) } - let(:group) { Fabricate(:group) } - let(:group2) { Fabricate(:group) } - let(:parent_category) { Fabricate(:category, name: "parent") } - let(:subcategory) { Fabricate(:category, name: "child1", parent_category_id: parent_category.id) } - let(:subcategory2) { Fabricate(:category, name: "child2", parent_category_id: parent_category.id) } + fab!(:admin) { Fabricate(:admin) } + fab!(:group) { Fabricate(:group) } + fab!(:group2) { Fabricate(:group) } + fab!(:parent_category) { Fabricate(:category, name: "parent") } + fab!(:subcategory) { Fabricate(:category, name: "child1", parent_category_id: parent_category.id) } + fab!(:subcategory2) { Fabricate(:category, name: "child2", parent_category_id: parent_category.id) } context "when changing subcategory permissions" do it "it is not valid if permissions are less restrictive" do diff --git a/spec/models/discourse_single_sign_on_spec.rb b/spec/models/discourse_single_sign_on_spec.rb index 6787866f1d0..3bf8128bf31 100644 --- a/spec/models/discourse_single_sign_on_spec.rb +++ b/spec/models/discourse_single_sign_on_spec.rb @@ -606,7 +606,7 @@ describe DiscourseSingleSignOn do end context 'when sso_overrides_avatar is enabled' do - let!(:sso_record) { Fabricate(:single_sign_on_record, external_avatar_url: "http://example.com/an_image.png") } + fab!(:sso_record) { Fabricate(:single_sign_on_record, external_avatar_url: "http://example.com/an_image.png") } let!(:sso) { sso = DiscourseSingleSignOn.new @@ -686,7 +686,7 @@ describe DiscourseSingleSignOn do end context 'when sso_overrides_profile_background is enabled' do - let!(:sso_record) { Fabricate(:single_sign_on_record, external_profile_background_url: "http://example.com/an_image.png") } + fab!(:sso_record) { Fabricate(:single_sign_on_record, external_profile_background_url: "http://example.com/an_image.png") } let!(:sso) { sso = DiscourseSingleSignOn.new @@ -758,7 +758,7 @@ describe DiscourseSingleSignOn do end context 'when sso_overrides_card_background is enabled' do - let!(:sso_record) { Fabricate(:single_sign_on_record, external_card_background_url: "http://example.com/an_image.png") } + fab!(:sso_record) { Fabricate(:single_sign_on_record, external_card_background_url: "http://example.com/an_image.png") } let!(:sso) { sso = DiscourseSingleSignOn.new diff --git a/spec/models/draft_sequence_spec.rb b/spec/models/draft_sequence_spec.rb index 92ce3d298c0..5147f46a7c7 100644 --- a/spec/models/draft_sequence_spec.rb +++ b/spec/models/draft_sequence_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' describe DraftSequence do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } it 'should produce next sequence for a key' do expect(DraftSequence.next!(user, 'test')).to eq 1 diff --git a/spec/models/draft_spec.rb b/spec/models/draft_spec.rb index d10d132ef57..2cdf5fa5d46 100644 --- a/spec/models/draft_spec.rb +++ b/spec/models/draft_spec.rb @@ -67,7 +67,7 @@ describe Draft do end describe '#stream' do - let(:public_post) { Fabricate(:post) } + fab!(:public_post) { Fabricate(:post) } let(:public_topic) { public_post.topic } let(:stream) do diff --git a/spec/models/email_log_spec.rb b/spec/models/email_log_spec.rb index 806648e944c..e77c8ad9c6e 100644 --- a/spec/models/email_log_spec.rb +++ b/spec/models/email_log_spec.rb @@ -8,7 +8,7 @@ describe EmailLog do it { is_expected.to validate_presence_of :to_address } it { is_expected.to validate_presence_of :email_type } - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } context 'unique email per post' do it 'only allows through one email per post' do diff --git a/spec/models/email_token_spec.rb b/spec/models/email_token_spec.rb index 29f7f908254..50df6b10041 100644 --- a/spec/models/email_token_spec.rb +++ b/spec/models/email_token_spec.rb @@ -9,7 +9,7 @@ describe EmailToken do it { is_expected.to belong_to :user } context '#create' do - let(:user) { Fabricate(:user, active: false) } + fab!(:user) { Fabricate(:user, active: false) } let!(:original_token) { user.email_tokens.first } let!(:email_token) { user.email_tokens.create(email: 'bubblegum@adevnturetime.ooo') } @@ -46,7 +46,7 @@ describe EmailToken do context '#confirm' do - let(:user) { Fabricate(:user, active: false) } + fab!(:user) { Fabricate(:user, active: false) } let(:email_token) { user.email_tokens.first } it 'returns nil with a nil token' do @@ -122,8 +122,8 @@ describe EmailToken do Jobs.run_immediately! end - let(:invite) { Fabricate(:invite, email: 'test@example.com', user_id: nil) } - let(:invited_user) { Fabricate(:user, active: false, email: invite.email) } + fab!(:invite) { Fabricate(:invite, email: 'test@example.com', user_id: nil) } + fab!(:invited_user) { Fabricate(:user, active: false, email: invite.email) } let(:user_email_token) { invited_user.email_tokens.first } let!(:confirmed_invited_user) { EmailToken.confirm(user_email_token.token) } diff --git a/spec/models/embeddable_host_spec.rb b/spec/models/embeddable_host_spec.rb index 13fa4f019b6..bdcc060be32 100644 --- a/spec/models/embeddable_host_spec.rb +++ b/spec/models/embeddable_host_spec.rb @@ -58,7 +58,7 @@ describe EmbeddableHost do end describe "it works with ports" do - let!(:host) { Fabricate(:embeddable_host, host: 'localhost:8000') } + fab!(:host) { Fabricate(:embeddable_host, host: 'localhost:8000') } it "works as expected" do expect(EmbeddableHost.url_allowed?('http://localhost:8000/eviltrout')).to eq(true) @@ -66,7 +66,7 @@ describe EmbeddableHost do end describe "url_allowed?" do - let!(:host) { Fabricate(:embeddable_host) } + fab!(:host) { Fabricate(:embeddable_host) } it 'works as expected' do expect(EmbeddableHost.url_allowed?('http://eviltrout.com')).to eq(true) diff --git a/spec/models/given_daily_like_spec.rb b/spec/models/given_daily_like_spec.rb index 01c5d6a4de1..7c0d0e81a2d 100644 --- a/spec/models/given_daily_like_spec.rb +++ b/spec/models/given_daily_like_spec.rb @@ -10,7 +10,7 @@ describe GivenDailyLike do end context 'with a user' do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } def value_for(user_id, date) GivenDailyLike.find_for(user_id, date).pluck(:likes_given)[0] || 0 diff --git a/spec/models/group_history_spec.rb b/spec/models/group_history_spec.rb index dafa6162479..39898bc2fa2 100644 --- a/spec/models/group_history_spec.rb +++ b/spec/models/group_history_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' RSpec.describe GroupHistory do - let(:group_history) { Fabricate(:group_history) } + fab!(:group_history) { Fabricate(:group_history) } let(:other_group_history) do Fabricate(:group_history, diff --git a/spec/models/group_spec.rb b/spec/models/group_spec.rb index 1981efec4ab..aabb0389bc7 100644 --- a/spec/models/group_spec.rb +++ b/spec/models/group_spec.rb @@ -438,8 +438,8 @@ describe Group do end describe 'destroy' do - let(:user) { Fabricate(:user) } - let(:group) { Fabricate(:group, users: [user]) } + fab!(:user) { Fabricate(:user) } + fab!(:group) { Fabricate(:group, users: [user]) } before do group.add(user) @@ -516,7 +516,7 @@ describe Group do end context "group management" do - let(:group) { Fabricate(:group) } + fab!(:group) { Fabricate(:group) } it "by default has no managers" do expect(group.group_users.where('group_users.owner')).to be_empty @@ -552,15 +552,15 @@ describe Group do end describe 'when a user has qualified for trust level 1' do - let(:user) do + fab!(:user) do Fabricate(:user, trust_level: 1, created_at: Time.zone.now - 10.years ) end - let(:group) { Fabricate(:group, grant_trust_level: 1) } - let(:group2) { Fabricate(:group, grant_trust_level: 0) } + fab!(:group) { Fabricate(:group, grant_trust_level: 1) } + fab!(:group2) { Fabricate(:group, grant_trust_level: 0) } before do user.user_stat.update!( @@ -726,7 +726,7 @@ describe Group do end context 'when adding a user into a public group' do - let(:category) { Fabricate(:category) } + fab!(:category) { Fabricate(:category) } it "should publish the group's categories to the client" do group.update!(public_admission: true, categories: [category]) @@ -755,7 +755,7 @@ describe Group do end describe '.search_groups' do - let(:group) { Fabricate(:group, name: 'tEsT_more_things', full_name: 'Abc something awesome') } + fab!(:group) { Fabricate(:group, name: 'tEsT_more_things', full_name: 'Abc something awesome') } it 'should return the right groups' do group diff --git a/spec/models/incoming_link_spec.rb b/spec/models/incoming_link_spec.rb index ad1dad561c1..d913ea99223 100644 --- a/spec/models/incoming_link_spec.rb +++ b/spec/models/incoming_link_spec.rb @@ -4,9 +4,9 @@ require 'rails_helper' describe IncomingLink do - let(:sharing_user) { Fabricate(:user, name: 'Alice') } - let(:current_user) { Fabricate(:user, name: 'Bob') } - let(:post) { Fabricate(:post) } + fab!(:sharing_user) { Fabricate(:user, name: 'Alice') } + fab!(:current_user) { Fabricate(:user, name: 'Bob') } + fab!(:post) { Fabricate(:post) } let(:topic) { post.topic } let :incoming_link do diff --git a/spec/models/incoming_links_report_spec.rb b/spec/models/incoming_links_report_spec.rb index d2ae9230b30..12365ac5e17 100644 --- a/spec/models/incoming_links_report_spec.rb +++ b/spec/models/incoming_links_report_spec.rb @@ -123,10 +123,10 @@ describe IncomingLinksReport do describe 'top_referrers' do subject(:top_referrers) { IncomingLinksReport.find('top_referrers').as_json } - let(:amy) { Fabricate(:user, username: 'amy') } - let(:bob) { Fabricate(:user, username: 'bob') } - let(:post1) { Fabricate(:post) } - let(:post2) { Fabricate(:post) } + fab!(:amy) { Fabricate(:user, username: 'amy') } + fab!(:bob) { Fabricate(:user, username: 'bob') } + fab!(:post1) { Fabricate(:post) } + fab!(:post2) { Fabricate(:post) } let(:topic1) { post1.topic } let(:topic2) { post2.topic } diff --git a/spec/models/invite_redeemer_spec.rb b/spec/models/invite_redeemer_spec.rb index 33987f1f2c1..b370d92debd 100644 --- a/spec/models/invite_redeemer_spec.rb +++ b/spec/models/invite_redeemer_spec.rb @@ -50,7 +50,7 @@ describe InviteRedeemer do end describe "#redeem" do - let(:invite) { Fabricate(:invite) } + fab!(:invite) { Fabricate(:invite) } let(:name) { 'john snow' } let(:username) { 'kingofthenorth' } let(:password) { 'know5nOthiNG' } diff --git a/spec/models/invite_spec.rb b/spec/models/invite_spec.rb index 3b91bf50b8e..678b87ede42 100644 --- a/spec/models/invite_spec.rb +++ b/spec/models/invite_spec.rb @@ -11,8 +11,8 @@ describe Invite do let(:iceking) { 'iceking@adventuretime.ooo' } context 'user validators' do - let(:coding_horror) { Fabricate(:coding_horror) } - let(:user) { Fabricate(:user) } + fab!(:coding_horror) { Fabricate(:coding_horror) } + fab!(:user) { Fabricate(:user) } let(:invite) { Invite.create(email: user.email, invited_by: coding_horror) } it "should not allow an invite with the same email as an existing user" do @@ -26,7 +26,7 @@ describe Invite do end context 'email validators' do - let(:coding_horror) { Fabricate(:coding_horror) } + fab!(:coding_horror) { Fabricate(:coding_horror) } it "should not allow an invite with unformatted email address" do expect { @@ -62,7 +62,7 @@ describe Invite do end context 'to a topic' do - let!(:topic) { Fabricate(:topic) } + fab!(:topic) { Fabricate(:topic) } let(:inviter) { topic.user } context 'email' do @@ -141,7 +141,7 @@ describe Invite do end context 'when adding to another topic' do - let!(:another_topic) { Fabricate(:topic, user: topic.user) } + fab!(:another_topic) { Fabricate(:topic, user: topic.user) } it 'should be the same invite' do new_invite = Invite.invite_by_email(iceking, inviter, another_topic) @@ -176,8 +176,8 @@ describe Invite do end context 'an existing user' do - let(:topic) { Fabricate(:topic, category_id: nil, archetype: 'private_message') } - let(:coding_horror) { Fabricate(:coding_horror) } + fab!(:topic) { Fabricate(:topic, category_id: nil, archetype: 'private_message') } + fab!(:coding_horror) { Fabricate(:coding_horror) } it "works" do expect do @@ -199,7 +199,7 @@ describe Invite do context '.redeem' do - let(:invite) { Fabricate(:invite) } + let!(:invite) { Fabricate(:invite) } it 'creates a notification for the invitee' do expect { invite.redeem }.to change(Notification, :count) @@ -222,7 +222,7 @@ describe Invite do end context "deletes duplicate invites" do - let(:another_user) { Fabricate(:user) } + fab!(:another_user) { Fabricate(:user) } it 'delete duplicate invite' do another_invite = Fabricate(:invite, email: invite.email, invited_by: another_user) @@ -319,8 +319,8 @@ describe Invite do end context 'invited to topics' do - let(:tl2_user) { Fabricate(:user, trust_level: 2) } - let!(:topic) { Fabricate(:private_message_topic, user: tl2_user) } + fab!(:tl2_user) { Fabricate(:user, trust_level: 2) } + fab!(:topic) { Fabricate(:private_message_topic, user: tl2_user) } let!(:invite) do topic.invite(topic.user, 'jake@adventuretime.ooo') @@ -337,7 +337,7 @@ describe Invite do end context 'invited by another user to the same topic' do - let(:another_tl2_user) { Fabricate(:user, trust_level: 2) } + fab!(:another_tl2_user) { Fabricate(:user, trust_level: 2) } let!(:another_invite) { topic.invite(another_tl2_user, 'jake@adventuretime.ooo') } let!(:user) { invite.redeem } @@ -349,8 +349,8 @@ describe Invite do context 'invited by another user to a different topic' do let!(:user) { invite.redeem } - let(:another_tl2_user) { Fabricate(:user, trust_level: 2) } - let(:another_topic) { Fabricate(:topic, user: another_tl2_user) } + fab!(:another_tl2_user) { Fabricate(:user, trust_level: 2) } + fab!(:another_topic) { Fabricate(:topic, user: another_tl2_user) } it 'adds the user to the topic_users of the first topic' do expect(another_topic.invite(another_tl2_user, user.username)).to be_truthy # invited via username @@ -461,9 +461,9 @@ describe Invite do end describe '.redeem_from_email' do - let(:inviter) { Fabricate(:user) } - let(:invite) { Fabricate(:invite, invited_by: inviter, email: 'test@example.com', user_id: nil) } - let(:user) { Fabricate(:user, email: invite.email) } + fab!(:inviter) { Fabricate(:user) } + fab!(:invite) { Fabricate(:invite, invited_by: inviter, email: 'test@example.com', user_id: nil) } + fab!(:user) { Fabricate(:user, email: invite.email) } it 'redeems the invite from email' do Invite.redeem_from_email(user.email) diff --git a/spec/models/javascript_cache_spec.rb b/spec/models/javascript_cache_spec.rb index 28b06a2ea8c..73fa7241e43 100644 --- a/spec/models/javascript_cache_spec.rb +++ b/spec/models/javascript_cache_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' RSpec.describe JavascriptCache, type: :model do - let(:theme) { Fabricate(:theme) } + let!(:theme) { Fabricate(:theme) } let(:theme_field) { ThemeField.create!(theme: theme, target_id: 0, name: "header", value: "html") } describe '#save' do diff --git a/spec/models/post_action_spec.rb b/spec/models/post_action_spec.rb index 29bd1a9b81a..7b57be3e918 100644 --- a/spec/models/post_action_spec.rb +++ b/spec/models/post_action_spec.rb @@ -5,12 +5,12 @@ require 'rails_helper' describe PostAction do it { is_expected.to rate_limit } - let(:moderator) { Fabricate(:moderator) } - let(:codinghorror) { Fabricate(:coding_horror) } - let(:eviltrout) { Fabricate(:evil_trout) } - let(:admin) { Fabricate(:admin) } - let(:post) { Fabricate(:post) } - let(:second_post) { Fabricate(:post, topic: post.topic) } + fab!(:moderator) { Fabricate(:moderator) } + fab!(:codinghorror) { Fabricate(:coding_horror) } + fab!(:eviltrout) { Fabricate(:evil_trout) } + fab!(:admin) { Fabricate(:admin) } + fab!(:post) { Fabricate(:post) } + fab!(:second_post) { Fabricate(:post, topic: post.topic) } let(:bookmark) { PostAction.new(user_id: post.user_id, post_action_type_id: PostActionType.types[:bookmark] , post_id: post.id) } def value_for(user_id, dt) @@ -258,9 +258,9 @@ describe PostAction do end describe 'likes consolidation' do - let(:liker) { Fabricate(:user) } - let(:liker2) { Fabricate(:user) } - let(:likee) { Fabricate(:user) } + fab!(:liker) { Fabricate(:user) } + fab!(:liker2) { Fabricate(:user) } + fab!(:likee) { Fabricate(:user) } it "can be disabled" do SiteSetting.likes_notification_consolidation_threshold = 0 @@ -698,13 +698,13 @@ describe PostAction do end context "topic auto closing" do - let(:topic) { Fabricate(:topic) } + fab!(:topic) { Fabricate(:topic) } let(:post1) { create_post(topic: topic) } let(:post2) { create_post(topic: topic) } let(:post3) { create_post(topic: topic) } - let(:flagger1) { Fabricate(:user) } - let(:flagger2) { Fabricate(:user) } + fab!(:flagger1) { Fabricate(:user) } + fab!(:flagger2) { Fabricate(:user) } before do SiteSetting.score_required_to_hide_post = 0 @@ -751,8 +751,8 @@ describe PostAction do end context "on a staff post" do - let(:staff_user) { Fabricate(:user, moderator: true) } - let(:topic) { Fabricate(:topic, user: staff_user) } + fab!(:staff_user) { Fabricate(:user, moderator: true) } + fab!(:topic) { Fabricate(:topic, user: staff_user) } it "will not close topics opened by staff" do [flagger1, flagger2].each do |flagger| @@ -987,7 +987,7 @@ describe PostAction do end describe "triggers Discourse events" do - let(:post) { Fabricate(:post) } + fab!(:post) { Fabricate(:post) } it 'triggers a flag_created event' do event = DiscourseEvent.track(:flag_created) { PostActionCreator.spam(eviltrout, post) } diff --git a/spec/models/post_mover_spec.rb b/spec/models/post_mover_spec.rb index 5d68a5db975..7f7406b2249 100644 --- a/spec/models/post_mover_spec.rb +++ b/spec/models/post_mover_spec.rb @@ -22,8 +22,8 @@ describe PostMover do describe 'move_posts' do context 'topics' do - let(:user) { Fabricate(:user, admin: true) } - let(:another_user) { Fabricate(:evil_trout) } + fab!(:user) { Fabricate(:user, admin: true) } + fab!(:another_user) { Fabricate(:evil_trout) } let(:category) { Fabricate(:category, user: user) } let!(:topic) { Fabricate(:topic, user: user) } let!(:p1) { Fabricate(:post, topic: topic, user: user, created_at: 3.hours.ago) } @@ -38,7 +38,7 @@ describe PostMover do let!(:p3) { Fabricate(:post, topic: topic, reply_to_post_number: p1.post_number, user: user) } let!(:p4) { Fabricate(:post, topic: topic, reply_to_post_number: p2.post_number, user: user) } - let!(:p5) { Fabricate(:post) } + fab!(:p5) { Fabricate(:post) } let(:p6) { Fabricate(:post, topic: topic) } before do @@ -554,12 +554,12 @@ describe PostMover do end context 'messages' do - let(:user) { Fabricate(:user) } - let(:admin) { Fabricate(:admin) } - let(:evil_trout) { Fabricate(:evil_trout) } - let(:another_user) { Fabricate(:user) } - let(:regular_user) { Fabricate(:trust_level_4) } - let(:topic) { Fabricate(:topic) } + fab!(:user) { Fabricate(:user) } + fab!(:admin) { Fabricate(:admin) } + fab!(:evil_trout) { Fabricate(:evil_trout) } + fab!(:another_user) { Fabricate(:user) } + fab!(:regular_user) { Fabricate(:trust_level_4) } + fab!(:topic) { Fabricate(:topic) } let(:personal_message) { Fabricate(:private_message_topic, user: evil_trout) } let!(:p1) { Fabricate(:post, topic: personal_message, user: user) } let!(:p2) { Fabricate(:post, topic: personal_message, reply_to_post_number: p1.post_number, user: another_user) } @@ -682,10 +682,10 @@ describe PostMover do end context 'banner topic' do - let(:admin) { Fabricate(:admin) } - let(:evil_trout) { Fabricate(:evil_trout) } - let(:regular_user) { Fabricate(:trust_level_4) } - let(:topic) { Fabricate(:topic) } + fab!(:admin) { Fabricate(:admin) } + fab!(:evil_trout) { Fabricate(:evil_trout) } + fab!(:regular_user) { Fabricate(:trust_level_4) } + fab!(:topic) { Fabricate(:topic) } let(:personal_message) { Fabricate(:private_message_topic, user: regular_user) } let(:banner_topic) { Fabricate(:banner_topic, user: evil_trout) } let!(:p1) { Fabricate(:post, topic: banner_topic, user: evil_trout) } diff --git a/spec/models/post_reply_spec.rb b/spec/models/post_reply_spec.rb index f4a1b30e071..9f808f5dc2c 100644 --- a/spec/models/post_reply_spec.rb +++ b/spec/models/post_reply_spec.rb @@ -3,9 +3,9 @@ require 'rails_helper' describe PostReply do - let(:topic) { Fabricate(:topic) } - let(:post) { Fabricate(:post, topic: topic) } - let(:other_post) { Fabricate(:post, topic: topic) } + fab!(:topic) { Fabricate(:topic) } + fab!(:post) { Fabricate(:post, topic: topic) } + fab!(:other_post) { Fabricate(:post, topic: topic) } it { is_expected.to belong_to :post } it { is_expected.to belong_to :reply } diff --git a/spec/models/post_spec.rb b/spec/models/post_spec.rb index be6cfeff408..b6edeb6bf0a 100644 --- a/spec/models/post_spec.rb +++ b/spec/models/post_spec.rb @@ -155,9 +155,9 @@ describe Post do end describe 'flagging helpers' do - let(:post) { Fabricate(:post) } - let(:user) { Fabricate(:coding_horror) } - let(:admin) { Fabricate(:admin) } + fab!(:post) { Fabricate(:post) } + fab!(:user) { Fabricate(:coding_horror) } + fab!(:admin) { Fabricate(:admin) } it 'is_flagged? is accurate' do PostActionCreator.off_topic(user, post) @@ -197,7 +197,7 @@ describe Post do end describe "maximum images" do - let(:newuser) { Fabricate(:user, trust_level: TrustLevel[0]) } + fab!(:newuser) { Fabricate(:user, trust_level: TrustLevel[0]) } let(:post_no_images) { Fabricate.build(:post, post_args.merge(user: newuser)) } let(:post_one_image) { post_with_body("![sherlock](http://bbc.co.uk/sherlock.jpg)", newuser) } let(:post_two_images) { post_with_body(" ", newuser) } @@ -311,7 +311,7 @@ describe Post do end describe "maximum attachments" do - let(:newuser) { Fabricate(:user, trust_level: TrustLevel[0]) } + fab!(:newuser) { Fabricate(:user, trust_level: TrustLevel[0]) } let(:post_no_attachments) { Fabricate.build(:post, post_args.merge(user: newuser)) } let(:post_one_attachment) { post_with_body('file.txt', newuser) } let(:post_two_attachments) { post_with_body('errors.log model.3ds', newuser) } @@ -359,7 +359,7 @@ describe Post do end context "links" do - let(:newuser) { Fabricate(:user, trust_level: TrustLevel[0]) } + fab!(:newuser) { Fabricate(:user, trust_level: TrustLevel[0]) } let(:no_links) { post_with_body("hello world my name is evil trout", newuser) } let(:one_link) { post_with_body("[jlawr](http://www.imdb.com/name/nm2225369)", newuser) } let(:two_links) { post_with_body("disney reddit", newuser) } @@ -423,7 +423,7 @@ describe Post do end describe "maximums" do - let(:newuser) { Fabricate(:user, trust_level: TrustLevel[0]) } + fab!(:newuser) { Fabricate(:user, trust_level: TrustLevel[0]) } let(:post_one_link) { post_with_body("[sherlock](http://www.bbc.co.uk/programmes/b018ttws)", newuser) } let(:post_onebox) { post_with_body("http://www.google.com", newuser) } let(:post_code_link) { post_with_body("http://www.google.com", newuser) } @@ -548,7 +548,7 @@ describe Post do context "max mentions" do - let(:newuser) { Fabricate(:user, trust_level: TrustLevel[0]) } + fab!(:newuser) { Fabricate(:user, trust_level: TrustLevel[0]) } let(:post_with_one_mention) { post_with_body("@Jake is the person I'm mentioning", newuser) } let(:post_with_two_mentions) { post_with_body("@Jake @Finn are the people I'm mentioning", newuser) } @@ -787,7 +787,7 @@ describe Post do describe 'a new reply' do - let(:topic) { Fabricate(:topic) } + fab!(:topic) { Fabricate(:topic) } let(:other_user) { Fabricate(:coding_horror) } let(:reply_text) { "[quote=\"Evil Trout, post:1\"]\nhello\n[/quote]\nHmmm!" } let!(:post) { PostCreator.new(topic.user, raw: Fabricate.build(:post).raw, topic_id: topic.id).create } @@ -844,7 +844,7 @@ describe Post do let!(:p1) { Fabricate(:post, post_args.merge(score: 4, percent_rank: 0.33)) } let!(:p2) { Fabricate(:post, post_args.merge(score: 10, percent_rank: 0.66)) } let!(:p3) { Fabricate(:post, post_args.merge(score: 5, percent_rank: 0.99)) } - let!(:p4) { Fabricate(:post, percent_rank: 0.99) } + fab!(:p4) { Fabricate(:post, percent_rank: 0.99) } it "returns the OP and posts above the threshold in summary mode" do SiteSetting.summary_percent_filter = 66 @@ -884,7 +884,7 @@ describe Post do context "reply_ids" do - let!(:topic) { Fabricate(:topic) } + fab!(:topic) { Fabricate(:topic) } let!(:p1) { Fabricate(:post, topic: topic, post_number: 1) } let!(:p2) { Fabricate(:post, topic: topic, post_number: 2, reply_to_post_number: 1) } let!(:p3) { Fabricate(:post, topic: topic, post_number: 3) } @@ -983,7 +983,7 @@ describe Post do end describe 'mentions' do - let(:group) do + fab!(:group) do Fabricate(:group, mentionable_level: Group::ALIAS_LEVELS[:members_mods_and_admins] ) @@ -1110,8 +1110,8 @@ describe Post do end describe "#set_owner" do - let(:post) { Fabricate(:post) } - let(:coding_horror) { Fabricate(:coding_horror) } + fab!(:post) { Fabricate(:post) } + fab!(:coding_horror) { Fabricate(:coding_horror) } it "will change owner of a post correctly" do post.set_owner(coding_horror, Discourse.system_user) @@ -1229,25 +1229,25 @@ describe Post do end describe '#link_post_uploads' do - let(:video_upload) do + fab!(:video_upload) do Fabricate(:upload, url: '/uploads/default/original/1X/1/1234567890123456.mp4' ) end - let(:image_upload) do + fab!(:image_upload) do Fabricate(:upload, url: '/uploads/default/original/1X/1/1234567890123456.jpg' ) end - let(:audio_upload) do + fab!(:audio_upload) do Fabricate(:upload, url: '/uploads/default/original/1X/1/1234567890123456.ogg' ) end - let(:attachment_upload) do + fab!(:attachment_upload) do Fabricate(:upload, url: '/uploads/default/original/1X/1/1234567890123456.csv' ) diff --git a/spec/models/post_timing_spec.rb b/spec/models/post_timing_spec.rb index dc52290f78b..9700484312e 100644 --- a/spec/models/post_timing_spec.rb +++ b/spec/models/post_timing_spec.rb @@ -8,9 +8,9 @@ describe PostTiming do it { is_expected.to validate_presence_of :msecs } describe 'pretend_read' do - let!(:p1) { Fabricate(:post) } - let!(:p2) { Fabricate(:post, topic: p1.topic, user: p1.user) } - let!(:p3) { Fabricate(:post, topic: p1.topic, user: p1.user) } + fab!(:p1) { Fabricate(:post) } + fab!(:p2) { Fabricate(:post, topic: p1.topic, user: p1.user) } + fab!(:p3) { Fabricate(:post, topic: p1.topic, user: p1.user) } let :topic_id do p1.topic_id diff --git a/spec/models/reviewable_flagged_post_spec.rb b/spec/models/reviewable_flagged_post_spec.rb index 4ca31603315..e60d8180f21 100644 --- a/spec/models/reviewable_flagged_post_spec.rb +++ b/spec/models/reviewable_flagged_post_spec.rb @@ -8,9 +8,9 @@ RSpec.describe ReviewableFlaggedPost, type: :model do ReviewableFlaggedPost.default_visible.pending.count end - let(:user) { Fabricate(:user) } - let(:post) { Fabricate(:post) } - let(:moderator) { Fabricate(:moderator) } + fab!(:user) { Fabricate(:user) } + fab!(:post) { Fabricate(:post) } + fab!(:moderator) { Fabricate(:moderator) } it "sets `potential_spam` when a spam flag is added" do reviewable = PostActionCreator.off_topic(user, post).reviewable diff --git a/spec/models/reviewable_history_spec.rb b/spec/models/reviewable_history_spec.rb index 322745a9f8a..6d438aee9df 100644 --- a/spec/models/reviewable_history_spec.rb +++ b/spec/models/reviewable_history_spec.rb @@ -4,9 +4,9 @@ require 'rails_helper' RSpec.describe ReviewableHistory, type: :model do - let(:user) { Fabricate(:user) } - let(:admin) { Fabricate(:admin) } - let(:moderator) { Fabricate(:moderator) } + fab!(:user) { Fabricate(:user) } + fab!(:admin) { Fabricate(:admin) } + fab!(:moderator) { Fabricate(:moderator) } it "adds a `created` history event when a reviewable is created" do reviewable = ReviewableUser.needs_review!(target: user, created_by: admin) diff --git a/spec/models/reviewable_queued_post_spec.rb b/spec/models/reviewable_queued_post_spec.rb index 08478c6d57e..11cf5ac9ef2 100644 --- a/spec/models/reviewable_queued_post_spec.rb +++ b/spec/models/reviewable_queued_post_spec.rb @@ -4,8 +4,8 @@ require 'rails_helper' RSpec.describe ReviewableQueuedPost, type: :model do - let!(:category) { Fabricate(:category) } - let(:moderator) { Fabricate(:moderator) } + fab!(:category) { Fabricate(:category) } + fab!(:moderator) { Fabricate(:moderator) } context "creating a post" do let!(:topic) { Fabricate(:topic, category: category) } diff --git a/spec/models/reviewable_score_spec.rb b/spec/models/reviewable_score_spec.rb index e64859c0f2f..3072cd3ee28 100644 --- a/spec/models/reviewable_score_spec.rb +++ b/spec/models/reviewable_score_spec.rb @@ -5,9 +5,9 @@ require 'rails_helper' RSpec.describe ReviewableScore, type: :model do context "transitions" do - let(:user) { Fabricate(:user, trust_level: 3) } - let(:post) { Fabricate(:post) } - let(:moderator) { Fabricate(:moderator) } + fab!(:user) { Fabricate(:user, trust_level: 3) } + fab!(:post) { Fabricate(:post) } + fab!(:moderator) { Fabricate(:moderator) } it "scores agreements properly" do reviewable = PostActionCreator.off_topic(user, post).reviewable @@ -49,11 +49,11 @@ RSpec.describe ReviewableScore, type: :model do end describe "overall score" do - let(:user0) { Fabricate(:user, trust_level: 1) } - let(:user1) { Fabricate(:user, trust_level: 2) } - let(:user2) { Fabricate(:user, trust_level: 3) } - let(:moderator) { Fabricate(:moderator) } - let(:post) { Fabricate(:post) } + fab!(:user0) { Fabricate(:user, trust_level: 1) } + fab!(:user1) { Fabricate(:user, trust_level: 2) } + fab!(:user2) { Fabricate(:user, trust_level: 3) } + fab!(:moderator) { Fabricate(:moderator) } + fab!(:post) { Fabricate(:post) } let(:topic) { post.topic } it "gives a bonus for take_action" do @@ -89,7 +89,7 @@ RSpec.describe ReviewableScore, type: :model do end describe ".user_accuracy_bonus" do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } let(:user_stat) { user.user_stat } it "returns 0 for a user with no flags" do @@ -129,7 +129,7 @@ RSpec.describe ReviewableScore, type: :model do end context "a user with some flags" do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } let(:user_stat) { user.user_stat } it "returns 1.0 + trust_level + accuracy_bonus" do diff --git a/spec/models/reviewable_spec.rb b/spec/models/reviewable_spec.rb index fdc51e5814c..f2d175ba2ab 100644 --- a/spec/models/reviewable_spec.rb +++ b/spec/models/reviewable_spec.rb @@ -5,8 +5,8 @@ require 'rails_helper' RSpec.describe Reviewable, type: :model do context ".create" do - let(:admin) { Fabricate(:admin) } - let(:user) { Fabricate(:user) } + fab!(:admin) { Fabricate(:admin) } + fab!(:user) { Fabricate(:user) } let(:reviewable) { Fabricate.build(:reviewable, created_by: admin) } @@ -34,8 +34,8 @@ RSpec.describe Reviewable, type: :model do end context ".needs_review!" do - let(:admin) { Fabricate(:admin) } - let(:user) { Fabricate(:user) } + fab!(:admin) { Fabricate(:admin) } + fab!(:user) { Fabricate(:user) } it "will return a new reviewable the first them, and re-use the second time" do r0 = ReviewableUser.needs_review!(target: user, created_by: admin) @@ -81,14 +81,14 @@ RSpec.describe Reviewable, type: :model do end context ".list_for" do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } it "returns an empty list for nil user" do expect(Reviewable.list_for(nil)).to eq([]) end context "with a pending item" do - let(:post) { Fabricate(:post) } + fab!(:post) { Fabricate(:post) } let(:reviewable) { Fabricate(:reviewable, target: post) } it "works with the reviewable by moderator flag" do @@ -160,11 +160,11 @@ RSpec.describe Reviewable, type: :model do end context "with a category restriction" do - let(:category) { Fabricate(:category, read_restricted: true) } + fab!(:category) { Fabricate(:category, read_restricted: true) } let(:topic) { Fabricate(:topic, category: category) } let(:post) { Fabricate(:post, topic: topic) } - let!(:moderator) { Fabricate(:moderator) } - let(:admin) { Fabricate(:admin) } + fab!(:moderator) { Fabricate(:moderator) } + fab!(:admin) { Fabricate(:admin) } it "respects category id on the reviewable" do Group.refresh_automatic_group!(:staff) @@ -217,7 +217,7 @@ RSpec.describe Reviewable, type: :model do end context "message bus notifications" do - let(:moderator) { Fabricate(:moderator) } + fab!(:moderator) { Fabricate(:moderator) } it "triggers a notification on create" do Jobs.expects(:enqueue).with(:notify_reviewable, has_key(:reviewable_id)) @@ -251,8 +251,8 @@ RSpec.describe Reviewable, type: :model do end describe "flag_stats" do - let(:user) { Fabricate(:user) } - let(:post) { Fabricate(:post) } + fab!(:user) { Fabricate(:user) } + fab!(:post) { Fabricate(:post) } let(:reviewable) { PostActionCreator.spam(user, post).reviewable } it "increases flags_agreed when agreed" do diff --git a/spec/models/reviewable_user_spec.rb b/spec/models/reviewable_user_spec.rb index e59c07146f3..bb0899b6bce 100644 --- a/spec/models/reviewable_user_spec.rb +++ b/spec/models/reviewable_user_spec.rb @@ -4,16 +4,16 @@ require 'rails_helper' RSpec.describe ReviewableUser, type: :model do - let(:moderator) { Fabricate(:moderator) } + fab!(:moderator) { Fabricate(:moderator) } let(:user) do user = Fabricate(:user) user.activate user end - let(:admin) { Fabricate(:admin) } + fab!(:admin) { Fabricate(:admin) } context "actions_for" do - let(:reviewable) { Fabricate(:reviewable) } + fab!(:reviewable) { Fabricate(:reviewable) } it "returns correct actions in the pending state" do actions = reviewable.actions_for(Guardian.new(moderator)) expect(actions.has?(:approve_user)).to eq(true) @@ -30,8 +30,8 @@ RSpec.describe ReviewableUser, type: :model do end context "#update_fields" do - let(:moderator) { Fabricate(:moderator) } - let(:reviewable) { Fabricate(:reviewable) } + fab!(:moderator) { Fabricate(:moderator) } + fab!(:reviewable) { Fabricate(:reviewable) } it "doesn't raise errors with an empty update" do expect(reviewable.update_fields(nil, moderator)).to eq(true) @@ -52,7 +52,7 @@ RSpec.describe ReviewableUser, type: :model do end context "perform" do - let(:reviewable) { Fabricate(:reviewable) } + fab!(:reviewable) { Fabricate(:reviewable) } context "approve" do it "allows us to approve a user" do result = reviewable.perform(moderator, :approve_user) diff --git a/spec/models/screened_ip_address_spec.rb b/spec/models/screened_ip_address_spec.rb index 89de5796205..84876a122ff 100644 --- a/spec/models/screened_ip_address_spec.rb +++ b/spec/models/screened_ip_address_spec.rb @@ -137,13 +137,13 @@ describe ScreenedIpAddress do end context 'using exact match' do - let!(:existing) { Fabricate(:screened_ip_address) } + fab!(:existing) { Fabricate(:screened_ip_address) } let(:ip_address_arg) { existing.ip_address } include_examples 'exact match of ip address' end context 'using subnet mask 255.255.255.0' do - let!(:existing) { Fabricate(:screened_ip_address, ip_address: '99.232.23.124/24') } + fab!(:existing) { Fabricate(:screened_ip_address, ip_address: '99.232.23.124/24') } context 'at exact address' do let(:ip_address_arg) { '99.232.23.124' } diff --git a/spec/models/search_log_spec.rb b/spec/models/search_log_spec.rb index 5cc2be0a05e..568b1653f93 100644 --- a/spec/models/search_log_spec.rb +++ b/spec/models/search_log_spec.rb @@ -89,7 +89,7 @@ RSpec.describe SearchLog, type: :model do end context "when logged in" do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } it "logs and updates the search" do freeze_time @@ -205,7 +205,7 @@ RSpec.describe SearchLog, type: :model do end context "trending" do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } before do SearchLog.log(term: 'ruby', search_type: :header, ip_address: '127.0.0.1') SearchLog.log(term: 'php', search_type: :header, ip_address: '127.0.0.1') diff --git a/spec/models/tag_group_spec.rb b/spec/models/tag_group_spec.rb index d8fd5702057..ef00c45e1c8 100644 --- a/spec/models/tag_group_spec.rb +++ b/spec/models/tag_group_spec.rb @@ -4,25 +4,25 @@ require 'rails_helper' describe TagGroup do describe '#visible' do - let(:user1) { Fabricate(:user) } - let(:user2) { Fabricate(:user) } - let(:admin) { Fabricate(:admin) } - let(:moderator) { Fabricate(:moderator) } + fab!(:user1) { Fabricate(:user) } + fab!(:user2) { Fabricate(:user) } + fab!(:admin) { Fabricate(:admin) } + fab!(:moderator) { Fabricate(:moderator) } - let(:group) { Fabricate(:group) } + fab!(:group) { Fabricate(:group) } - let!(:everyone_tag_group) { Fabricate(:tag_group, name: 'Visible & usable by everyone', tag_names: ['foo-bar']) } - let!(:visible_tag_group) { Fabricate(:tag_group, name: 'Visible by everyone, usable by staff', tag_names: ['foo']) } - let!(:staff_only_tag_group) { Fabricate(:tag_group, name: 'Staff only', tag_names: ['bar']) } + fab!(:everyone_tag_group) { Fabricate(:tag_group, name: 'Visible & usable by everyone', tag_names: ['foo-bar']) } + fab!(:visible_tag_group) { Fabricate(:tag_group, name: 'Visible by everyone, usable by staff', tag_names: ['foo']) } + fab!(:staff_only_tag_group) { Fabricate(:tag_group, name: 'Staff only', tag_names: ['bar']) } - let!(:public_tag_group) { Fabricate(:tag_group, name: 'Public', tag_names: ['public1']) } - let!(:private_tag_group) { Fabricate(:tag_group, name: 'Private', tag_names: ['privatetag1']) } - let!(:staff_tag_group) { Fabricate(:tag_group, name: 'Staff Talk', tag_names: ['stafftag1']) } - let!(:unrestricted_tag_group) { Fabricate(:tag_group, name: 'Unrestricted', tag_names: ['use-anywhere']) } + fab!(:public_tag_group) { Fabricate(:tag_group, name: 'Public', tag_names: ['public1']) } + fab!(:private_tag_group) { Fabricate(:tag_group, name: 'Private', tag_names: ['privatetag1']) } + fab!(:staff_tag_group) { Fabricate(:tag_group, name: 'Staff Talk', tag_names: ['stafftag1']) } + fab!(:unrestricted_tag_group) { Fabricate(:tag_group, name: 'Unrestricted', tag_names: ['use-anywhere']) } - let!(:public_category) { Fabricate(:category, name: 'Public Category') } - let!(:private_category) { Fabricate(:private_category, group: group) } - let!(:staff_category) { Fabricate(:category, name: 'Secret') } + fab!(:public_category) { Fabricate(:category, name: 'Public Category') } + fab!(:private_category) { Fabricate(:private_category, group: group) } + fab!(:staff_category) { Fabricate(:category, name: 'Secret') } let(:everyone) { Group::AUTO_GROUPS[:everyone] } let(:staff) { Group::AUTO_GROUPS[:staff] } diff --git a/spec/models/tag_user_spec.rb b/spec/models/tag_user_spec.rb index d9d26a94011..cce48a6a090 100644 --- a/spec/models/tag_user_spec.rb +++ b/spec/models/tag_user_spec.rb @@ -69,10 +69,10 @@ describe TagUser do end context "integration" do - let(:user) { Fabricate(:user) } - let(:watched_tag) { Fabricate(:tag) } + fab!(:user) { Fabricate(:user) } + fab!(:watched_tag) { Fabricate(:tag) } let(:muted_tag) { Fabricate(:tag) } - let(:tracked_tag) { Fabricate(:tag) } + fab!(:tracked_tag) { Fabricate(:tag) } context "with some tag notification settings" do before do diff --git a/spec/models/theme_spec.rb b/spec/models/theme_spec.rb index 1f6eac07635..9d8fa631f69 100644 --- a/spec/models/theme_spec.rb +++ b/spec/models/theme_spec.rb @@ -7,7 +7,7 @@ describe Theme do Theme.clear_cache! end - let :user do + fab! :user do Fabricate(:user) end diff --git a/spec/models/top_topic_spec.rb b/spec/models/top_topic_spec.rb index e085982e95c..1d49694bcad 100644 --- a/spec/models/top_topic_spec.rb +++ b/spec/models/top_topic_spec.rb @@ -24,8 +24,8 @@ describe TopTopic do context "refresh!" do - let!(:t1) { Fabricate(:topic) } - let!(:t2) { Fabricate(:topic) } + fab!(:t1) { Fabricate(:topic) } + fab!(:t2) { Fabricate(:topic) } it "begins blank" do expect(TopTopic.all).to be_blank @@ -45,18 +45,18 @@ describe TopTopic do describe "#compute_top_score_for" do - let(:user) { Fabricate(:user) } - let(:coding_horror) { Fabricate(:coding_horror) } + fab!(:user) { Fabricate(:user) } + fab!(:coding_horror) { Fabricate(:coding_horror) } - let!(:topic_1) { Fabricate(:topic, posts_count: 10, like_count: 28) } - let!(:t1_post_1) { Fabricate(:post, topic: topic_1, like_count: 28, post_number: 1) } + fab!(:topic_1) { Fabricate(:topic, posts_count: 10, like_count: 28) } + fab!(:t1_post_1) { Fabricate(:post, topic: topic_1, like_count: 28, post_number: 1) } - let!(:topic_2) { Fabricate(:topic, posts_count: 10, like_count: 20) } - let!(:t2_post_1) { Fabricate(:post, topic: topic_2, like_count: 10, post_number: 1) } - let!(:t2_post_2) { Fabricate(:post, topic: topic_2, like_count: 10) } + fab!(:topic_2) { Fabricate(:topic, posts_count: 10, like_count: 20) } + fab!(:t2_post_1) { Fabricate(:post, topic: topic_2, like_count: 10, post_number: 1) } + fab!(:t2_post_2) { Fabricate(:post, topic: topic_2, like_count: 10) } - let!(:topic_3) { Fabricate(:topic, posts_count: 10) } - let!(:t3_post_1) { Fabricate(:post, topic_id: topic_3.id) } + fab!(:topic_3) { Fabricate(:topic, posts_count: 10) } + fab!(:t3_post_1) { Fabricate(:post, topic_id: topic_3.id) } let!(:t3_view_1) { TopicViewItem.add(topic_3.id, '127.0.0.1', user) } let!(:t3_view_2) { TopicViewItem.add(topic_3.id, '127.0.0.2', coding_horror) } diff --git a/spec/models/topic_converter_spec.rb b/spec/models/topic_converter_spec.rb index f37fd1436e4..15fadd18be2 100644 --- a/spec/models/topic_converter_spec.rb +++ b/spec/models/topic_converter_spec.rb @@ -5,10 +5,10 @@ require 'rails_helper' describe TopicConverter do context 'convert_to_public_topic' do - let(:admin) { Fabricate(:admin) } - let(:author) { Fabricate(:user) } - let(:category) { Fabricate(:category, topic_count: 1) } - let(:private_message) { Fabricate(:private_message_topic, user: author) } # creates a topic without a first post + fab!(:admin) { Fabricate(:admin) } + fab!(:author) { Fabricate(:user) } + fab!(:category) { Fabricate(:category, topic_count: 1) } + fab!(:private_message) { Fabricate(:private_message_topic, user: author) } # creates a topic without a first post let(:first_post) { create_post(user: author, topic: private_message) } let(:other_user) { private_message.topic_allowed_users.find { |u| u.user != author }.user } @@ -94,11 +94,11 @@ describe TopicConverter do end context 'convert_to_private_message' do - let(:admin) { Fabricate(:admin) } - let(:author) { Fabricate(:user) } - let(:category) { Fabricate(:category) } - let(:topic) { Fabricate(:topic, user: author, category_id: category.id) } - let!(:post) { Fabricate(:post, topic: topic) } + fab!(:admin) { Fabricate(:admin) } + fab!(:author) { Fabricate(:user) } + fab!(:category) { Fabricate(:category) } + fab!(:topic) { Fabricate(:topic, user: author, category_id: category.id) } + fab!(:post) { Fabricate(:post, topic: topic) } context 'success' do it "converts regular topic to private message" do diff --git a/spec/models/topic_embed_spec.rb b/spec/models/topic_embed_spec.rb index b6c61f1f7a4..71c60afb3ab 100644 --- a/spec/models/topic_embed_spec.rb +++ b/spec/models/topic_embed_spec.rb @@ -11,11 +11,11 @@ describe TopicEmbed do context '.import' do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } let(:title) { "How to turn a fish from good to evil in 30 seconds" } let(:url) { 'http://eviltrout.com/123' } let(:contents) { "hello world new post hello " } - let!(:embeddable_host) { Fabricate(:embeddable_host) } + fab!(:embeddable_host) { Fabricate(:embeddable_host) } it "returns nil when the URL is malformed" do expect(TopicEmbed.import(user, "invalid url", title, contents)).to eq(nil) @@ -113,7 +113,7 @@ describe TopicEmbed do let(:url) { 'http://eviltrout.com/123' } let(:contents) { "Through the Looking Glass - Classic Bookssome content here" } - let!(:embeddable_host) { Fabricate(:embeddable_host) } + fab!(:embeddable_host) { Fabricate(:embeddable_host) } let!(:file) { StringIO.new } before do @@ -135,10 +135,10 @@ describe TopicEmbed do end context 'post with allowed classes "foo" and "emoji"' do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } let(:url) { 'http://eviltrout.com/123' } let(:contents) { "my normal size emoji

Hi

" } - let!(:embeddable_host) { Fabricate(:embeddable_host) } + fab!(:embeddable_host) { Fabricate(:embeddable_host) } let!(:file) { StringIO.new } response = nil @@ -172,10 +172,10 @@ describe TopicEmbed do end context 'post with author metadata' do - let!(:user) { Fabricate(:user, username: 'eviltrout') } + fab!(:user) { Fabricate(:user, username: 'eviltrout') } let(:url) { 'http://eviltrout.com/321' } let(:contents) { 'rich and morty' } - let!(:embeddable_host) { Fabricate(:embeddable_host) } + fab!(:embeddable_host) { Fabricate(:embeddable_host) } let!(:file) { StringIO.new } response = nil @@ -193,10 +193,10 @@ describe TopicEmbed do context 'post with no allowed classes' do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } let(:url) { 'http://eviltrout.com/123' } let(:contents) { "my normal size emoji

Hi

" } - let!(:embeddable_host) { Fabricate(:embeddable_host) } + fab!(:embeddable_host) { Fabricate(:embeddable_host) } let!(:file) { StringIO.new } response = nil @@ -228,7 +228,7 @@ describe TopicEmbed do context "non-ascii URL" do let(:url) { 'http://eviltrout.com/test/ماهی' } let(:contents) { "سلاماین یک پاراگراف آزمون است." } - let!(:embeddable_host) { Fabricate(:embeddable_host) } + fab!(:embeddable_host) { Fabricate(:embeddable_host) } let!(:file) { StringIO.new } before do @@ -246,7 +246,7 @@ describe TopicEmbed do context "encoded URL" do let(:url) { 'http://example.com/hello%20world' } let(:contents) { "Hello World!" } - let!(:embeddable_host) { Fabricate(:embeddable_host) } + fab!(:embeddable_host) { Fabricate(:embeddable_host) } let!(:file) { StringIO.new } before do @@ -264,7 +264,7 @@ describe TopicEmbed do context "emails" do let(:url) { 'http://example.com/foo' } let(:contents) { '

URL encoded @ symbol

normal mailto link

' } - let!(:embeddable_host) { Fabricate(:embeddable_host) } + fab!(:embeddable_host) { Fabricate(:embeddable_host) } let!(:file) { StringIO.new } before do diff --git a/spec/models/topic_link_click_spec.rb b/spec/models/topic_link_click_spec.rb index 1b72ed253e8..121bb872213 100644 --- a/spec/models/topic_link_click_spec.rb +++ b/spec/models/topic_link_click_spec.rb @@ -80,7 +80,7 @@ describe TopicLinkClick do end context 'while logged in' do - let(:other_user) { Fabricate(:user) } + fab!(:other_user) { Fabricate(:user) } before do @url = TopicLinkClick.create_from(url: @topic_link.url, post_id: @post.id, ip: '127.0.0.1', user_id: other_user.id) @click = TopicLinkClick.last diff --git a/spec/models/topic_link_spec.rb b/spec/models/topic_link_spec.rb index b80e86007a2..5ed450bbd13 100644 --- a/spec/models/topic_link_spec.rb +++ b/spec/models/topic_link_spec.rb @@ -10,15 +10,15 @@ describe TopicLink do URI.parse(Discourse.base_url) end - let(:topic) do + fab!(:topic) do Fabricate(:topic, title: 'unique topic name') end - let(:user) do + fab!(:user) do topic.user end - let(:post) { Fabricate(:post) } + fab!(:post) { Fabricate(:post) } it "can't link to the same topic" do ftl = TopicLink.new(url: "/t/#{topic.id}", @@ -28,7 +28,7 @@ describe TopicLink do end describe 'external links' do - let(:post2) do + fab!(:post2) do Fabricate(:post, raw: <<~RAW, user: user, topic: topic) http://a.com/ https://b.com/b @@ -86,7 +86,7 @@ describe TopicLink do context 'topic link' do - let(:other_topic) do + fab!(:other_topic) do Fabricate(:topic, user: user) end @@ -382,7 +382,7 @@ describe TopicLink do end describe ".duplicate_lookup" do - let(:user) { Fabricate(:user, username: "junkrat") } + fab!(:user) { Fabricate(:user, username: "junkrat") } let(:post_with_internal_link) do Fabricate(:post, user: user, raw: "Check out this topic #{post.topic.url}/122131") diff --git a/spec/models/topic_list_spec.rb b/spec/models/topic_list_spec.rb index 23e958a169f..fb4265d0ce0 100644 --- a/spec/models/topic_list_spec.rb +++ b/spec/models/topic_list_spec.rb @@ -57,11 +57,11 @@ describe TopicList do end describe 'when there are tags restricted to a category' do - let!(:category) { Fabricate(:category) } - let!(:topic) { Fabricate(:topic, category: category) } - let!(:other_topic) { Fabricate(:topic) } # uncategorized - let!(:tag) { Fabricate(:tag, topics: [topic], categories: [category], name: "category-tag") } - let!(:other_tag) { Fabricate(:tag, topics: [topic], name: "use-anywhere") } + fab!(:category) { Fabricate(:category) } + fab!(:topic) { Fabricate(:topic, category: category) } + fab!(:other_topic) { Fabricate(:topic) } # uncategorized + fab!(:tag) { Fabricate(:tag, topics: [topic], categories: [category], name: "category-tag") } + fab!(:other_tag) { Fabricate(:tag, topics: [topic], name: "use-anywhere") } let(:topic_list) { TopicList.new('latest', topic.user, [topic], category: category.id, category_id: category.id) } it 'should return tags used in the category' do diff --git a/spec/models/topic_participants_summary_spec.rb b/spec/models/topic_participants_summary_spec.rb index ac62f95eefc..835e22e3325 100644 --- a/spec/models/topic_participants_summary_spec.rb +++ b/spec/models/topic_participants_summary_spec.rb @@ -14,12 +14,12 @@ describe TopicParticipantsSummary do ) end - let(:topic_creator) { Fabricate(:user) } - let(:user1) { Fabricate(:user) } - let(:user2) { Fabricate(:user) } - let(:user3) { Fabricate(:user) } - let(:user4) { Fabricate(:user) } - let(:user5) { Fabricate(:user) } + fab!(:topic_creator) { Fabricate(:user) } + fab!(:user1) { Fabricate(:user) } + fab!(:user2) { Fabricate(:user) } + fab!(:user3) { Fabricate(:user) } + fab!(:user4) { Fabricate(:user) } + fab!(:user5) { Fabricate(:user) } it "must never contains the user and at most 4 participants" do topic.allowed_user_ids = [user1.id, user2.id, user3.id, user4.id, user5.id] diff --git a/spec/models/topic_posters_summary_spec.rb b/spec/models/topic_posters_summary_spec.rb index d558ad663bb..057b9ed9369 100644 --- a/spec/models/topic_posters_summary_spec.rb +++ b/spec/models/topic_posters_summary_spec.rb @@ -28,7 +28,7 @@ describe TopicPostersSummary do end context 'when the last poster is also the topic creator' do - let!(:featured_user1) { Fabricate(:user) } + fab!(:featured_user1) { Fabricate(:user) } let!(:topic) do Fabricate(:topic, @@ -50,10 +50,10 @@ describe TopicPostersSummary do context 'when the topic has many posters' do let!(:last_poster) { Fabricate(:user) } - let!(:featured_user1) { Fabricate(:user) } - let!(:featured_user2) { Fabricate(:user) } - let!(:featured_user3) { Fabricate(:user) } - let!(:featured_user4) { Fabricate(:user) } + fab!(:featured_user1) { Fabricate(:user) } + fab!(:featured_user2) { Fabricate(:user) } + fab!(:featured_user3) { Fabricate(:user) } + fab!(:featured_user4) { Fabricate(:user) } let!(:topic) do Fabricate(:topic, diff --git a/spec/models/topic_spec.rb b/spec/models/topic_spec.rb index 34ca73a16c4..dd3f8cb4f14 100644 --- a/spec/models/topic_spec.rb +++ b/spec/models/topic_spec.rb @@ -6,7 +6,7 @@ require_dependency 'post_destroyer' describe Topic do let(:now) { Time.zone.local(2013, 11, 20, 8, 0) } - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } let(:topic) { Fabricate(:topic) } context 'validations' do diff --git a/spec/models/topic_tag_spec.rb b/spec/models/topic_tag_spec.rb index 84d70abbc4b..4aa7f108a4c 100644 --- a/spec/models/topic_tag_spec.rb +++ b/spec/models/topic_tag_spec.rb @@ -4,8 +4,8 @@ require 'rails_helper' describe TopicTag do - let(:topic) { Fabricate(:topic) } - let(:tag) { Fabricate(:tag) } + fab!(:topic) { Fabricate(:topic) } + fab!(:tag) { Fabricate(:tag) } let(:topic_tag) { Fabricate(:topic_tag, topic: topic, tag: tag) } context '#after_create' do diff --git a/spec/models/topic_timer_spec.rb b/spec/models/topic_timer_spec.rb index c8433388ca7..36d559af3e9 100644 --- a/spec/models/topic_timer_spec.rb +++ b/spec/models/topic_timer_spec.rb @@ -13,8 +13,8 @@ RSpec.describe TopicTimer, type: :model do status_type: TopicTimer.types[:close] ) } - let(:topic) { Fabricate(:topic) } - let(:admin) { Fabricate(:admin) } + fab!(:topic) { Fabricate(:topic) } + fab!(:admin) { Fabricate(:admin) } before do freeze_time Time.new(2018) @@ -182,7 +182,7 @@ RSpec.describe TopicTimer, type: :model do end describe 'when a open topic status update is created for an open topic' do - let(:topic) { Fabricate(:topic, closed: false) } + fab!(:topic) { Fabricate(:topic, closed: false) } let(:topic_timer) do Fabricate(:topic_timer, @@ -211,7 +211,7 @@ RSpec.describe TopicTimer, type: :model do end describe 'when a close topic status update is created for a closed topic' do - let(:topic) { Fabricate(:topic, closed: true) } + fab!(:topic) { Fabricate(:topic, closed: true) } let(:topic_timer) do Fabricate(:topic_timer, diff --git a/spec/models/topic_tracking_state_spec.rb b/spec/models/topic_tracking_state_spec.rb index 2c1f7f7f879..261c3752d27 100644 --- a/spec/models/topic_tracking_state_spec.rb +++ b/spec/models/topic_tracking_state_spec.rb @@ -4,7 +4,7 @@ require 'rails_helper' describe TopicTrackingState do - let(:user) do + fab!(:user) do Fabricate(:user) end @@ -13,7 +13,7 @@ describe TopicTrackingState do end let(:topic) { post.topic } - let(:private_message_post) { Fabricate(:private_message_post) } + fab!(:private_message_post) { Fabricate(:private_message_post) } let(:private_message_topic) { private_message_post.topic } describe '#publish_latest' do @@ -73,7 +73,7 @@ describe TopicTrackingState do end describe '#publish_private_message' do - let!(:admin) { Fabricate(:admin) } + fab!(:admin) { Fabricate(:admin) } describe 'normal topic' do it 'should publish the right message' do @@ -94,8 +94,8 @@ describe TopicTrackingState do end describe 'topic with groups' do - let(:group1) { Fabricate(:group, users: [Fabricate(:user)]) } - let(:group2) { Fabricate(:group, users: [Fabricate(:user), Fabricate(:user)]) } + fab!(:group1) { Fabricate(:group, users: [Fabricate(:user)]) } + fab!(:group2) { Fabricate(:group, users: [Fabricate(:user), Fabricate(:user)]) } before do [group1, group2].each do |group| diff --git a/spec/models/topic_user_spec.rb b/spec/models/topic_user_spec.rb index 66012f3385b..f0d36fbd16e 100644 --- a/spec/models/topic_user_spec.rb +++ b/spec/models/topic_user_spec.rb @@ -75,7 +75,7 @@ describe TopicUser do it { is_expected.to belong_to :user } it { is_expected.to belong_to :topic } - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } let(:topic) { u = Fabricate(:user) @@ -235,7 +235,7 @@ describe TopicUser do end context 'private messages' do - let(:target_user) { Fabricate(:user) } + fab!(:target_user) { Fabricate(:user) } let(:post) do create_post( diff --git a/spec/models/trust_level3_requirements_spec.rb b/spec/models/trust_level3_requirements_spec.rb index 17289c50b59..eea2e073acf 100644 --- a/spec/models/trust_level3_requirements_spec.rb +++ b/spec/models/trust_level3_requirements_spec.rb @@ -6,7 +6,7 @@ describe TrustLevel3Requirements do let(:user) { Fabricate.build(:user) } subject(:tl3_requirements) { described_class.new(user) } - let(:moderator) { Fabricate(:moderator) } + fab!(:moderator) { Fabricate(:moderator) } before do described_class.clear_cache diff --git a/spec/models/unsubscribe_key_spec.rb b/spec/models/unsubscribe_key_spec.rb index 44eba0849d5..13b11df9b7f 100644 --- a/spec/models/unsubscribe_key_spec.rb +++ b/spec/models/unsubscribe_key_spec.rb @@ -22,7 +22,7 @@ describe UnsubscribeKey do describe 'key' do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } let!(:key) { UnsubscribeKey.create_key_for(user, "digest") } it 'has a temporary key' do diff --git a/spec/models/user_action_spec.rb b/spec/models/user_action_spec.rb index b9efe0cb206..12ecf3d917a 100644 --- a/spec/models/user_action_spec.rb +++ b/spec/models/user_action_spec.rb @@ -13,11 +13,11 @@ describe UserAction do describe '#stream' do - let(:public_post) { Fabricate(:post) } + fab!(:public_post) { Fabricate(:post) } let(:public_topic) { public_post.topic } - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } - let(:private_post) { Fabricate(:post) } + fab!(:private_post) { Fabricate(:post) } let(:private_topic) do topic = private_post.topic topic.update_columns(category_id: nil, archetype: Archetype::private_message) @@ -155,9 +155,9 @@ describe UserAction do describe 'when user likes' do - let(:post) { Fabricate(:post) } + fab!(:post) { Fabricate(:post) } let(:likee) { post.user } - let(:liker) { Fabricate(:coding_horror) } + fab!(:liker) { Fabricate(:coding_horror) } def likee_stream UserAction.stream(user_id: likee.id, guardian: Guardian.new) @@ -191,7 +191,7 @@ describe UserAction do end context 'private message' do - let(:post) { Fabricate(:private_message_post) } + fab!(:post) { Fabricate(:private_message_post) } let(:likee) { post.topic.topic_allowed_users.first.user } let(:liker) { post.topic.topic_allowed_users.last.user } @@ -295,11 +295,11 @@ describe UserAction do describe 'secures private messages' do - let(:user) do + fab!(:user) do Fabricate(:user) end - let(:user2) do + fab!(:user2) do Fabricate(:user) end diff --git a/spec/models/user_auth_token_spec.rb b/spec/models/user_auth_token_spec.rb index 8af6366ea90..e9d17c84eca 100644 --- a/spec/models/user_auth_token_spec.rb +++ b/spec/models/user_auth_token_spec.rb @@ -287,8 +287,8 @@ describe UserAuthToken do context "suspicious login" do - let(:user) { Fabricate(:user) } - let(:admin) { Fabricate(:admin) } + fab!(:user) { Fabricate(:user) } + fab!(:admin) { Fabricate(:admin) } it "is not checked when generated for non-staff" do UserAuthToken.generate!(user_id: user.id, staff: user.staff?) diff --git a/spec/models/user_avatar_spec.rb b/spec/models/user_avatar_spec.rb index 59f1e2112a8..4d08f72f7db 100644 --- a/spec/models/user_avatar_spec.rb +++ b/spec/models/user_avatar_spec.rb @@ -3,12 +3,12 @@ require 'rails_helper' describe UserAvatar do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } let(:avatar) { user.create_user_avatar! } describe '#update_gravatar!' do let(:temp) { Tempfile.new('test') } - let(:upload) { Fabricate(:upload, user: user) } + fab!(:upload) { Fabricate(:upload, user: user) } describe "when working" do diff --git a/spec/models/user_badge_spec.rb b/spec/models/user_badge_spec.rb index 4088f6c95c2..68c591248be 100644 --- a/spec/models/user_badge_spec.rb +++ b/spec/models/user_badge_spec.rb @@ -6,8 +6,8 @@ require_dependency 'user_badge' describe UserBadge do context 'validations' do - let(:badge) { Fabricate(:badge) } - let(:user) { Fabricate(:user) } + fab!(:badge) { Fabricate(:badge) } + fab!(:user) { Fabricate(:user) } let(:subject) { BadgeGranter.grant(badge, user) } it { is_expected.to validate_presence_of(:badge_id) } diff --git a/spec/models/user_export_spec.rb b/spec/models/user_export_spec.rb index 636ab6eca3d..cadc75d3e43 100644 --- a/spec/models/user_export_spec.rb +++ b/spec/models/user_export_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' RSpec.describe UserExport do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } describe '.remove_old_exports' do it 'should remove the right records' do diff --git a/spec/models/user_history_spec.rb b/spec/models/user_history_spec.rb index ba5879b30d5..ac56340b083 100644 --- a/spec/models/user_history_spec.rb +++ b/spec/models/user_history_spec.rb @@ -22,7 +22,7 @@ describe UserHistory do describe '#staff_action_records' do context "with some records" do - let(:admin) { Fabricate(:admin) } + fab!(:admin) { Fabricate(:admin) } let(:custom_type) { 'confirmed_ham' } before do diff --git a/spec/models/user_option_spec.rb b/spec/models/user_option_spec.rb index c7e22f762ea..36e0e6151bd 100644 --- a/spec/models/user_option_spec.rb +++ b/spec/models/user_option_spec.rb @@ -19,7 +19,7 @@ describe UserOption do end describe "should_be_redirected_to_top" do - let!(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } it "should be redirected to top when there is a reason to" do user.user_option.expects(:redirected_to_top).returns(reason: "42") @@ -33,7 +33,7 @@ describe UserOption do end describe "defaults" do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } it "should not hide the profile and presence by default" do expect(user.user_option.hide_profile_and_presence).to eq(false) @@ -41,8 +41,8 @@ describe UserOption do end describe "#mailing_list_mode" do - let!(:forum_user) { Fabricate(:user) } - let!(:mailing_list_user) { Fabricate(:user) } + fab!(:forum_user) { Fabricate(:user) } + fab!(:mailing_list_user) { Fabricate(:user) } before do forum_user.user_option.update(mailing_list_mode: false) @@ -63,7 +63,7 @@ describe UserOption do end describe ".redirected_to_top" do - let!(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } it "should have no reason when `SiteSetting.redirect_users_to_top_page` is disabled" do SiteSetting.redirect_users_to_top_page = false diff --git a/spec/models/user_profile_spec.rb b/spec/models/user_profile_spec.rb index 2d19cb13634..eb1121342ee 100644 --- a/spec/models/user_profile_spec.rb +++ b/spec/models/user_profile_spec.rb @@ -66,7 +66,7 @@ describe UserProfile do end describe 'after save' do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } before do user.user_profile.bio_raw = 'my bio' @@ -84,7 +84,7 @@ describe UserProfile do end describe 'changing bio' do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } before do user.user_profile.bio_raw = "**turtle power!**" @@ -98,8 +98,8 @@ describe UserProfile do end describe 'bio excerpt emojis' do - let(:user) { Fabricate(:user) } - let(:upload) { Fabricate(:upload) } + fab!(:user) { Fabricate(:user) } + fab!(:upload) { Fabricate(:upload) } before do CustomEmoji.create!(name: 'test', upload: upload) @@ -129,7 +129,7 @@ describe UserProfile do user end - let(:created_user) do + fab!(:created_user) do user = Fabricate(:user) user.user_profile.bio_raw = 'I love http://discourse.org' user.user_profile.save! @@ -196,7 +196,7 @@ describe UserProfile do end context '.import_url_for_user' do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } before do stub_request(:any, "thisfakesomething.something.com") diff --git a/spec/models/user_profile_view_spec.rb b/spec/models/user_profile_view_spec.rb index 4e5fc7fb0c9..d15bb53fbbd 100644 --- a/spec/models/user_profile_view_spec.rb +++ b/spec/models/user_profile_view_spec.rb @@ -3,8 +3,8 @@ require 'rails_helper' RSpec.describe UserProfileView do - let(:user) { Fabricate(:user) } - let(:other_user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } + fab!(:other_user) { Fabricate(:user) } let(:user_profile_id) { user.user_profile.id } def add(user_profile_id, ip, user_id = nil, at = nil) diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 5a658b20909..19a4bb0f3a5 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -128,7 +128,7 @@ describe User do describe 'reviewable' do let(:user) { Fabricate(:user, active: false) } - let(:admin) { Fabricate(:admin) } + fab!(:admin) { Fabricate(:admin) } before do Jobs.run_immediately! @@ -875,7 +875,7 @@ describe User do end describe "last_seen_at" do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } it "should have a blank last seen on creation" do expect(user.last_seen_at).to eq(nil) @@ -942,7 +942,7 @@ describe User do end describe 'email_confirmed?' do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } context 'when email has not been confirmed yet' do it 'should return false' do @@ -968,7 +968,7 @@ describe User do end describe "flag_linked_posts_as_spam" do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } let!(:admin) { Fabricate(:admin) } let!(:post) { PostCreator.new(user, title: "this topic contains spam", raw: "this post has a link: http://discourse.org").create } let!(:another_post) { PostCreator.new(user, title: "this topic also contains spam", raw: "this post has a link: http://discourse.org/asdfa").create } @@ -1093,9 +1093,9 @@ describe User do end describe 'api keys' do - let(:admin) { Fabricate(:admin) } - let(:other_admin) { Fabricate(:admin) } - let(:user) { Fabricate(:user) } + fab!(:admin) { Fabricate(:admin) } + fab!(:other_admin) { Fabricate(:admin) } + fab!(:user) { Fabricate(:user) } describe '.generate_api_key' do @@ -1189,7 +1189,7 @@ describe User do describe "#find_email" do - let(:user) { Fabricate(:user, email: "bob@example.com") } + fab!(:user) { Fabricate(:user, email: "bob@example.com") } context "when email is exists in the email logs" do before { user.stubs(:last_sent_email_address).returns("bob@lastemail.com") } @@ -1482,8 +1482,8 @@ describe User do describe "number_of_flags_given" do - let(:user) { Fabricate(:user) } - let(:moderator) { Fabricate(:moderator) } + fab!(:user) { Fabricate(:user) } + fab!(:moderator) { Fabricate(:moderator) } it "doesn't count disagreed flags" do post_agreed = Fabricate(:post) @@ -1502,8 +1502,8 @@ describe User do describe "number_of_deleted_posts" do - let(:user) { Fabricate(:user, id: 2) } - let(:moderator) { Fabricate(:moderator) } + fab!(:user) { Fabricate(:user, id: 2) } + fab!(:moderator) { Fabricate(:moderator) } it "counts all the posts" do # at least 1 "unchanged" post @@ -1613,7 +1613,7 @@ describe User do end describe "#logged_out" do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } it 'should publish the right message' do message = MessageBus.track_publish('/logout') { user.logged_out }.first @@ -1623,8 +1623,8 @@ describe User do end describe '#read_first_notification?' do - let(:user) { Fabricate(:user, trust_level: TrustLevel[0]) } - let(:notification) { Fabricate(:private_message_notification) } + fab!(:user) { Fabricate(:user, trust_level: TrustLevel[0]) } + fab!(:notification) { Fabricate(:private_message_notification) } describe 'when first notification has not been seen' do it 'should return the right value' do @@ -1665,7 +1665,7 @@ describe User do end describe "#featured_user_badges" do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } let!(:user_badge_tl1) { UserBadge.create(badge_id: 1, user: user, granted_by: Discourse.system_user, granted_at: Time.now) } let!(:user_badge_tl2) { UserBadge.create(badge_id: 2, user: user, granted_by: Discourse.system_user, granted_at: Time.now) } @@ -1680,7 +1680,7 @@ describe User do describe ".clear_global_notice_if_needed" do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } let(:admin) { Fabricate(:admin) } before do @@ -1880,7 +1880,7 @@ describe User do end describe "#secondary_emails" do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } it "only contains secondary emails" do expect(user.user_emails.secondary).to eq([]) diff --git a/spec/models/user_stat_spec.rb b/spec/models/user_stat_spec.rb index 0a9bd72ff0e..ed41be84d9c 100644 --- a/spec/models/user_stat_spec.rb +++ b/spec/models/user_stat_spec.rb @@ -25,7 +25,7 @@ describe UserStat do end context 'with a view' do - let(:topic) { Fabricate(:topic) } + fab!(:topic) { Fabricate(:topic) } let!(:view) { TopicViewItem.add(topic.id, '127.0.0.1', user.id) } before do @@ -91,7 +91,7 @@ describe UserStat do end describe 'update_time_read!' do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } let(:stat) { user.user_stat } it 'always expires redis key' do diff --git a/spec/models/user_visit_spec.rb b/spec/models/user_visit_spec.rb index 219b7594ee2..92cf61c79c8 100644 --- a/spec/models/user_visit_spec.rb +++ b/spec/models/user_visit_spec.rb @@ -3,8 +3,8 @@ require 'rails_helper' describe UserVisit do - let(:user) { Fabricate(:user) } - let(:other_user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } + fab!(:other_user) { Fabricate(:user) } it 'can ensure consistency' do user.update_visit_record!(2.weeks.ago.to_date) diff --git a/spec/models/web_hook_spec.rb b/spec/models/web_hook_spec.rb index aa6a7f6d6b0..92283e49c4d 100644 --- a/spec/models/web_hook_spec.rb +++ b/spec/models/web_hook_spec.rb @@ -37,8 +37,8 @@ describe WebHook do end context 'web hooks' do - let!(:post_hook) { Fabricate(:web_hook, payload_url: " https://example.com ") } - let!(:topic_hook) { Fabricate(:topic_web_hook) } + fab!(:post_hook) { Fabricate(:web_hook, payload_url: " https://example.com ") } + fab!(:topic_hook) { Fabricate(:topic_web_hook) } it "removes whitspace from payload_url before saving" do expect(post_hook.payload_url).to eq("https://example.com") @@ -65,7 +65,7 @@ describe WebHook do end describe 'wildcard web hooks' do - let!(:wildcard_hook) { Fabricate(:wildcard_web_hook) } + fab!(:wildcard_hook) { Fabricate(:wildcard_web_hook) } it 'should include wildcard hooks' do expect(WebHook.active_web_hooks(:wildcard)).to eq([wildcard_hook]) @@ -94,7 +94,7 @@ describe WebHook do end context 'includes wildcard hooks' do - let!(:wildcard_hook) { Fabricate(:wildcard_web_hook) } + fab!(:wildcard_hook) { Fabricate(:wildcard_web_hook) } describe '#enqueue_hooks' do it 'enqueues hooks with ids' do diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index 8a68d638b3f..47c267a0ace 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -46,6 +46,8 @@ require File.expand_path("../../config/environment", __FILE__) require 'rspec/rails' require 'shoulda-matchers' require 'sidekiq/testing' +require 'test_prof/recipes/rspec/let_it_be' +require 'test_prof/before_all/adapters/active_record' # The shoulda-matchers gem no longer detects the test framework # you're using or mixes itself into that framework automatically. @@ -76,8 +78,83 @@ SiteSetting.automatically_download_gravatars = false SeedFu.seed +module TestSetup + # This is run before each test and before each before_all block + def self.test_setup(x = nil) + # TODO not sure about this, we could use a mock redis implementation here: + # this gives us really clean "flush" semantics, howere the side-effect is that + # we are no longer using a clean redis implementation, a preferable solution may + # be simply flushing before tests, trouble is that redis may be reused with dev + # so that would mean the dev would act weird + # + # perf benefit seems low (shaves 20 secs off a 4 minute test suite) + # + # $redis = DiscourseMockRedis.new + + RateLimiter.disable + PostActionNotifier.disable + SearchIndexer.disable + UserActionManager.disable + NotificationEmailer.disable + SiteIconManager.disable + + SiteSetting.provider.all.each do |setting| + SiteSetting.remove_override!(setting.name) + end + + # very expensive IO operations + SiteSetting.automatically_download_gravatars = false + + Discourse.clear_readonly! + Sidekiq::Worker.clear_all + + I18n.locale = :en + + RspecErrorTracker.last_exception = nil + + if $test_cleanup_callbacks + $test_cleanup_callbacks.reverse_each(&:call) + $test_cleanup_callbacks = nil + end + + # Running jobs are expensive and most of our tests are not concern with + # code that runs inside jobs. run_later! means they are put on the redis + # queue and never processed. + Jobs.run_later! + end +end + +module ActiveRecordAdapterWithSetup + class << self + ACTIVE_RECORD_ADAPTER = TestProf::BeforeAll::Adapters::ActiveRecord + + def begin_transaction + TestSetup.test_setup + + ACTIVE_RECORD_ADAPTER.begin_transaction + end + + def rollback_transaction + ACTIVE_RECORD_ADAPTER.rollback_transaction + end + end +end + +TestProf::BeforeAll.adapter = ActiveRecordAdapterWithSetup + +module Prefabrication + def fab!(name, &blk) + if ENV['PREFABRICATION'] == '0' + let!(name, &blk) + else + let_it_be(name, refind: true, &blk) + end + end +end + RSpec.configure do |config| config.fail_fast = ENV['RSPEC_FAIL_FAST'] == "1" + config.extend Prefabrication config.include Helpers config.include MessageBus config.include RSpecHtmlMatchers @@ -153,48 +230,7 @@ RSpec.configure do |config| end end - config.before :each do |x| - # TODO not sure about this, we could use a mock redis implementation here: - # this gives us really clean "flush" semantics, howere the side-effect is that - # we are no longer using a clean redis implementation, a preferable solution may - # be simply flushing before tests, trouble is that redis may be reused with dev - # so that would mean the dev would act weird - # - # perf benefit seems low (shaves 20 secs off a 4 minute test suite) - # - # $redis = DiscourseMockRedis.new - - RateLimiter.disable - PostActionNotifier.disable - SearchIndexer.disable - UserActionManager.disable - NotificationEmailer.disable - SiteIconManager.disable - - SiteSetting.provider.all.each do |setting| - SiteSetting.remove_override!(setting.name) - end - - # very expensive IO operations - SiteSetting.automatically_download_gravatars = false - - Discourse.clear_readonly! - Sidekiq::Worker.clear_all - - I18n.locale = :en - - RspecErrorTracker.last_exception = nil - - if $test_cleanup_callbacks - $test_cleanup_callbacks.reverse_each(&:call) - $test_cleanup_callbacks = nil - end - - # Running jobs are expensive and most of our tests are not concern with - # code that runs inside jobs. run_later! means they are put on the redis - # queue and never processed. - Jobs.run_later! - end + config.before :each, &TestSetup.method(:test_setup) config.before(:each, type: :multisite) do Rails.configuration.multisite = true diff --git a/spec/requests/admin/api_controller_spec.rb b/spec/requests/admin/api_controller_spec.rb index e52fb1b2b24..4a20a474510 100644 --- a/spec/requests/admin/api_controller_spec.rb +++ b/spec/requests/admin/api_controller_spec.rb @@ -8,7 +8,7 @@ describe Admin::ApiController do expect(Admin::ApiController < Admin::AdminController).to eq(true) end - let(:admin) { Fabricate(:admin) } + fab!(:admin) { Fabricate(:admin) } context "as an admin" do before do @@ -23,7 +23,7 @@ describe Admin::ApiController do end describe '#regenerate_key' do - let(:api_key) { Fabricate(:api_key) } + fab!(:api_key) { Fabricate(:api_key) } it "returns 404 when there is no key" do put "/admin/api/key.json", params: { id: 1234 } @@ -42,7 +42,7 @@ describe Admin::ApiController do end describe '#revoke_key' do - let(:api_key) { Fabricate(:api_key) } + fab!(:api_key) { Fabricate(:api_key) } it "returns 404 when there is no key" do delete "/admin/api/key.json", params: { id: 1234 } diff --git a/spec/requests/admin/backups_controller_spec.rb b/spec/requests/admin/backups_controller_spec.rb index a5019ebfd68..82d11c5a881 100644 --- a/spec/requests/admin/backups_controller_spec.rb +++ b/spec/requests/admin/backups_controller_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' RSpec.describe Admin::BackupsController do - let(:admin) { Fabricate(:admin) } + fab!(:admin) { Fabricate(:admin) } let(:backup_filename) { "2014-02-10-065935.tar.gz" } let(:backup_filename2) { "2014-02-11-065935.tar.gz" } diff --git a/spec/requests/admin/badges_controller_spec.rb b/spec/requests/admin/badges_controller_spec.rb index fc34a5b3a4b..a13af50bc93 100644 --- a/spec/requests/admin/badges_controller_spec.rb +++ b/spec/requests/admin/badges_controller_spec.rb @@ -4,8 +4,8 @@ require 'rails_helper' describe Admin::BadgesController do context "while logged in as an admin" do - let(:admin) { Fabricate(:admin) } - let!(:badge) { Fabricate(:badge) } + fab!(:admin) { Fabricate(:admin) } + fab!(:badge) { Fabricate(:badge) } before do sign_in(admin) diff --git a/spec/requests/admin/color_schemes_controller_spec.rb b/spec/requests/admin/color_schemes_controller_spec.rb index 0c5b4161698..8cf4e20fc1f 100644 --- a/spec/requests/admin/color_schemes_controller_spec.rb +++ b/spec/requests/admin/color_schemes_controller_spec.rb @@ -8,7 +8,7 @@ describe Admin::ColorSchemesController do end context "while logged in as an admin" do - let(:admin) { Fabricate(:admin) } + fab!(:admin) { Fabricate(:admin) } let(:valid_params) { { color_scheme: { name: 'Such Design', colors: [ @@ -53,7 +53,7 @@ describe Admin::ColorSchemesController do end describe "#update" do - let(:existing) { Fabricate(:color_scheme) } + fab!(:existing) { Fabricate(:color_scheme) } it "returns success" do put "/admin/color_schemes/#{existing.id}.json", params: valid_params @@ -82,7 +82,7 @@ describe Admin::ColorSchemesController do end describe "#destroy" do - let!(:existing) { Fabricate(:color_scheme) } + fab!(:existing) { Fabricate(:color_scheme) } it "returns success" do expect { diff --git a/spec/requests/admin/dashboard_controller_spec.rb b/spec/requests/admin/dashboard_controller_spec.rb index 69955aea2db..b777131ad1d 100644 --- a/spec/requests/admin/dashboard_controller_spec.rb +++ b/spec/requests/admin/dashboard_controller_spec.rb @@ -14,7 +14,7 @@ describe Admin::DashboardController do end context 'while logged in as an admin' do - let(:admin) { Fabricate(:admin) } + fab!(:admin) { Fabricate(:admin) } before do sign_in(admin) diff --git a/spec/requests/admin/email_controller_spec.rb b/spec/requests/admin/email_controller_spec.rb index 533518b8592..9b6a77b8ce8 100644 --- a/spec/requests/admin/email_controller_spec.rb +++ b/spec/requests/admin/email_controller_spec.rb @@ -3,8 +3,8 @@ require 'rails_helper' describe Admin::EmailController do - let(:admin) { Fabricate(:admin) } - let(:email_log) { Fabricate(:email_log) } + fab!(:admin) { Fabricate(:admin) } + fab!(:email_log) { Fabricate(:email_log) } before do sign_in(admin) @@ -35,8 +35,8 @@ describe Admin::EmailController do end describe '#sent' do - let(:post) { Fabricate(:post) } - let(:email_log) { Fabricate(:email_log, post: post) } + fab!(:post) { Fabricate(:post) } + fab!(:email_log) { Fabricate(:email_log, post: post) } let(:post_reply_key) do Fabricate(:post_reply_key, post: post, user: email_log.user) @@ -89,9 +89,9 @@ describe Admin::EmailController do end describe '#skipped' do - let(:user) { Fabricate(:user) } - let!(:log1) { Fabricate(:skipped_email_log, user: user) } - let!(:log2) { Fabricate(:skipped_email_log) } + fab!(:user) { Fabricate(:user) } + fab!(:log1) { Fabricate(:skipped_email_log, user: user) } + fab!(:log2) { Fabricate(:skipped_email_log) } it "succeeds" do get "/admin/email/skipped.json" @@ -136,8 +136,8 @@ describe Admin::EmailController do end context 'with SiteSetting.disable_emails' do - let(:eviltrout) { Fabricate(:evil_trout) } - let(:admin) { Fabricate(:admin) } + fab!(:eviltrout) { Fabricate(:evil_trout) } + fab!(:admin) { Fabricate(:admin) } it 'bypasses disable when setting is "yes"' do SiteSetting.disable_emails = 'yes' @@ -247,7 +247,7 @@ describe Admin::EmailController do end context 'bounced email log entry exists' do - let(:email_log) { Fabricate(:email_log, bounced: true, bounce_key: SecureRandom.hex) } + fab!(:email_log) { Fabricate(:email_log, bounced: true, bounce_key: SecureRandom.hex) } let(:error_message) { "Email::Receiver::BouncedEmailError" } it 'returns an incoming email sent to the reply_by_email_address' do diff --git a/spec/requests/admin/email_templates_controller_spec.rb b/spec/requests/admin/email_templates_controller_spec.rb index c76b29f516d..458665a918b 100644 --- a/spec/requests/admin/email_templates_controller_spec.rb +++ b/spec/requests/admin/email_templates_controller_spec.rb @@ -3,8 +3,8 @@ require 'rails_helper' RSpec.describe Admin::EmailTemplatesController do - let(:admin) { Fabricate(:admin) } - let(:user) { Fabricate(:user) } + fab!(:admin) { Fabricate(:admin) } + fab!(:user) { Fabricate(:user) } def original_text(key) I18n.overrides_disabled { I18n.t(key) } diff --git a/spec/requests/admin/embeddable_hosts_controller_spec.rb b/spec/requests/admin/embeddable_hosts_controller_spec.rb index 014e9d19eae..ea246d78e20 100644 --- a/spec/requests/admin/embeddable_hosts_controller_spec.rb +++ b/spec/requests/admin/embeddable_hosts_controller_spec.rb @@ -8,8 +8,8 @@ describe Admin::EmbeddableHostsController do end context 'while logged in as an admin' do - let(:admin) { Fabricate(:admin) } - let(:embeddable_host) { Fabricate(:embeddable_host) } + fab!(:admin) { Fabricate(:admin) } + fab!(:embeddable_host) { Fabricate(:embeddable_host) } before do sign_in(admin) diff --git a/spec/requests/admin/emojis_controller_spec.rb b/spec/requests/admin/emojis_controller_spec.rb index ae274fafec3..a0f6d8cec83 100644 --- a/spec/requests/admin/emojis_controller_spec.rb +++ b/spec/requests/admin/emojis_controller_spec.rb @@ -3,8 +3,8 @@ require 'rails_helper' RSpec.describe Admin::EmojisController do - let(:admin) { Fabricate(:admin) } - let(:upload) { Fabricate(:upload) } + fab!(:admin) { Fabricate(:admin) } + fab!(:upload) { Fabricate(:upload) } before do sign_in(admin) diff --git a/spec/requests/admin/flagged_topics_controller_spec.rb b/spec/requests/admin/flagged_topics_controller_spec.rb index b6918253b2f..2e0827d2f62 100644 --- a/spec/requests/admin/flagged_topics_controller_spec.rb +++ b/spec/requests/admin/flagged_topics_controller_spec.rb @@ -3,14 +3,14 @@ require 'rails_helper' RSpec.describe Admin::FlaggedTopicsController do - let(:post) { Fabricate(:post) } - let(:user) { Fabricate(:user) } + fab!(:post) { Fabricate(:post) } + fab!(:user) { Fabricate(:user) } before do PostActionCreator.spam(user, post) end - let!(:flag) { Fabricate(:flag) } + fab!(:flag) { Fabricate(:flag) } shared_examples "successfully retrieve list of flagged topics" do it "returns a list of flagged topics" do diff --git a/spec/requests/admin/flags_controller_spec.rb b/spec/requests/admin/flags_controller_spec.rb index f97e0046532..9ce24775dbe 100644 --- a/spec/requests/admin/flags_controller_spec.rb +++ b/spec/requests/admin/flags_controller_spec.rb @@ -3,11 +3,11 @@ require 'rails_helper' RSpec.describe Admin::FlagsController do - let(:user) { Fabricate(:user) } - let(:admin) { Fabricate(:admin) } - let(:post_1) { Fabricate(:post) } - let(:category) { Fabricate(:category) } - let(:first_post) { Fabricate(:post, post_number: 1) } + fab!(:user) { Fabricate(:user) } + fab!(:admin) { Fabricate(:admin) } + fab!(:post_1) { Fabricate(:post) } + fab!(:category) { Fabricate(:category) } + fab!(:first_post) { Fabricate(:post, post_number: 1) } before do sign_in(admin) diff --git a/spec/requests/admin/groups_controller_spec.rb b/spec/requests/admin/groups_controller_spec.rb index 0fe648b39d1..fe0278cdd3b 100644 --- a/spec/requests/admin/groups_controller_spec.rb +++ b/spec/requests/admin/groups_controller_spec.rb @@ -3,9 +3,9 @@ require 'rails_helper' RSpec.describe Admin::GroupsController do - let(:admin) { Fabricate(:admin) } - let(:user) { Fabricate(:user) } - let(:group) { Fabricate(:group) } + fab!(:admin) { Fabricate(:admin) } + fab!(:user) { Fabricate(:user) } + fab!(:group) { Fabricate(:group) } before do sign_in(admin) @@ -67,7 +67,7 @@ RSpec.describe Admin::GroupsController do end describe "#bulk_perform" do - let(:group) do + fab!(:group) do Fabricate(:group, name: "test", primary_group: true, @@ -76,8 +76,8 @@ RSpec.describe Admin::GroupsController do ) end - let(:user) { Fabricate(:user, trust_level: 2) } - let(:user2) { Fabricate(:user, trust_level: 4) } + fab!(:user) { Fabricate(:user, trust_level: 2) } + fab!(:user2) { Fabricate(:user, trust_level: 4) } it "can assign users to a group by email or username" do Jobs.run_immediately! diff --git a/spec/requests/admin/impersonate_controller_spec.rb b/spec/requests/admin/impersonate_controller_spec.rb index 8eef5244e47..3e0248dfd94 100644 --- a/spec/requests/admin/impersonate_controller_spec.rb +++ b/spec/requests/admin/impersonate_controller_spec.rb @@ -9,9 +9,9 @@ describe Admin::ImpersonateController do end context 'while logged in as an admin' do - let(:admin) { Fabricate(:admin) } - let(:user) { Fabricate(:user) } - let(:another_admin) { Fabricate(:admin) } + fab!(:admin) { Fabricate(:admin) } + fab!(:user) { Fabricate(:user) } + fab!(:another_admin) { Fabricate(:admin) } before do sign_in(admin) diff --git a/spec/requests/admin/permalinks_controller_spec.rb b/spec/requests/admin/permalinks_controller_spec.rb index 16eb3dd1210..80df7319095 100644 --- a/spec/requests/admin/permalinks_controller_spec.rb +++ b/spec/requests/admin/permalinks_controller_spec.rb @@ -8,7 +8,7 @@ describe Admin::PermalinksController do expect(Admin::PermalinksController < Admin::AdminController).to eq(true) end - let(:admin) { Fabricate(:admin) } + fab!(:admin) { Fabricate(:admin) } before do sign_in(admin) diff --git a/spec/requests/admin/reports_controller_spec.rb b/spec/requests/admin/reports_controller_spec.rb index ee1b36d2e89..fa1bf1f751e 100644 --- a/spec/requests/admin/reports_controller_spec.rb +++ b/spec/requests/admin/reports_controller_spec.rb @@ -8,8 +8,8 @@ describe Admin::ReportsController do end context 'while logged in as an admin' do - let(:admin) { Fabricate(:admin) } - let(:user) { Fabricate(:user) } + fab!(:admin) { Fabricate(:admin) } + fab!(:user) { Fabricate(:user) } before do sign_in(admin) @@ -80,9 +80,9 @@ describe Admin::ReportsController do end describe 'when report is scoped to a category' do - let(:category) { Fabricate(:category) } - let!(:topic) { Fabricate(:topic, category: category) } - let!(:other_topic) { Fabricate(:topic) } + fab!(:category) { Fabricate(:category) } + fab!(:topic) { Fabricate(:topic, category: category) } + fab!(:other_topic) { Fabricate(:topic) } it 'should render the report as JSON' do get "/admin/reports/topics.json", params: { category_id: category.id } @@ -97,9 +97,9 @@ describe Admin::ReportsController do end describe 'when report is scoped to a group' do - let(:user) { Fabricate(:user) } - let!(:other_user) { Fabricate(:user) } - let(:group) { Fabricate(:group) } + fab!(:user) { Fabricate(:user) } + fab!(:other_user) { Fabricate(:user) } + fab!(:group) { Fabricate(:group) } it 'should render the report as JSON' do group.add(user) diff --git a/spec/requests/admin/screened_ip_addresses_controller_spec.rb b/spec/requests/admin/screened_ip_addresses_controller_spec.rb index d69bd643ac0..8bfd1b8d1f1 100644 --- a/spec/requests/admin/screened_ip_addresses_controller_spec.rb +++ b/spec/requests/admin/screened_ip_addresses_controller_spec.rb @@ -8,7 +8,7 @@ describe Admin::ScreenedIpAddressesController do expect(Admin::ScreenedIpAddressesController < Admin::AdminController).to eq(true) end - let(:admin) { Fabricate(:admin) } + fab!(:admin) { Fabricate(:admin) } before do sign_in(admin) diff --git a/spec/requests/admin/search_logs_spec.rb b/spec/requests/admin/search_logs_spec.rb index 4dcaa12f17d..bca3d030aa7 100644 --- a/spec/requests/admin/search_logs_spec.rb +++ b/spec/requests/admin/search_logs_spec.rb @@ -3,8 +3,8 @@ require 'rails_helper' RSpec.describe Admin::SearchLogsController do - let(:admin) { Fabricate(:admin) } - let(:user) { Fabricate(:user) } + fab!(:admin) { Fabricate(:admin) } + fab!(:user) { Fabricate(:user) } before do SearchLog.log(term: 'ruby', search_type: :header, ip_address: '127.0.0.1') diff --git a/spec/requests/admin/site_settings_controller_spec.rb b/spec/requests/admin/site_settings_controller_spec.rb index 411691305c9..e134ba06694 100644 --- a/spec/requests/admin/site_settings_controller_spec.rb +++ b/spec/requests/admin/site_settings_controller_spec.rb @@ -9,7 +9,7 @@ describe Admin::SiteSettingsController do end context 'while logged in as an admin' do - let(:admin) { Fabricate(:admin) } + fab!(:admin) { Fabricate(:admin) } before do sign_in(admin) diff --git a/spec/requests/admin/site_texts_controller_spec.rb b/spec/requests/admin/site_texts_controller_spec.rb index b6e02ac5cda..6f8a0d46bf7 100644 --- a/spec/requests/admin/site_texts_controller_spec.rb +++ b/spec/requests/admin/site_texts_controller_spec.rb @@ -3,8 +3,8 @@ require 'rails_helper' RSpec.describe Admin::SiteTextsController do - let(:admin) { Fabricate(:admin) } - let(:user) { Fabricate(:user) } + fab!(:admin) { Fabricate(:admin) } + fab!(:user) { Fabricate(:user) } after do TranslationOverride.delete_all diff --git a/spec/requests/admin/staff_action_logs_controller_spec.rb b/spec/requests/admin/staff_action_logs_controller_spec.rb index a10ab6dd3a4..16d59031f0d 100644 --- a/spec/requests/admin/staff_action_logs_controller_spec.rb +++ b/spec/requests/admin/staff_action_logs_controller_spec.rb @@ -7,7 +7,7 @@ describe Admin::StaffActionLogsController do expect(Admin::StaffActionLogsController < Admin::AdminController).to eq(true) end - let(:admin) { Fabricate(:admin) } + fab!(:admin) { Fabricate(:admin) } before do sign_in(admin) diff --git a/spec/requests/admin/themes_controller_spec.rb b/spec/requests/admin/themes_controller_spec.rb index 3919c00fd79..162d16b34d3 100644 --- a/spec/requests/admin/themes_controller_spec.rb +++ b/spec/requests/admin/themes_controller_spec.rb @@ -4,7 +4,7 @@ require 'rails_helper' require_dependency 'theme_serializer' describe Admin::ThemesController do - let(:admin) { Fabricate(:admin) } + fab!(:admin) { Fabricate(:admin) } it "is a subclass of AdminController" do expect(Admin::UsersController < Admin::AdminController).to eq(true) @@ -218,7 +218,7 @@ describe Admin::ThemesController do end describe '#update' do - let(:theme) { Fabricate(:theme) } + let!(:theme) { Fabricate(:theme) } it 'returns the right response when an invalid id is given' do put "/admin/themes/99999.json" @@ -348,7 +348,7 @@ describe Admin::ThemesController do end describe '#destroy' do - let(:theme) { Fabricate(:theme) } + let!(:theme) { Fabricate(:theme) } it 'returns the right response when an invalid id is given' do delete "/admin/themes/9999.json" diff --git a/spec/requests/admin/user_fields_controller_spec.rb b/spec/requests/admin/user_fields_controller_spec.rb index 879ba605104..9bcbd6cc18f 100644 --- a/spec/requests/admin/user_fields_controller_spec.rb +++ b/spec/requests/admin/user_fields_controller_spec.rb @@ -8,7 +8,7 @@ describe Admin::UserFieldsController do end context "when logged in" do - let(:admin) { Fabricate(:admin) } + fab!(:admin) { Fabricate(:admin) } before do sign_in(admin) @@ -44,7 +44,7 @@ describe Admin::UserFieldsController do end describe '#index' do - let!(:user_field) { Fabricate(:user_field) } + fab!(:user_field) { Fabricate(:user_field) } it "returns a list of user fields" do get "/admin/customize/user_fields.json" @@ -55,7 +55,7 @@ describe Admin::UserFieldsController do end describe '#destroy' do - let!(:user_field) { Fabricate(:user_field) } + fab!(:user_field) { Fabricate(:user_field) } it "deletes the user field" do expect { @@ -66,7 +66,7 @@ describe Admin::UserFieldsController do end describe '#update' do - let!(:user_field) { Fabricate(:user_field) } + fab!(:user_field) { Fabricate(:user_field) } it "updates the user field" do put "/admin/customize/user_fields/#{user_field.id}.json", params: { diff --git a/spec/requests/admin/users_controller_spec.rb b/spec/requests/admin/users_controller_spec.rb index 451cf274160..53e483f0f4d 100644 --- a/spec/requests/admin/users_controller_spec.rb +++ b/spec/requests/admin/users_controller_spec.rb @@ -4,8 +4,8 @@ require 'rails_helper' require 'discourse_ip_info' RSpec.describe Admin::UsersController do - let(:admin) { Fabricate(:admin) } - let(:user) { Fabricate(:user) } + fab!(:admin) { Fabricate(:admin) } + fab!(:user) { Fabricate(:user) } it 'is a subclass of AdminController' do expect(Admin::UsersController < Admin::AdminController).to eq(true) @@ -143,7 +143,7 @@ RSpec.describe Admin::UsersController do end describe '#suspend' do - let(:post) { Fabricate(:post) } + fab!(:post) { Fabricate(:post) } let(:suspend_params) do { suspend_until: 5.hours.from_now, reason: "because of this post", @@ -232,7 +232,7 @@ RSpec.describe Admin::UsersController do end describe '#revoke_admin' do - let(:another_admin) { Fabricate(:admin) } + fab!(:another_admin) { Fabricate(:admin) } it 'raises an error unless the user can revoke access' do sign_in(user) @@ -251,7 +251,7 @@ RSpec.describe Admin::UsersController do end describe '#grant_admin' do - let(:another_user) { Fabricate(:coding_horror) } + fab!(:another_user) { Fabricate(:coding_horror) } after do $redis.flushall @@ -278,7 +278,7 @@ RSpec.describe Admin::UsersController do end describe '#add_group' do - let(:group) { Fabricate(:group) } + fab!(:group) { Fabricate(:group) } it 'adds the user to the group' do post "/admin/users/#{user.id}/groups.json", params: { @@ -315,7 +315,7 @@ RSpec.describe Admin::UsersController do end describe '#trust_level' do - let(:another_user) { Fabricate(:coding_horror, created_at: 1.month.ago) } + fab!(:another_user) { Fabricate(:coding_horror, created_at: 1.month.ago) } it "raises an error when the user doesn't have permission" do sign_in(user) @@ -362,7 +362,7 @@ RSpec.describe Admin::UsersController do end describe '#grant_moderation' do - let(:another_user) { Fabricate(:coding_horror) } + fab!(:another_user) { Fabricate(:coding_horror) } it "raises an error when the user doesn't have permission" do sign_in(user) @@ -384,7 +384,7 @@ RSpec.describe Admin::UsersController do end describe '#revoke_moderation' do - let(:moderator) { Fabricate(:moderator) } + fab!(:moderator) { Fabricate(:moderator) } it 'raises an error unless the user can revoke access' do sign_in(user) @@ -403,9 +403,9 @@ RSpec.describe Admin::UsersController do end describe '#primary_group' do - let(:group) { Fabricate(:group) } - let(:another_user) { Fabricate(:coding_horror) } - let(:another_group) { Fabricate(:group, title: 'New') } + fab!(:group) { Fabricate(:group) } + fab!(:another_user) { Fabricate(:coding_horror) } + fab!(:another_group) { Fabricate(:group, title: 'New') } it "raises an error when the user doesn't have permission" do sign_in(user) @@ -490,7 +490,7 @@ RSpec.describe Admin::UsersController do end describe '#destroy' do - let(:delete_me) { Fabricate(:user) } + fab!(:delete_me) { Fabricate(:user) } it "returns a 403 if the user doesn't exist" do delete "/admin/users/123123drink.json" @@ -525,7 +525,7 @@ RSpec.describe Admin::UsersController do end describe '#activate' do - let(:reg_user) { Fabricate(:inactive_user) } + fab!(:reg_user) { Fabricate(:inactive_user) } it "returns success" do put "/admin/users/#{reg_user.id}/activate.json" @@ -551,7 +551,7 @@ RSpec.describe Admin::UsersController do end describe '#log_out' do - let(:reg_user) { Fabricate(:user) } + fab!(:reg_user) { Fabricate(:user) } it "returns success" do post "/admin/users/#{reg_user.id}/log_out.json" @@ -567,7 +567,7 @@ RSpec.describe Admin::UsersController do end describe '#silence' do - let(:reg_user) { Fabricate(:user) } + fab!(:reg_user) { Fabricate(:user) } it "raises an error when the user doesn't have permission" do sign_in(user) @@ -639,7 +639,7 @@ RSpec.describe Admin::UsersController do end describe '#unsilence' do - let(:reg_user) { Fabricate(:user, silenced_till: 10.years.from_now) } + fab!(:reg_user) { Fabricate(:user, silenced_till: 10.years.from_now) } it "raises an error when the user doesn't have permission" do sign_in(user) @@ -666,8 +666,8 @@ RSpec.describe Admin::UsersController do end describe '#reject_bulk' do - let(:reject_me) { Fabricate(:user) } - let(:reject_me_too) { Fabricate(:user) } + fab!(:reject_me) { Fabricate(:user) } + fab!(:reject_me_too) { Fabricate(:user) } it 'does nothing without users' do delete "/admin/users/reject-bulk.json" @@ -931,7 +931,7 @@ RSpec.describe Admin::UsersController do end describe "#penalty_history" do - let(:moderator) { Fabricate(:moderator) } + fab!(:moderator) { Fabricate(:moderator) } let(:logger) { StaffActionLogger.new(admin) } it "doesn't allow moderators to clear a user's history" do diff --git a/spec/requests/admin/versions_controller_spec.rb b/spec/requests/admin/versions_controller_spec.rb index 72cae6cbc4d..b6f8db943d3 100644 --- a/spec/requests/admin/versions_controller_spec.rb +++ b/spec/requests/admin/versions_controller_spec.rb @@ -17,7 +17,7 @@ describe Admin::VersionsController do end context 'while logged in as an admin' do - let(:admin) { Fabricate(:admin) } + fab!(:admin) { Fabricate(:admin) } before do sign_in(admin) end diff --git a/spec/requests/admin/web_hooks_controller_spec.rb b/spec/requests/admin/web_hooks_controller_spec.rb index 0d5d7d008de..be8e36f7ac4 100644 --- a/spec/requests/admin/web_hooks_controller_spec.rb +++ b/spec/requests/admin/web_hooks_controller_spec.rb @@ -9,8 +9,8 @@ describe Admin::WebHooksController do end context 'while logged in as an admin' do - let(:web_hook) { Fabricate(:web_hook) } - let(:admin) { Fabricate(:admin) } + fab!(:web_hook) { Fabricate(:web_hook) } + fab!(:admin) { Fabricate(:admin) } before do sign_in(admin) diff --git a/spec/requests/application_controller_spec.rb b/spec/requests/application_controller_spec.rb index b1ca8a06d4b..531a86cf71c 100644 --- a/spec/requests/application_controller_spec.rb +++ b/spec/requests/application_controller_spec.rb @@ -24,7 +24,7 @@ RSpec.describe ApplicationController do describe '#redirect_to_second_factor_if_required' do let(:admin) { Fabricate(:admin) } - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } before do admin # to skip welcome wizard at home page `/` @@ -254,11 +254,11 @@ RSpec.describe ApplicationController do end describe "#handle_theme" do - let(:theme) { Fabricate(:theme, user_selectable: true) } - let(:theme2) { Fabricate(:theme, user_selectable: true) } - let(:non_selectable_theme) { Fabricate(:theme, user_selectable: false) } - let(:user) { Fabricate(:user) } - let(:admin) { Fabricate(:admin) } + let!(:theme) { Fabricate(:theme, user_selectable: true) } + let!(:theme2) { Fabricate(:theme, user_selectable: true) } + let!(:non_selectable_theme) { Fabricate(:theme, user_selectable: false) } + fab!(:user) { Fabricate(:user) } + fab!(:admin) { Fabricate(:admin) } before do sign_in(user) diff --git a/spec/requests/badges_controller_spec.rb b/spec/requests/badges_controller_spec.rb index bb2f4546ae4..8d04b98d807 100644 --- a/spec/requests/badges_controller_spec.rb +++ b/spec/requests/badges_controller_spec.rb @@ -3,8 +3,8 @@ require 'rails_helper' describe BadgesController do - let!(:badge) { Fabricate(:badge) } - let(:user) { Fabricate(:user) } + fab!(:badge) { Fabricate(:badge) } + fab!(:user) { Fabricate(:user) } before do SiteSetting.enable_badges = true diff --git a/spec/requests/composer_controller_spec.rb b/spec/requests/composer_controller_spec.rb index eeec393e43e..a6b7d2c663e 100644 --- a/spec/requests/composer_controller_spec.rb +++ b/spec/requests/composer_controller_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' RSpec.describe ComposerController do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } describe '#parse_html' do diff --git a/spec/requests/composer_messages_controller_spec.rb b/spec/requests/composer_messages_controller_spec.rb index 0a148ae862a..0654bca1abc 100644 --- a/spec/requests/composer_messages_controller_spec.rb +++ b/spec/requests/composer_messages_controller_spec.rb @@ -3,8 +3,8 @@ require 'rails_helper' describe ComposerMessagesController do - let(:topic) { Fabricate(:topic, created_at: 10.years.ago, last_posted_at: 10.years.ago) } - let(:post) { Fabricate(:post, topic: topic, post_number: 1, created_at: 10.years.ago) } + fab!(:topic) { Fabricate(:topic, created_at: 10.years.ago, last_posted_at: 10.years.ago) } + fab!(:post) { Fabricate(:post, topic: topic, post_number: 1, created_at: 10.years.ago) } context '#index' do it 'requires you to be logged in' do diff --git a/spec/requests/directory_items_controller_spec.rb b/spec/requests/directory_items_controller_spec.rb index f1aabe8f29e..41f42b9c452 100644 --- a/spec/requests/directory_items_controller_spec.rb +++ b/spec/requests/directory_items_controller_spec.rb @@ -3,11 +3,11 @@ require 'rails_helper' describe DirectoryItemsController do - let!(:user) { Fabricate(:user) } - let!(:evil_trout) { Fabricate(:evil_trout) } - let!(:walter_white) { Fabricate(:walter_white) } - let!(:stage_user) { Fabricate(:staged, username: 'stage_user') } - let!(:group) { Fabricate(:group, users: [evil_trout, stage_user]) } + fab!(:user) { Fabricate(:user) } + fab!(:evil_trout) { Fabricate(:evil_trout) } + fab!(:walter_white) { Fabricate(:walter_white) } + fab!(:stage_user) { Fabricate(:staged, username: 'stage_user') } + fab!(:group) { Fabricate(:group, users: [evil_trout, stage_user]) } it "requires a `period` param" do get '/directory_items.json' diff --git a/spec/requests/email_controller_spec.rb b/spec/requests/email_controller_spec.rb index 5cb2433262d..a5330e39dd2 100644 --- a/spec/requests/email_controller_spec.rb +++ b/spec/requests/email_controller_spec.rb @@ -3,9 +3,9 @@ require 'rails_helper' RSpec.describe EmailController do - let(:user) { Fabricate(:user) } - let(:topic) { Fabricate(:topic) } - let(:private_topic) { Fabricate(:private_message_topic) } + fab!(:user) { Fabricate(:user) } + fab!(:topic) { Fabricate(:topic) } + fab!(:private_topic) { Fabricate(:private_message_topic) } context '.perform unsubscribe' do it 'raises not found on invalid key' do @@ -13,7 +13,7 @@ RSpec.describe EmailController do expect(response.status).to eq(404) end - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } let(:key) { UnsubscribeKey.create_key_for(user, "all") } it 'can fully unsubscribe' do @@ -192,7 +192,7 @@ RSpec.describe EmailController do expect(response.body).to include(CGI.escapeHTML(I18n.t("unsubscribe.not_found_description"))) end - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } let(:unsubscribe_key) { UnsubscribeKey.create_key_for(user, key_type) } context 'Unsubscribe from digest' do @@ -259,7 +259,7 @@ RSpec.describe EmailController do end context 'Unsubscribe from a post' do - let(:post) { Fabricate(:post) } + fab!(:post) { Fabricate(:post) } let(:user) { post.user } let(:key_type) { post } diff --git a/spec/requests/export_csv_controller_spec.rb b/spec/requests/export_csv_controller_spec.rb index a509ba325d4..0fbc55b37c5 100644 --- a/spec/requests/export_csv_controller_spec.rb +++ b/spec/requests/export_csv_controller_spec.rb @@ -4,7 +4,7 @@ require "rails_helper" describe ExportCsvController do context "while logged in as normal user" do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } before { sign_in(user) } describe "#export_entity" do @@ -43,7 +43,7 @@ describe ExportCsvController do end context "while logged in as an admin" do - let(:admin) { Fabricate(:admin) } + fab!(:admin) { Fabricate(:admin) } before { sign_in(admin) } describe "#export_entity" do @@ -80,7 +80,7 @@ describe ExportCsvController do end context 'while logged in as a moderator' do - let(:moderator) { Fabricate(:moderator) } + fab!(:moderator) { Fabricate(:moderator) } before { sign_in(moderator) } diff --git a/spec/requests/groups_controller_spec.rb b/spec/requests/groups_controller_spec.rb index 46a495d4321..7284da58d3e 100644 --- a/spec/requests/groups_controller_spec.rb +++ b/spec/requests/groups_controller_spec.rb @@ -3,11 +3,11 @@ require 'rails_helper' describe GroupsController do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } let(:group) { Fabricate(:group, users: [user]) } let(:moderator_group_id) { Group::AUTO_GROUPS[:moderators] } - let(:admin) { Fabricate(:admin) } - let(:moderator) { Fabricate(:moderator) } + fab!(:admin) { Fabricate(:admin) } + fab!(:moderator) { Fabricate(:moderator) } describe '#index' do let(:staff_group) do @@ -161,7 +161,7 @@ describe GroupsController do end context 'viewing as an admin' do - let(:admin) { Fabricate(:admin) } + fab!(:admin) { Fabricate(:admin) } before do sign_in(admin) @@ -673,7 +673,7 @@ describe GroupsController do ) end - let(:user3) do + fab!(:user3) do Fabricate(:user, last_seen_at: nil, last_posted_at: nil, @@ -681,7 +681,7 @@ describe GroupsController do ) end - let(:bot) { Fabricate(:user, id: -999) } + fab!(:bot) { Fabricate(:user, id: -999) } let(:group) { Fabricate(:group, users: [user1, user2, user3, bot]) } @@ -793,7 +793,7 @@ describe GroupsController do end describe "#edit" do - let(:group) { Fabricate(:group) } + fab!(:group) { Fabricate(:group) } context 'when user is not signed in' do it 'should be fobidden' do @@ -835,7 +835,7 @@ describe GroupsController do end context 'when user is an admin' do - let(:user) { Fabricate(:admin) } + fab!(:user) { Fabricate(:admin) } let(:group) { Fabricate(:group, users: [user], automatic: true) } before do @@ -853,7 +853,7 @@ describe GroupsController do end describe "membership edits" do - let(:admin) { Fabricate(:admin) } + fab!(:admin) { Fabricate(:admin) } before do sign_in(admin) @@ -884,8 +884,8 @@ describe GroupsController do end context "is able to add several members to a group" do - let(:user1) { Fabricate(:user) } - let(:user2) { Fabricate(:user, username: "UsEr2") } + fab!(:user1) { Fabricate(:user) } + fab!(:user2) { Fabricate(:user, username: "UsEr2") } it "adds by username" do expect do @@ -963,7 +963,7 @@ describe GroupsController do end context 'public group' do - let(:other_user) { Fabricate(:user) } + fab!(:other_user) { Fabricate(:user) } before do group.update!( @@ -1068,7 +1068,7 @@ describe GroupsController do end context 'public group' do - let(:other_user) { Fabricate(:user) } + fab!(:other_user) { Fabricate(:user) } let(:group) { Fabricate(:public_group, users: [other_user]) } context "admin" do @@ -1106,8 +1106,8 @@ describe GroupsController do context '#remove_members' do context "is able to remove several members from a group" do - let(:user1) { Fabricate(:user) } - let(:user2) { Fabricate(:user, username: "UsEr2") } + fab!(:user1) { Fabricate(:user) } + fab!(:user2) { Fabricate(:user, username: "UsEr2") } let(:group1) { Fabricate(:group, users: [user1, user2]) } it "removes by username" do @@ -1218,7 +1218,7 @@ describe GroupsController do end context 'when user is an admin' do - let(:admin) { Fabricate(:admin) } + fab!(:admin) { Fabricate(:admin) } before do sign_in(admin) @@ -1263,7 +1263,7 @@ describe GroupsController do end describe '#request_membership' do - let(:new_user) { Fabricate(:user) } + fab!(:new_user) { Fabricate(:user) } it 'requires the user to log in' do post "/groups/#{group.name}/request_membership.json" @@ -1322,7 +1322,7 @@ describe GroupsController do end describe '#search ' do - let(:hidden_group) do + fab!(:hidden_group) do Fabricate(:group, visibility_level: Group.visibility_levels[:owners], name: 'KingOfTheNorth' diff --git a/spec/requests/inline_onebox_controller_spec.rb b/spec/requests/inline_onebox_controller_spec.rb index 6baf5f3b07d..1a29e752759 100644 --- a/spec/requests/inline_onebox_controller_spec.rb +++ b/spec/requests/inline_onebox_controller_spec.rb @@ -20,7 +20,7 @@ describe InlineOneboxController do end context "topic link" do - let(:topic) { Fabricate(:topic) } + fab!(:topic) { Fabricate(:topic) } it "returns information for a valid link" do get "/inline-onebox.json", params: { urls: [ topic.url ] } diff --git a/spec/requests/invites_controller_spec.rb b/spec/requests/invites_controller_spec.rb index 08759327c0d..6a7ea16d118 100644 --- a/spec/requests/invites_controller_spec.rb +++ b/spec/requests/invites_controller_spec.rb @@ -4,8 +4,8 @@ require 'rails_helper' describe InvitesController do context 'show' do - let(:invite) { Fabricate(:invite) } - let(:user) { Fabricate(:coding_horror) } + fab!(:invite) { Fabricate(:invite) } + fab!(:user) { Fabricate(:coding_horror) } it "returns error if invite not found" do get "/invites/nopeNOPEnope" @@ -49,7 +49,7 @@ describe InvitesController do context 'while logged in' do let!(:user) { sign_in(Fabricate(:user)) } let!(:invite) { Fabricate(:invite, invited_by: user) } - let(:another_invite) { Fabricate(:invite, email: 'anotheremail@address.com') } + fab!(:another_invite) { Fabricate(:invite, email: 'anotheremail@address.com') } it 'raises an error when the email is missing' do delete "/invites.json" @@ -229,7 +229,7 @@ describe InvitesController do end context 'with a deleted invite' do - let(:topic) { Fabricate(:topic) } + fab!(:topic) { Fabricate(:topic) } let(:invite) do Invite.invite_by_email("iceking@adventuretime.ooo", topic.user, topic) @@ -251,7 +251,7 @@ describe InvitesController do end context 'with a valid invite id' do - let(:topic) { Fabricate(:topic) } + fab!(:topic) { Fabricate(:topic) } let(:invite) do Invite.invite_by_email("iceking@adventuretime.ooo", topic.user, topic) end @@ -263,7 +263,7 @@ describe InvitesController do end context 'when redeem returns a user' do - let(:user) { Fabricate(:coding_horror) } + fab!(:user) { Fabricate(:coding_horror) } context 'success' do it 'logs in the user' do @@ -402,7 +402,7 @@ describe InvitesController do end context 'new registrations are disabled' do - let(:topic) { Fabricate(:topic) } + fab!(:topic) { Fabricate(:topic) } let(:invite) do Invite.invite_by_email("iceking@adventuretime.ooo", topic.user, topic) @@ -421,7 +421,7 @@ describe InvitesController do end context 'user is already logged in' do - let(:topic) { Fabricate(:topic) } + fab!(:topic) { Fabricate(:topic) } let(:invite) do Invite.invite_by_email("iceking@adventuretime.ooo", topic.user, topic) @@ -449,7 +449,7 @@ describe InvitesController do context 'while logged in' do let!(:user) { sign_in(Fabricate(:user)) } let!(:invite) { Fabricate(:invite, invited_by: user) } - let(:another_invite) { Fabricate(:invite, email: 'last_name@example.com') } + fab!(:another_invite) { Fabricate(:invite, email: 'last_name@example.com') } it 'raises an error when the email is missing' do post "/invites/reinvite.json" diff --git a/spec/requests/metadata_controller_spec.rb b/spec/requests/metadata_controller_spec.rb index 4e5b9d720c7..099507882d9 100644 --- a/spec/requests/metadata_controller_spec.rb +++ b/spec/requests/metadata_controller_spec.rb @@ -3,6 +3,7 @@ require 'rails_helper' RSpec.describe MetadataController do + describe 'manifest.webmanifest' do before do SiteIconManager.enable diff --git a/spec/requests/omniauth_callbacks_controller_spec.rb b/spec/requests/omniauth_callbacks_controller_spec.rb index f6422417e54..cdb3660d9df 100644 --- a/spec/requests/omniauth_callbacks_controller_spec.rb +++ b/spec/requests/omniauth_callbacks_controller_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' RSpec.describe Users::OmniauthCallbacksController do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } before do OmniAuth.config.test_mode = true @@ -398,7 +398,7 @@ RSpec.describe Users::OmniauthCallbacksController do end context 'when attempting reconnect' do - let(:user2) { Fabricate(:user) } + fab!(:user2) { Fabricate(:user) } before do UserAssociatedAccount.create!(provider_name: "google_oauth2", provider_uid: '12345', user: user) UserAssociatedAccount.create!(provider_name: "google_oauth2", provider_uid: '123456', user: user2) diff --git a/spec/requests/permalinks_controller_spec.rb b/spec/requests/permalinks_controller_spec.rb index 7475e5225ab..ff94f0caeed 100644 --- a/spec/requests/permalinks_controller_spec.rb +++ b/spec/requests/permalinks_controller_spec.rb @@ -3,8 +3,8 @@ require 'rails_helper' describe PermalinksController do - let(:topic) { Fabricate(:topic) } - let(:permalink) { Fabricate(:permalink, url: "deadroutee/topic/546") } + fab!(:topic) { Fabricate(:topic) } + fab!(:permalink) { Fabricate(:permalink, url: "deadroutee/topic/546") } describe 'show' do it "should redirect to a permalink's target_url with status 301" do diff --git a/spec/requests/post_actions_controller_spec.rb b/spec/requests/post_actions_controller_spec.rb index c187592c63e..e8ed8a5b7d3 100644 --- a/spec/requests/post_actions_controller_spec.rb +++ b/spec/requests/post_actions_controller_spec.rb @@ -4,7 +4,7 @@ require 'rails_helper' RSpec.describe PostActionsController do describe '#destroy' do - let(:post) { Fabricate(:post, user: Fabricate(:coding_horror)) } + fab!(:post) { Fabricate(:post, user: Fabricate(:coding_horror)) } it 'requires you to be logged in' do delete "/post_actions/#{post.id}.json" @@ -12,7 +12,7 @@ RSpec.describe PostActionsController do end context 'logged in' do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } before do sign_in(user) @@ -114,8 +114,8 @@ RSpec.describe PostActionsController do end describe 'as a moderator' do - let(:user) { Fabricate(:moderator) } - let(:post_1) { Fabricate(:post, user: Fabricate(:coding_horror)) } + fab!(:user) { Fabricate(:moderator) } + fab!(:post_1) { Fabricate(:post, user: Fabricate(:coding_horror)) } before do sign_in(user) @@ -261,4 +261,5 @@ RSpec.describe PostActionsController do end end end + end diff --git a/spec/requests/posts_controller_spec.rb b/spec/requests/posts_controller_spec.rb index 350d4abaf7a..b5dfb78f9e1 100644 --- a/spec/requests/posts_controller_spec.rb +++ b/spec/requests/posts_controller_spec.rb @@ -3,8 +3,8 @@ require 'rails_helper' shared_examples 'finding and showing post' do - let(:user) { Fabricate(:user) } - let(:post) { Fabricate(:post, user: user) } + fab!(:user) { Fabricate(:user) } + fab!(:post) { Fabricate(:post, user: user) } it "ensures the user can't see the post" do topic = post.topic @@ -57,9 +57,9 @@ shared_examples 'action requires login' do |method, url, params = {}| end describe PostsController do - let(:user) { Fabricate(:user) } - let(:category) { Fabricate(:category) } - let(:topic) { Fabricate(:topic) } + fab!(:user) { Fabricate(:user) } + fab!(:category) { Fabricate(:category) } + fab!(:topic) { Fabricate(:topic) } let(:public_post) { Fabricate(:post, user: user, topic: topic) } let(:topicless_post) { Fabricate(:post, user: user, raw: '

Car 54, where are you?

') } @@ -168,8 +168,8 @@ describe PostsController do describe 'when logged in' do let(:topic) { Fabricate(:topic) } - let(:user) { Fabricate(:user) } - let(:moderator) { Fabricate(:moderator) } + fab!(:user) { Fabricate(:user) } + fab!(:moderator) { Fabricate(:moderator) } it "raises an error when the user doesn't have permission to see the post" do pm = Fabricate(:private_message_topic) @@ -198,9 +198,9 @@ describe PostsController do include_examples 'action requires login', :delete, "/posts/destroy_many.json", params: { post_ids: [123, 345] } describe 'when logged in' do - let(:poster) { Fabricate(:moderator) } - let(:post1) { Fabricate(:post, user: poster, post_number: 2) } - let(:post2) { Fabricate(:post, topic: post1.topic, user: poster, post_number: 3, reply_to_post_number: post1.post_number) } + fab!(:poster) { Fabricate(:moderator) } + fab!(:post1) { Fabricate(:post, user: poster, post_number: 2) } + fab!(:post2) { Fabricate(:post, topic: post1.topic, user: poster, post_number: 3, reply_to_post_number: post1.post_number) } it "raises invalid parameters no post_ids" do sign_in(poster) @@ -247,7 +247,7 @@ describe PostsController do end context "deleting flagged posts" do - let(:moderator) { Fabricate(:moderator) } + fab!(:moderator) { Fabricate(:moderator) } before do sign_in(moderator) @@ -278,7 +278,7 @@ describe PostsController do include_examples 'action requires login', :put, "/posts/123/recover.json" describe 'when logged in' do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } it "raises an error when the user doesn't have permission to see the post" do post = Fabricate(:post, topic: Fabricate(:private_message_topic), post_number: 3) @@ -304,8 +304,8 @@ describe PostsController do describe '#update' do include_examples 'action requires login', :put, "/posts/2.json" - let(:user) { Fabricate(:user) } - let(:post) { Fabricate(:post, user: user) } + fab!(:user) { Fabricate(:user) } + fab!(:post) { Fabricate(:post, user: user) } let(:update_params) do { post: { raw: 'edited body', edit_reason: 'typo' }, @@ -313,7 +313,7 @@ describe PostsController do } end - let(:moderator) { Fabricate(:moderator) } + fab!(:moderator) { Fabricate(:moderator) } describe 'when logged in as a regular user' do before do @@ -446,15 +446,15 @@ describe PostsController do describe '#bookmark' do include_examples 'action requires login', :put, "/posts/2/bookmark.json" - let(:post) { Fabricate(:post, user: user) } - let(:user) { Fabricate(:user) } + fab!(:post) { Fabricate(:post, user: user) } + fab!(:user) { Fabricate(:user) } describe 'when logged in' do before do sign_in(user) end - let(:private_message) { Fabricate(:private_message_post) } + fab!(:private_message) { Fabricate(:private_message_post) } it "raises an error if the user doesn't have permission to see the post" do put "/posts/#{private_message.id}/bookmark.json", params: { bookmarked: "true" } @@ -471,7 +471,7 @@ describe PostsController do context "removing a bookmark" do let(:post_action) { PostActionCreator.create(user, post, :bookmark).post_action } - let(:admin) { Fabricate(:admin) } + fab!(:admin) { Fabricate(:admin) } it "returns the right response when post is not bookmarked" do put "/posts/#{Fabricate(:post, user: user).id}/bookmark.json" @@ -588,8 +588,8 @@ describe PostsController do sign_in(user) end - let(:user) { Fabricate(:user) } - let(:post) { Fabricate(:post, user: user) } + fab!(:user) { Fabricate(:user) } + fab!(:post) { Fabricate(:post, user: user) } it "raises an error if the user doesn't have permission to wiki the post" do put "/posts/#{post.id}/wiki.json", params: { wiki: 'true' } @@ -644,8 +644,8 @@ describe PostsController do sign_in(user) end - let(:user) { Fabricate(:user) } - let(:post) { Fabricate(:post, user: user) } + fab!(:user) { Fabricate(:user) } + fab!(:post) { Fabricate(:post, user: user) } it "raises an error if the user doesn't have permission to change the post type" do put "/posts/#{post.id}/post_type.json", params: { post_type: 2 } @@ -666,7 +666,7 @@ describe PostsController do include_examples "action requires login", :put, "/posts/2/rebake.json" describe "when logged in" do - let(:post) { Fabricate(:post, user: user) } + fab!(:post) { Fabricate(:post, user: user) } it "raises an error if the user doesn't have permission to rebake the post" do sign_in(Fabricate(:user)) @@ -698,7 +698,7 @@ describe PostsController do SiteSetting.min_first_post_typing_time = 0 end - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } context 'api' do it 'memoizes duplicate requests' do @@ -1057,7 +1057,7 @@ describe PostsController do end describe 'shared draft' do - let(:destination_category) { Fabricate(:category) } + fab!(:destination_category) { Fabricate(:category) } it "will raise an error for regular users" do post "/posts.json", params: { @@ -1085,7 +1085,7 @@ describe PostsController do end context "with a shared category" do - let(:shared_category) { Fabricate(:category) } + fab!(:shared_category) { Fabricate(:category) } before do SiteSetting.shared_drafts_category = shared_category.id end @@ -1108,7 +1108,7 @@ describe PostsController do end describe 'warnings' do - let(:user_2) { Fabricate(:user) } + fab!(:user_2) { Fabricate(:user) } context 'as a staff user' do before do @@ -1223,7 +1223,7 @@ describe PostsController do end context "users" do - let(:topic) { Fabricate(:topic) } + fab!(:topic) { Fabricate(:topic) } [:user].each do |user| it "will raise an error for #{user}" do @@ -1242,7 +1242,7 @@ describe PostsController do end describe '#revisions' do - let(:post) { Fabricate(:post, version: 2) } + fab!(:post) { Fabricate(:post, version: 2) } let(:post_revision) { Fabricate(:post_revision, post: post) } it "throws an exception when revision is < 2" do @@ -1319,9 +1319,9 @@ describe PostsController do end context "deleted post" do - let(:admin) { Fabricate(:admin) } - let(:deleted_post) { Fabricate(:post, user: admin, version: 3) } - let(:deleted_post_revision) { Fabricate(:post_revision, user: admin, post: deleted_post) } + fab!(:admin) { Fabricate(:admin) } + fab!(:deleted_post) { Fabricate(:post, user: admin, version: 3) } + fab!(:deleted_post_revision) { Fabricate(:post_revision, user: admin, post: deleted_post) } before { deleted_post.trash!(admin) } @@ -1333,10 +1333,10 @@ describe PostsController do end context "deleted topic" do - let(:admin) { Fabricate(:admin) } - let(:deleted_topic) { Fabricate(:topic, user: admin) } - let(:post) { Fabricate(:post, user: admin, topic: deleted_topic, version: 3) } - let(:post_revision) { Fabricate(:post_revision, user: admin, post: post) } + fab!(:admin) { Fabricate(:admin) } + fab!(:deleted_topic) { Fabricate(:topic, user: admin) } + fab!(:post) { Fabricate(:post, user: admin, topic: deleted_topic, version: 3) } + fab!(:post_revision) { Fabricate(:post_revision, user: admin, post: post) } before { deleted_topic.trash!(admin) } @@ -1351,14 +1351,14 @@ describe PostsController do describe '#revert' do include_examples 'action requires login', :put, "/posts/123/revisions/2/revert.json" - let(:post) { Fabricate(:post, user: Fabricate(:user), raw: "Lorem ipsum dolor sit amet, cu nam libris tractatos, ancillae senserit ius ex") } + fab!(:post) { Fabricate(:post, user: Fabricate(:user), raw: "Lorem ipsum dolor sit amet, cu nam libris tractatos, ancillae senserit ius ex") } let(:post_revision) { Fabricate(:post_revision, post: post, modifications: { "raw" => ["this is original post body.", "this is edited post body."] }) } let(:blank_post_revision) { Fabricate(:post_revision, post: post, modifications: { "edit_reason" => ["edit reason #1", "edit reason #2"] }) } let(:same_post_revision) { Fabricate(:post_revision, post: post, modifications: { "raw" => ["Lorem ipsum dolor sit amet, cu nam libris tractatos, ancillae senserit ius ex", "this is edited post body."] }) } let(:post_id) { post.id } let(:revision_id) { post_revision.number } - let(:moderator) { Fabricate(:moderator) } + fab!(:moderator) { Fabricate(:moderator) } describe 'when logged in as a regular user' do it "does not work" do @@ -1420,7 +1420,7 @@ describe PostsController do sign_in(Fabricate(:user)) end - let(:post) { Fabricate(:post) } + fab!(:post) { Fabricate(:post) } it "raises an error when you can't see the post" do post = Fabricate(:private_message_post) @@ -1573,8 +1573,8 @@ describe PostsController do end describe '#short_link' do - let(:topic) { Fabricate(:topic) } - let(:post) { Fabricate(:post, topic: topic) } + fab!(:topic) { Fabricate(:topic) } + fab!(:post) { Fabricate(:post, topic: topic) } it "redirects to the topic" do get "/p/#{post.id}.json" diff --git a/spec/requests/push_notification_controller_spec.rb b/spec/requests/push_notification_controller_spec.rb index 578bd3ec3df..0134ffb3c30 100644 --- a/spec/requests/push_notification_controller_spec.rb +++ b/spec/requests/push_notification_controller_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' describe PushNotificationController do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } context "logged out" do it "should not allow subscribe" do diff --git a/spec/requests/queued_posts_controller_spec.rb b/spec/requests/queued_posts_controller_spec.rb index 3b613dbfeac..b0f604cca26 100644 --- a/spec/requests/queued_posts_controller_spec.rb +++ b/spec/requests/queued_posts_controller_spec.rb @@ -32,7 +32,7 @@ describe QueuedPostsController do describe '#update' do before { sign_in(Fabricate(:moderator)) } - let(:qp) { Fabricate(:reviewable_queued_post) } + fab!(:qp) { Fabricate(:reviewable_queued_post) } context 'not found' do it 'returns json error' do @@ -87,7 +87,7 @@ describe QueuedPostsController do end context 'when it is a topic' do - let(:queued_topic) { Fabricate(:reviewable_queued_post_topic,) } + fab!(:queued_topic) { Fabricate(:reviewable_queued_post_topic,) } it 'updates the topic attributes' do put "/queued_posts/#{queued_topic.id}.json", params: { @@ -122,7 +122,7 @@ describe QueuedPostsController do end context 'when it is a reply' do - let(:queued_reply) { Fabricate(:reviewable_queued_post) } + fab!(:queued_reply) { Fabricate(:reviewable_queued_post) } it 'updates the reply attributes' do put "/queued_posts/#{queued_reply.id}.json", params: { diff --git a/spec/requests/reviewables_controller_spec.rb b/spec/requests/reviewables_controller_spec.rb index 80007867a74..c310b1b1089 100644 --- a/spec/requests/reviewables_controller_spec.rb +++ b/spec/requests/reviewables_controller_spec.rb @@ -38,7 +38,7 @@ describe ReviewablesController do end context "when logged in" do - let(:admin) { Fabricate(:admin) } + fab!(:admin) { Fabricate(:admin) } before do sign_in(admin) @@ -172,7 +172,7 @@ describe ReviewablesController do context "#show" do context "basics" do - let(:reviewable) { Fabricate(:reviewable) } + fab!(:reviewable) { Fabricate(:reviewable) } before do sign_in(Fabricate(:moderator)) end @@ -192,9 +192,9 @@ describe ReviewablesController do end context "conversation" do - let(:post) { Fabricate(:post) } - let(:user) { Fabricate(:user) } - let(:admin) { Fabricate(:admin) } + fab!(:post) { Fabricate(:post) } + fab!(:user) { Fabricate(:user) } + fab!(:admin) { Fabricate(:admin) } let(:result) { PostActionCreator.notify_moderators(user, post, 'this is the first post') } let(:reviewable) { result.reviewable } @@ -237,7 +237,7 @@ describe ReviewablesController do end context "#perform" do - let(:reviewable) { Fabricate(:reviewable) } + fab!(:reviewable) { Fabricate(:reviewable) } before do sign_in(Fabricate(:moderator)) end @@ -301,11 +301,11 @@ describe ReviewablesController do end context "#topics" do - let(:post0) { Fabricate(:post) } - let(:post1) { Fabricate(:post, topic: post0.topic) } - let(:post2) { Fabricate(:post) } - let(:user0) { Fabricate(:user) } - let(:user1) { Fabricate(:user) } + fab!(:post0) { Fabricate(:post) } + fab!(:post1) { Fabricate(:post, topic: post0.topic) } + fab!(:post2) { Fabricate(:post) } + fab!(:user0) { Fabricate(:user) } + fab!(:user1) { Fabricate(:user) } it "returns empty json for no reviewables" do get "/review/topics.json" @@ -353,10 +353,10 @@ describe ReviewablesController do end context "#update" do - let(:reviewable) { Fabricate(:reviewable) } - let(:reviewable_post) { Fabricate(:reviewable_queued_post) } - let(:reviewable_topic) { Fabricate(:reviewable_queued_post_topic) } - let(:moderator) { Fabricate(:moderator) } + fab!(:reviewable) { Fabricate(:reviewable) } + fab!(:reviewable_post) { Fabricate(:reviewable_queued_post) } + fab!(:reviewable_topic) { Fabricate(:reviewable_queued_post_topic) } + fab!(:moderator) { Fabricate(:moderator) } before do sign_in(moderator) @@ -460,7 +460,7 @@ describe ReviewablesController do end context "#destroy" do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } before do sign_in(user) diff --git a/spec/requests/search_controller_spec.rb b/spec/requests/search_controller_spec.rb index c9b069f6ad9..0b69e391914 100644 --- a/spec/requests/search_controller_spec.rb +++ b/spec/requests/search_controller_spec.rb @@ -174,7 +174,7 @@ describe SearchController do end context "with a user" do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } it "raises an error if the user can't see the context" do get "/search/query.json", params: { diff --git a/spec/requests/session_controller_spec.rb b/spec/requests/session_controller_spec.rb index 66f0ef3a8c8..a3b995601d6 100644 --- a/spec/requests/session_controller_spec.rb +++ b/spec/requests/session_controller_spec.rb @@ -1345,7 +1345,7 @@ RSpec.describe SessionController do end context 'for an existing username' do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } context 'local login is disabled' do before do diff --git a/spec/requests/static_controller_spec.rb b/spec/requests/static_controller_spec.rb index 9883cf0937d..0f412184fbe 100644 --- a/spec/requests/static_controller_spec.rb +++ b/spec/requests/static_controller_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' describe StaticController do - let(:upload) { Fabricate(:upload) } + fab!(:upload) { Fabricate(:upload) } context '#favicon' do let(:filename) { 'smallest.png' } diff --git a/spec/requests/tag_groups_controller_spec.rb b/spec/requests/tag_groups_controller_spec.rb index 421f2d21b05..05f4aba2b38 100644 --- a/spec/requests/tag_groups_controller_spec.rb +++ b/spec/requests/tag_groups_controller_spec.rb @@ -3,8 +3,8 @@ require 'rails_helper' RSpec.describe TagGroupsController do - let(:user) { Fabricate(:user) } - let(:tag_group) { Fabricate(:tag_group) } + fab!(:user) { Fabricate(:user) } + fab!(:tag_group) { Fabricate(:tag_group) } describe '#index' do describe 'for a non staff user' do @@ -21,7 +21,7 @@ RSpec.describe TagGroupsController do end describe 'for a staff user' do - let(:admin) { Fabricate(:admin) } + fab!(:admin) { Fabricate(:admin) } before do sign_in(admin) diff --git a/spec/requests/tags_controller_spec.rb b/spec/requests/tags_controller_spec.rb index b5bc226ce40..ea96873e7bc 100644 --- a/spec/requests/tags_controller_spec.rb +++ b/spec/requests/tags_controller_spec.rb @@ -81,7 +81,7 @@ describe TagsController do end describe '#check_hashtag' do - let(:tag) { Fabricate(:tag, name: 'test') } + fab!(:tag) { Fabricate(:tag, name: 'test') } it "should return the right response" do get "/tags/check.json", params: { tag_values: [tag.name] } @@ -94,8 +94,8 @@ describe TagsController do end describe "#update" do - let(:tag) { Fabricate(:tag) } - let(:admin) { Fabricate(:admin) } + fab!(:tag) { Fabricate(:tag) } + fab!(:admin) { Fabricate(:admin) } before do tag @@ -117,9 +117,9 @@ describe TagsController do end describe '#personal_messages' do - let(:regular_user) { Fabricate(:trust_level_4) } - let(:moderator) { Fabricate(:moderator) } - let(:admin) { Fabricate(:admin) } + fab!(:regular_user) { Fabricate(:trust_level_4) } + fab!(:moderator) { Fabricate(:moderator) } + fab!(:admin) { Fabricate(:admin) } let(:personal_message) do Fabricate(:private_message_topic, user: regular_user, topic_allowed_users: [ Fabricate.build(:topic_allowed_user, user: regular_user), @@ -188,13 +188,13 @@ describe TagsController do end describe '#show_latest' do - let(:tag) { Fabricate(:tag) } - let(:other_tag) { Fabricate(:tag) } - let(:third_tag) { Fabricate(:tag) } - let(:category) { Fabricate(:category) } - let(:subcategory) { Fabricate(:category, parent_category_id: category.id) } + fab!(:tag) { Fabricate(:tag) } + fab!(:other_tag) { Fabricate(:tag) } + fab!(:third_tag) { Fabricate(:tag) } + fab!(:category) { Fabricate(:category) } + fab!(:subcategory) { Fabricate(:category, parent_category_id: category.id) } - let(:single_tag_topic) { Fabricate(:topic, tags: [tag]) } + fab!(:single_tag_topic) { Fabricate(:topic, tags: [tag]) } let(:multi_tag_topic) { Fabricate(:topic, tags: [tag, other_tag]) } let(:all_tag_topic) { Fabricate(:topic, tags: [tag, other_tag, third_tag]) } @@ -334,8 +334,8 @@ describe TagsController do end context 'with category restriction' do - let(:yup) { Fabricate(:tag, name: 'yup') } - let(:category) { Fabricate(:category, tags: [yup]) } + fab!(:yup) { Fabricate(:tag, name: 'yup') } + fab!(:category) { Fabricate(:category, tags: [yup]) } it "can say if given tag is not allowed" do nope = Fabricate(:tag, name: 'nope') diff --git a/spec/requests/theme_javascripts_controller_spec.rb b/spec/requests/theme_javascripts_controller_spec.rb index 349dad4afe2..6c05efd4e57 100644 --- a/spec/requests/theme_javascripts_controller_spec.rb +++ b/spec/requests/theme_javascripts_controller_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' describe ThemeJavascriptsController do - let(:theme) { Fabricate(:theme) } + let!(:theme) { Fabricate(:theme) } let(:theme_field) { ThemeField.create!(theme: theme, target_id: 0, name: "header", value: "html") } let(:javascript_cache) { JavascriptCache.create!(content: 'console.log("hello");', theme_field: theme_field) } diff --git a/spec/requests/topics_controller_spec.rb b/spec/requests/topics_controller_spec.rb index cc818619827..e59ba7b6711 100644 --- a/spec/requests/topics_controller_spec.rb +++ b/spec/requests/topics_controller_spec.rb @@ -3,8 +3,8 @@ require 'rails_helper' RSpec.describe TopicsController do - let(:topic) { Fabricate(:topic) } - let(:user) { Fabricate(:user) } + fab!(:topic) { Fabricate(:topic) } + fab!(:user) { Fabricate(:user) } describe '#wordpress' do let!(:user) { sign_in(Fabricate(:moderator)) } @@ -59,8 +59,8 @@ RSpec.describe TopicsController do end describe 'moving to a new topic' do - let(:user) { Fabricate(:user) } - let(:moderator) { Fabricate(:moderator) } + fab!(:user) { Fabricate(:user) } + fab!(:moderator) { Fabricate(:moderator) } let(:p1) { Fabricate(:post, user: user, post_number: 1) } let(:p2) { Fabricate(:post, user: user, post_number: 2, topic: p1.topic) } let!(:topic) { p1.topic } @@ -187,7 +187,7 @@ RSpec.describe TopicsController do let!(:user) { sign_in(Fabricate(:moderator)) } let(:p1) { Fabricate(:post, user: user) } let(:topic) { p1.topic } - let(:dest_topic) { Fabricate(:topic) } + fab!(:dest_topic) { Fabricate(:topic) } let(:p2) { Fabricate(:post, user: user, topic: topic) } context 'success' do @@ -245,9 +245,9 @@ RSpec.describe TopicsController do end describe 'moving to a new message' do - let(:user) { Fabricate(:user) } - let(:trust_level_4) { Fabricate(:trust_level_4) } - let(:moderator) { Fabricate(:moderator) } + fab!(:user) { Fabricate(:user) } + fab!(:trust_level_4) { Fabricate(:trust_level_4) } + fab!(:moderator) { Fabricate(:moderator) } let!(:message) { Fabricate(:private_message_topic) } let!(:p1) { Fabricate(:post, user: user, post_number: 1, topic: message) } let!(:p2) { Fabricate(:post, user: user, post_number: 2, topic: message) } @@ -335,8 +335,8 @@ RSpec.describe TopicsController do describe 'moving to an existing message' do let!(:user) { sign_in(Fabricate(:admin)) } - let(:trust_level_4) { Fabricate(:trust_level_4) } - let(:evil_trout) { Fabricate(:evil_trout) } + fab!(:trust_level_4) { Fabricate(:trust_level_4) } + fab!(:evil_trout) { Fabricate(:evil_trout) } let(:message) { Fabricate(:private_message_topic) } let(:p2) { Fabricate(:post, user: evil_trout, post_number: 2, topic: message) } @@ -387,8 +387,8 @@ RSpec.describe TopicsController do end describe 'merging into another topic' do - let(:moderator) { Fabricate(:moderator) } - let(:user) { Fabricate(:user) } + fab!(:moderator) { Fabricate(:moderator) } + fab!(:user) { Fabricate(:user) } let(:p1) { Fabricate(:post, user: user) } let(:topic) { p1.topic } @@ -422,9 +422,9 @@ RSpec.describe TopicsController do end describe 'merging into another message' do - let(:moderator) { Fabricate(:moderator) } - let(:user) { Fabricate(:user) } - let(:trust_level_4) { Fabricate(:trust_level_4) } + fab!(:moderator) { Fabricate(:moderator) } + fab!(:user) { Fabricate(:user) } + fab!(:trust_level_4) { Fabricate(:trust_level_4) } let(:message) { Fabricate(:private_message_topic, user: user) } let!(:p1) { Fabricate(:post, topic: message, user: trust_level_4) } let!(:p2) { Fabricate(:post, topic: message, reply_to_post_number: p1.post_number, user: user) } @@ -506,7 +506,7 @@ RSpec.describe TopicsController do describe 'changing ownership' do let!(:editor) { sign_in(Fabricate(:admin)) } let(:topic) { Fabricate(:topic) } - let(:user_a) { Fabricate(:user) } + fab!(:user_a) { Fabricate(:user) } let(:p1) { Fabricate(:post, topic: topic) } let(:p2) { Fabricate(:post, topic: topic) } @@ -628,7 +628,7 @@ RSpec.describe TopicsController do context 'when logged in' do let(:topic) { Fabricate(:topic) } let(:pm) { Fabricate(:private_message_topic) } - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } before do sign_in(user) end @@ -658,8 +658,8 @@ RSpec.describe TopicsController do end describe 'when logged in' do - let(:user) { Fabricate(:user) } - let(:moderator) { Fabricate(:moderator) } + fab!(:user) { Fabricate(:user) } + fab!(:moderator) { Fabricate(:moderator) } let(:topic) { Fabricate(:topic) } before do sign_in(moderator) @@ -827,8 +827,8 @@ RSpec.describe TopicsController do end describe 'when logged in' do - let(:user) { Fabricate(:user) } - let(:moderator) { Fabricate(:moderator) } + fab!(:user) { Fabricate(:user) } + fab!(:moderator) { Fabricate(:moderator) } let(:topic) { Fabricate(:topic, user: user, deleted_at: Time.now, deleted_by: moderator) } let!(:post) { Fabricate(:post, user: user, topic: topic, post_number: 1, deleted_at: Time.now, deleted_by: moderator) } @@ -864,8 +864,8 @@ RSpec.describe TopicsController do end describe 'when logged in' do - let(:user) { Fabricate(:user) } - let(:moderator) { Fabricate(:moderator) } + fab!(:user) { Fabricate(:user) } + fab!(:moderator) { Fabricate(:moderator) } let(:topic) { Fabricate(:topic, user: user, created_at: 48.hours.ago) } let!(:post) { Fabricate(:post, topic: topic, user: user, post_number: 1) } @@ -1045,12 +1045,12 @@ RSpec.describe TopicsController do end context 'updating to a category with restricted tags' do - let!(:category) { Fabricate(:category) } - let!(:restricted_category) { Fabricate(:category) } - let!(:tag1) { Fabricate(:tag) } - let!(:tag2) { Fabricate(:tag) } + fab!(:category) { Fabricate(:category) } + fab!(:restricted_category) { Fabricate(:category) } + fab!(:tag1) { Fabricate(:tag) } + fab!(:tag2) { Fabricate(:tag) } let!(:tag_group_1) { Fabricate(:tag_group, tag_names: [tag1.name]) } - let!(:tag_group_2) { Fabricate(:tag_group) } + fab!(:tag_group_2) { Fabricate(:tag_group) } before do SiteSetting.tagging_enabled = true @@ -1248,7 +1248,7 @@ RSpec.describe TopicsController do end context 'permission errors' do - let(:allowed_user) { Fabricate(:user) } + fab!(:allowed_user) { Fabricate(:user) } let(:allowed_group) { Fabricate(:group) } let(:secure_category) do c = Fabricate(:category) @@ -1781,7 +1781,7 @@ RSpec.describe TopicsController do describe 'filtering by post number with filters' do describe 'username filters' do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } let(:post) { Fabricate(:post, user: user) } let!(:post2) { Fabricate(:post, topic: topic, user: user) } let!(:post3) { Fabricate(:post, topic: topic) } @@ -2137,7 +2137,7 @@ RSpec.describe TopicsController do end describe 'converting public topic to private message' do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } let(:topic) { Fabricate(:topic, user: user) } let!(:post) { Fabricate(:post, topic: topic) } @@ -2164,7 +2164,7 @@ RSpec.describe TopicsController do end describe 'converting private message to public topic' do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } let(:topic) { Fabricate(:private_message_topic, user: user) } let!(:post) { Fabricate(:post, topic: topic) } @@ -2427,10 +2427,10 @@ RSpec.describe TopicsController do end describe "when PM has reached maximum allowed numbers of recipients" do - let(:user2) { Fabricate(:user) } + fab!(:user2) { Fabricate(:user) } let(:pm) { Fabricate(:private_message_topic, user: user) } - let(:moderator) { Fabricate(:moderator) } + fab!(:moderator) { Fabricate(:moderator) } let(:moderator_pm) { Fabricate(:private_message_topic, user: moderator) } before do diff --git a/spec/requests/uploads_controller_spec.rb b/spec/requests/uploads_controller_spec.rb index d1dd951e5c0..9df65a54579 100644 --- a/spec/requests/uploads_controller_spec.rb +++ b/spec/requests/uploads_controller_spec.rb @@ -198,7 +198,7 @@ describe UploadsController do describe '#show' do let(:site) { "default" } let(:sha) { Digest::SHA1.hexdigest("discourse") } - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } def upload_file(file, folder = "images") fake_logo = Rack::Test::UploadedFile.new(file_from_fixtures(file, folder)) @@ -290,7 +290,7 @@ describe UploadsController do end describe '#metadata' do - let(:upload) { Fabricate(:upload) } + fab!(:upload) { Fabricate(:upload) } describe 'when url is missing' do it 'should return the right response' do diff --git a/spec/requests/user_badges_controller_spec.rb b/spec/requests/user_badges_controller_spec.rb index c4336c8e566..aa03d6f7d8e 100644 --- a/spec/requests/user_badges_controller_spec.rb +++ b/spec/requests/user_badges_controller_spec.rb @@ -3,11 +3,11 @@ require 'rails_helper' describe UserBadgesController do - let(:user) { Fabricate(:user) } - let(:badge) { Fabricate(:badge) } + fab!(:user) { Fabricate(:user) } + fab!(:badge) { Fabricate(:badge) } context 'index' do - let(:badge) { Fabricate(:badge, target_posts: true, show_posts: false) } + fab!(:badge) { Fabricate(:badge, target_posts: true, show_posts: false) } it 'does not leak private info' do p = create_post UserBadge.create!(badge: badge, user: user, post_id: p.id, granted_by_id: -1, granted_at: Time.now) diff --git a/spec/requests/users_controller_spec.rb b/spec/requests/users_controller_spec.rb index ffd6f75941e..30f8b24d995 100644 --- a/spec/requests/users_controller_spec.rb +++ b/spec/requests/users_controller_spec.rb @@ -111,7 +111,7 @@ describe UsersController do end describe '#password_reset' do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } let(:token) { SecureRandom.hex } context "you can view it even if login is required" do @@ -390,7 +390,7 @@ describe UsersController do end describe '#confirm_email_token' do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } it "token doesn't match any records" do email_token = user.email_tokens.create(email: user.email) @@ -408,8 +408,8 @@ describe UsersController do end describe '#admin_login' do - let(:admin) { Fabricate(:admin) } - let(:user) { Fabricate(:user) } + fab!(:admin) { Fabricate(:admin) } + fab!(:user) { Fabricate(:user) } context 'enqueues mail' do it 'enqueues mail with admin email and sso enabled' do @@ -464,8 +464,8 @@ describe UsersController do end describe 'when 2 factor authentication is enabled' do - let(:second_factor) { Fabricate(:user_second_factor_totp, user: admin) } - let(:email_token) { Fabricate(:email_token, user: admin) } + fab!(:second_factor) { Fabricate(:user_second_factor_totp, user: admin) } + fab!(:email_token) { Fabricate(:email_token, user: admin) } it 'does not log in when token required' do second_factor @@ -662,8 +662,8 @@ describe UsersController do end context "with a regular api key" do - let(:user) { Fabricate(:user) } - let(:api_key) { Fabricate(:api_key, user: user) } + fab!(:user) { Fabricate(:user) } + fab!(:api_key) { Fabricate(:api_key, user: user) } it "won't create the user as active with a regular key" do post "/u.json", @@ -675,8 +675,8 @@ describe UsersController do end context "with an admin api key" do - let(:admin) { Fabricate(:admin) } - let(:api_key) { Fabricate(:api_key, user: admin) } + fab!(:admin) { Fabricate(:admin) } + fab!(:api_key) { Fabricate(:api_key, user: admin) } it "creates the user as active with a an admin key" do SiteSetting.send_welcome_message = true @@ -750,8 +750,8 @@ describe UsersController do end context "with a regular api key" do - let(:user) { Fabricate(:user) } - let(:api_key) { Fabricate(:api_key, user: user) } + fab!(:user) { Fabricate(:user) } + fab!(:api_key) { Fabricate(:api_key, user: user) } it "won't create the user as staged with a regular key" do post "/u.json", params: post_user_params.merge(staged: true, api_key: api_key.key) @@ -763,8 +763,8 @@ describe UsersController do end context "with an admin api key" do - let(:user) { Fabricate(:admin) } - let(:api_key) { Fabricate(:api_key, user: user) } + fab!(:user) { Fabricate(:admin) } + fab!(:api_key) { Fabricate(:api_key, user: user) } it "creates the user as staged with a regular key" do post "/u.json", params: post_user_params.merge(staged: true, api_key: api_key.key) @@ -1470,7 +1470,7 @@ describe UsersController do sign_in(user) end - let(:user) { Fabricate(:user, username: 'test.test', name: "Test User") } + fab!(:user) { Fabricate(:user, username: 'test.test', name: "Test User") } it "should be able to update a user" do put "/u/#{user.username}", params: { name: 'test.test' } @@ -1676,8 +1676,8 @@ describe UsersController do end describe '#badge_title' do - let(:user) { Fabricate(:user) } - let(:badge) { Fabricate(:badge) } + fab!(:user) { Fabricate(:user) } + fab!(:badge) { Fabricate(:badge) } let(:user_badge) { BadgeGranter.grant(badge, user) } it "sets the user's title to the badge name if it is titleable" do @@ -1700,7 +1700,7 @@ describe UsersController do end context "with overrided name" do - let(:badge) { Fabricate(:badge, name: 'Demogorgon', allow_title: true) } + fab!(:badge) { Fabricate(:badge, name: 'Demogorgon', allow_title: true) } let(:user_badge) { BadgeGranter.grant(badge, user) } before do @@ -1946,8 +1946,8 @@ describe UsersController do context 'while logged in' do let!(:user) { sign_in(Fabricate(:user)) } - let(:avatar1) { Fabricate(:upload) } - let(:avatar2) { Fabricate(:upload) } + fab!(:avatar1) { Fabricate(:upload) } + fab!(:avatar2) { Fabricate(:upload) } let(:url) { "https://www.discourse.org" } it 'raises an error when url is blank' do @@ -2000,8 +2000,8 @@ describe UsersController do end context 'while logged in' do - let(:another_user) { Fabricate(:user) } - let(:user) { Fabricate(:user) } + fab!(:another_user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } before do sign_in(user) @@ -2038,8 +2038,8 @@ describe UsersController do end context 'while logged in' do - let(:user) { Fabricate(:user) } - let(:another_user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } + fab!(:another_user) { Fabricate(:user) } before do sign_in(user) end @@ -2074,8 +2074,8 @@ describe UsersController do end context 'while logged in' do - let(:user) { Fabricate(:user, trust_level: 2) } - let(:another_user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user, trust_level: 2) } + fab!(:another_user) { Fabricate(:user) } before do sign_in(user) end @@ -2124,7 +2124,7 @@ describe UsersController do end describe "for user with period in username" do - let(:user_with_period) { Fabricate(:user, username: "myname.test") } + fab!(:user_with_period) { Fabricate(:user, username: "myname.test") } it "still works" do sign_in(user_with_period) @@ -2217,10 +2217,10 @@ describe UsersController do end describe '#is_local_username' do - let(:user) { Fabricate(:user) } - let(:group) { Fabricate(:group, name: "Discourse") } - let(:topic) { Fabricate(:topic) } - let(:allowed_user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } + fab!(:group) { Fabricate(:group, name: "Discourse") } + fab!(:topic) { Fabricate(:topic) } + fab!(:allowed_user) { Fabricate(:user) } let(:private_topic) { Fabricate(:private_message_topic, user: allowed_user) } it "finds the user" do @@ -2307,7 +2307,7 @@ describe UsersController do end describe '#topic_tracking_state' do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } context 'anon' do it "raises an error on anon for topic_tracking_state" do @@ -2621,7 +2621,7 @@ describe UsersController do end describe "user profile views" do - let(:other_user) { Fabricate(:user) } + fab!(:other_user) { Fabricate(:user) } it "should track a user profile view for an anon user" do get "/" @@ -2641,7 +2641,7 @@ describe UsersController do sign_in(user) end - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } it 'returns success' do get "/u/#{user.username}.json" @@ -2676,7 +2676,7 @@ describe UsersController do end describe "user profile views" do - let(:other_user) { Fabricate(:user) } + fab!(:other_user) { Fabricate(:user) } it "should track a user profile view for a signed in user" do UserProfileView.expects(:add).with(other_user.user_profile.id, request.remote_ip, user.id) @@ -2711,8 +2711,8 @@ describe UsersController do describe "include_post_count_for" do - let(:admin) { Fabricate(:admin) } - let(:topic) { Fabricate(:topic) } + fab!(:admin) { Fabricate(:admin) } + fab!(:topic) { Fabricate(:topic) } before do Fabricate(:post, user: user, topic: topic) @@ -2820,7 +2820,7 @@ describe UsersController do end describe '#search_users' do - let(:topic) { Fabricate :topic } + fab!(:topic) { Fabricate :topic } let(:user) { Fabricate :user, username: "joecabot", name: "Lawrence Tierney" } let(:post1) { Fabricate(:post, user: user, topic: topic) } @@ -3369,7 +3369,7 @@ describe UsersController do end describe '#revoke_account' do - let(:other_user) { Fabricate(:user) } + fab!(:other_user) { Fabricate(:user) } it 'errors for unauthorised users' do post "/u/#{user.username}/preferences/revoke-account.json", params: { provider_name: 'facebook' diff --git a/spec/requests/users_email_controller_spec.rb b/spec/requests/users_email_controller_spec.rb index 125643a8c10..7987ffd33cb 100644 --- a/spec/requests/users_email_controller_spec.rb +++ b/spec/requests/users_email_controller_spec.rb @@ -13,7 +13,7 @@ describe UsersEmailController do end context 'valid old address token' do - let(:user) { Fabricate(:moderator) } + fab!(:user) { Fabricate(:moderator) } let(:updater) { EmailUpdater.new(user.guardian, user) } before do @@ -36,7 +36,7 @@ describe UsersEmailController do end context 'valid new address token' do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } let(:updater) { EmailUpdater.new(user.guardian, user) } before do @@ -73,7 +73,7 @@ describe UsersEmailController do end context 'second factor required' do - let!(:second_factor) { Fabricate(:user_second_factor_totp, user: user) } + fab!(:second_factor) { Fabricate(:user_second_factor_totp, user: user) } it 'requires a second factor token' do get "/u/authorize-email/#{user.email_tokens.last.token}" @@ -114,7 +114,7 @@ describe UsersEmailController do end describe '#update' do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } let(:new_email) { 'bubblegum@adventuretime.ooo' } it "requires you to be logged in" do @@ -147,7 +147,7 @@ describe UsersEmailController do end context 'when the new email address is taken' do - let!(:other_user) { Fabricate(:coding_horror) } + fab!(:other_user) { Fabricate(:coding_horror) } context 'hide_email_address_taken is disabled' do before do @@ -187,7 +187,7 @@ describe UsersEmailController do end context 'when new email is different case of existing email' do - let!(:other_user) { Fabricate(:user, email: 'case.insensitive@gmail.com') } + fab!(:other_user) { Fabricate(:user, email: 'case.insensitive@gmail.com') } it 'raises an error' do put "/u/#{user.username}/preferences/email.json", params: { diff --git a/spec/serializers/admin_user_list_serializer_spec.rb b/spec/serializers/admin_user_list_serializer_spec.rb index d6c6282e3df..e5c429fc8ae 100644 --- a/spec/serializers/admin_user_list_serializer_spec.rb +++ b/spec/serializers/admin_user_list_serializer_spec.rb @@ -4,8 +4,8 @@ require 'rails_helper' require_dependency 'user' describe AdminUserListSerializer do - let(:user) { Fabricate(:user_second_factor_totp).user } - let(:admin) { Fabricate(:admin) } + fab!(:user) { Fabricate(:user_second_factor_totp).user } + fab!(:admin) { Fabricate(:admin) } let(:guardian) { Guardian.new(admin) } let(:serializer) do @@ -19,9 +19,9 @@ describe AdminUserListSerializer do end context "emails" do - let(:admin) { Fabricate(:user, admin: true, email: "admin@email.com") } - let(:moderator) { Fabricate(:user, moderator: true, email: "moderator@email.com") } - let(:user) { Fabricate(:user, email: "user@email.com") } + fab!(:admin) { Fabricate(:user, admin: true, email: "admin@email.com") } + fab!(:moderator) { Fabricate(:user, moderator: true, email: "moderator@email.com") } + fab!(:user) { Fabricate(:user, email: "user@email.com") } def serialize(user, viewed_by, opts = nil) AdminUserListSerializer.new( diff --git a/spec/serializers/basic_group_serializer_spec.rb b/spec/serializers/basic_group_serializer_spec.rb index a8a09374fac..eafb7e68027 100644 --- a/spec/serializers/basic_group_serializer_spec.rb +++ b/spec/serializers/basic_group_serializer_spec.rb @@ -4,7 +4,7 @@ require 'rails_helper' describe BasicGroupSerializer do let(:guardian) { Guardian.new } - let(:group) { Fabricate(:group) } + fab!(:group) { Fabricate(:group) } subject { described_class.new(group, scope: guardian, root: false) } describe '#display_name' do @@ -17,7 +17,7 @@ describe BasicGroupSerializer do end describe 'normal group' do - let(:group) { Fabricate(:group) } + fab!(:group) { Fabricate(:group) } it 'should not include the display name' do expect(subject.display_name).to eq(nil) @@ -26,7 +26,7 @@ describe BasicGroupSerializer do end describe '#bio_raw' do - let(:group) { Fabricate(:group, bio_raw: 'testing') } + fab!(:group) { Fabricate(:group, bio_raw: 'testing') } subject do described_class.new(group, scope: guardian, root: false, owner_group_ids: [group.id]) @@ -40,7 +40,7 @@ describe BasicGroupSerializer do end describe '#automatic_membership_email_domains' do - let(:group) { Fabricate(:group, automatic_membership_email_domains: 'ilovediscourse.com', automatic_membership_retroactive: true) } + fab!(:group) { Fabricate(:group, automatic_membership_email_domains: 'ilovediscourse.com', automatic_membership_retroactive: true) } let(:admin_guardian) { Guardian.new(Fabricate(:admin)) } it 'should include email domains for admin' do @@ -58,7 +58,7 @@ describe BasicGroupSerializer do end describe '#has_messages' do - let(:group) { Fabricate(:group, has_messages: true) } + fab!(:group) { Fabricate(:group, has_messages: true) } describe 'for a staff user' do let(:guardian) { Guardian.new(Fabricate(:moderator)) } @@ -69,7 +69,7 @@ describe BasicGroupSerializer do end describe 'for a group user' do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } let(:guardian) { Guardian.new(user) } before do diff --git a/spec/serializers/basic_group_user_serializer_spec.rb b/spec/serializers/basic_group_user_serializer_spec.rb index c91dfae0df2..6ba3c283895 100644 --- a/spec/serializers/basic_group_user_serializer_spec.rb +++ b/spec/serializers/basic_group_user_serializer_spec.rb @@ -3,8 +3,8 @@ require 'rails_helper' describe BasicGroupUserSerializer do - let(:group) { Fabricate(:group) } - let(:user) { Fabricate(:user) } + fab!(:group) { Fabricate(:group) } + fab!(:user) { Fabricate(:user) } before do group.add(user) diff --git a/spec/serializers/category_serializer_spec.rb b/spec/serializers/category_serializer_spec.rb index 8a122e2336d..a8f2ce9edf4 100644 --- a/spec/serializers/category_serializer_spec.rb +++ b/spec/serializers/category_serializer_spec.rb @@ -4,8 +4,8 @@ require 'rails_helper' require_dependency 'category' describe CategorySerializer do - let(:group) { Fabricate(:group) } - let(:category) { Fabricate(:category, reviewable_by_group_id: group.id) } + fab!(:group) { Fabricate(:group) } + fab!(:category) { Fabricate(:category, reviewable_by_group_id: group.id) } it "includes the reviewable by group name if enabled" do SiteSetting.enable_category_group_review = true diff --git a/spec/serializers/category_upload_serializer_spec.rb b/spec/serializers/category_upload_serializer_spec.rb index 884664d6beb..a68c6a6e2f1 100644 --- a/spec/serializers/category_upload_serializer_spec.rb +++ b/spec/serializers/category_upload_serializer_spec.rb @@ -4,7 +4,7 @@ require 'rails_helper' describe CategoryUploadSerializer do - let(:upload) { Fabricate(:upload) } + fab!(:upload) { Fabricate(:upload) } let(:subject) { described_class.new(upload, root: false) } it 'should include width and height' do diff --git a/spec/serializers/current_user_serializer_spec.rb b/spec/serializers/current_user_serializer_spec.rb index 32dc2412300..9eb2d34c62c 100644 --- a/spec/serializers/current_user_serializer_spec.rb +++ b/spec/serializers/current_user_serializer_spec.rb @@ -4,7 +4,7 @@ require 'rails_helper' RSpec.describe CurrentUserSerializer do context "when SSO is not enabled" do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } let :serializer do CurrentUserSerializer.new(user, scope: Guardian.new, root: false) end @@ -36,10 +36,10 @@ RSpec.describe CurrentUserSerializer do end context "#top_category_ids" do - let(:user) { Fabricate(:user) } - let(:category1) { Fabricate(:category) } - let(:category2) { Fabricate(:category) } - let(:category3) { Fabricate(:category) } + fab!(:user) { Fabricate(:user) } + fab!(:category1) { Fabricate(:category) } + fab!(:category2) { Fabricate(:category) } + fab!(:category3) { Fabricate(:category) } let :serializer do CurrentUserSerializer.new(user, scope: Guardian.new, root: false) end @@ -69,7 +69,7 @@ RSpec.describe CurrentUserSerializer do end context "#groups" do - let(:member) { Fabricate(:user) } + fab!(:member) { Fabricate(:user) } let :serializer do CurrentUserSerializer.new(member, scope: Guardian.new, root: false) end diff --git a/spec/serializers/group_show_serializer_spec.rb b/spec/serializers/group_show_serializer_spec.rb index fa86277f2e4..98e43873794 100644 --- a/spec/serializers/group_show_serializer_spec.rb +++ b/spec/serializers/group_show_serializer_spec.rb @@ -3,12 +3,12 @@ require 'rails_helper' describe GroupShowSerializer do - let(:user) { Fabricate(:user) } - let(:group) { Fabricate(:group) } + fab!(:user) { Fabricate(:user) } + fab!(:group) { Fabricate(:group) } context 'admin user' do - let(:user) { Fabricate(:admin) } - let(:group) { Fabricate(:group, users: [user]) } + fab!(:user) { Fabricate(:admin) } + fab!(:group) { Fabricate(:group, users: [user]) } it 'should return the right attributes' do json = GroupShowSerializer.new(group, scope: Guardian.new(user)).as_json @@ -32,7 +32,7 @@ describe GroupShowSerializer do end describe '#mentionable' do - let(:group) { Fabricate(:group, mentionable_level: Group::ALIAS_LEVELS[:everyone]) } + fab!(:group) { Fabricate(:group, mentionable_level: Group::ALIAS_LEVELS[:everyone]) } it 'should return the right value' do json = GroupShowSerializer.new(group, scope: Guardian.new).as_json diff --git a/spec/serializers/post_revision_serializer_spec.rb b/spec/serializers/post_revision_serializer_spec.rb index f0b5330241e..64013180fca 100644 --- a/spec/serializers/post_revision_serializer_spec.rb +++ b/spec/serializers/post_revision_serializer_spec.rb @@ -3,13 +3,13 @@ require 'rails_helper' describe PostRevisionSerializer do - let(:post) { Fabricate(:post, version: 2) } + fab!(:post) { Fabricate(:post, version: 2) } context 'hidden tags' do - let(:public_tag) { Fabricate(:tag, name: 'public') } - let(:public_tag2) { Fabricate(:tag, name: 'visible') } - let(:hidden_tag) { Fabricate(:tag, name: 'hidden') } - let(:hidden_tag2) { Fabricate(:tag, name: 'secret') } + fab!(:public_tag) { Fabricate(:tag, name: 'public') } + fab!(:public_tag2) { Fabricate(:tag, name: 'visible') } + fab!(:hidden_tag) { Fabricate(:tag, name: 'hidden') } + fab!(:hidden_tag2) { Fabricate(:tag, name: 'secret') } let(:staff_tag_group) { Fabricate(:tag_group, permissions: { "staff" => 1 }, tag_names: [hidden_tag.name, hidden_tag2.name]) } diff --git a/spec/serializers/post_serializer_spec.rb b/spec/serializers/post_serializer_spec.rb index 86176970f16..d193718203f 100644 --- a/spec/serializers/post_serializer_spec.rb +++ b/spec/serializers/post_serializer_spec.rb @@ -6,9 +6,9 @@ require_dependency 'post_action' describe PostSerializer do context "a post with lots of actions" do - let(:post) { Fabricate(:post) } - let(:actor) { Fabricate(:user) } - let(:admin) { Fabricate(:admin) } + fab!(:post) { Fabricate(:post) } + fab!(:actor) { Fabricate(:user) } + fab!(:admin) { Fabricate(:admin) } let(:acted_ids) { PostActionType.public_types.values .concat([:notify_user, :spam].map { |k| PostActionType.types[k] }) diff --git a/spec/serializers/reviewable_flagged_post_serializer_spec.rb b/spec/serializers/reviewable_flagged_post_serializer_spec.rb index 63b40b48b43..23044236713 100644 --- a/spec/serializers/reviewable_flagged_post_serializer_spec.rb +++ b/spec/serializers/reviewable_flagged_post_serializer_spec.rb @@ -4,7 +4,7 @@ require 'rails_helper' describe ReviewableFlaggedPostSerializer do - let(:admin) { Fabricate(:admin) } + fab!(:admin) { Fabricate(:admin) } it "includes the user fields for review" do p0 = Fabricate(:post) diff --git a/spec/serializers/reviewable_queued_post_serializer_spec.rb b/spec/serializers/reviewable_queued_post_serializer_spec.rb index b8c545cec1c..83bcaac4dfc 100644 --- a/spec/serializers/reviewable_queued_post_serializer_spec.rb +++ b/spec/serializers/reviewable_queued_post_serializer_spec.rb @@ -3,10 +3,10 @@ require 'rails_helper' describe ReviewableQueuedPostSerializer do - let(:admin) { Fabricate(:admin) } + fab!(:admin) { Fabricate(:admin) } context "new topic" do - let(:reviewable) { Fabricate(:reviewable_queued_post_topic) } + fab!(:reviewable) { Fabricate(:reviewable_queued_post_topic) } it "allows us to edit category / title" do json = ReviewableQueuedPostSerializer.new(reviewable, scope: Guardian.new(admin), root: nil).as_json @@ -40,7 +40,7 @@ describe ReviewableQueuedPostSerializer do end context "reply to an existing topic" do - let(:reviewable) { Fabricate(:reviewable_queued_post) } + fab!(:reviewable) { Fabricate(:reviewable_queued_post) } it "includes correct user fields" do json = ReviewableQueuedPostSerializer.new(reviewable, scope: Guardian.new(admin), root: nil).as_json diff --git a/spec/serializers/reviewable_serializer_spec.rb b/spec/serializers/reviewable_serializer_spec.rb index 5906467dfbe..6ce23e0c14b 100644 --- a/spec/serializers/reviewable_serializer_spec.rb +++ b/spec/serializers/reviewable_serializer_spec.rb @@ -4,8 +4,8 @@ require 'rails_helper' describe ReviewableSerializer do - let(:reviewable) { Fabricate(:reviewable_queued_post) } - let(:admin) { Fabricate(:admin) } + fab!(:reviewable) { Fabricate(:reviewable_queued_post) } + fab!(:admin) { Fabricate(:admin) } it "serializes all the fields" do json = described_class.new(reviewable, scope: Guardian.new(admin), root: nil).as_json diff --git a/spec/serializers/single_sign_on_record_serializer_spec.rb b/spec/serializers/single_sign_on_record_serializer_spec.rb index 18602a582b5..6af81b0f4f7 100644 --- a/spec/serializers/single_sign_on_record_serializer_spec.rb +++ b/spec/serializers/single_sign_on_record_serializer_spec.rb @@ -3,13 +3,13 @@ require 'rails_helper' RSpec.describe SingleSignOnRecordSerializer do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } let :sso do SingleSignOnRecord.create!(user_id: user.id, external_id: '12345', external_email: user.email, last_payload: '') end context "admin" do - let(:admin) { Fabricate(:admin) } + fab!(:admin) { Fabricate(:admin) } let :serializer do SingleSignOnRecordSerializer.new(sso, scope: Guardian.new(admin), root: false) end @@ -23,7 +23,7 @@ RSpec.describe SingleSignOnRecordSerializer do end context "moderator" do - let(:moderator) { Fabricate(:moderator) } + fab!(:moderator) { Fabricate(:moderator) } let :serializer do SingleSignOnRecordSerializer.new(sso, scope: Guardian.new(moderator), root: false) end diff --git a/spec/serializers/topic_list_serializer_spec.rb b/spec/serializers/topic_list_serializer_spec.rb index 0fc30d4f33d..2f36983ed2a 100644 --- a/spec/serializers/topic_list_serializer_spec.rb +++ b/spec/serializers/topic_list_serializer_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' RSpec.describe TopicListSerializer do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } let(:topic) do Fabricate(:topic).tap do |t| diff --git a/spec/serializers/topic_view_posts_serializer_spec.rb b/spec/serializers/topic_view_posts_serializer_spec.rb index 4002ede9da9..2c14b08ef7b 100644 --- a/spec/serializers/topic_view_posts_serializer_spec.rb +++ b/spec/serializers/topic_view_posts_serializer_spec.rb @@ -3,8 +3,8 @@ require 'rails_helper' RSpec.describe TopicViewPostsSerializer do - let(:user) { Fabricate(:user) } - let(:post) { Fabricate(:post) } + fab!(:user) { Fabricate(:user) } + fab!(:post) { Fabricate(:post) } let(:topic) { post.topic } let(:topic_view) { TopicView.new(topic, user, post_ids: [post.id]) } diff --git a/spec/serializers/topic_view_serializer_spec.rb b/spec/serializers/topic_view_serializer_spec.rb index 97def1a62f8..13ec3064a7b 100644 --- a/spec/serializers/topic_view_serializer_spec.rb +++ b/spec/serializers/topic_view_serializer_spec.rb @@ -14,9 +14,9 @@ describe TopicViewSerializer do RandomTopicSelector.clear_cache! end - let(:topic) { Fabricate(:topic) } - let(:user) { Fabricate(:user) } - let(:admin) { Fabricate(:admin) } + fab!(:topic) { Fabricate(:topic) } + fab!(:user) { Fabricate(:user) } + fab!(:admin) { Fabricate(:admin) } describe '#featured_link and #featured_link_root_domain' do let(:featured_link) { 'http://meta.discourse.org' } diff --git a/spec/serializers/upload_serializer_spec.rb b/spec/serializers/upload_serializer_spec.rb index 4bbe3c4fe74..cc9aed697ac 100644 --- a/spec/serializers/upload_serializer_spec.rb +++ b/spec/serializers/upload_serializer_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' RSpec.describe UploadSerializer do - let(:upload) { Fabricate(:upload) } + fab!(:upload) { Fabricate(:upload) } let(:subject) { UploadSerializer.new(upload, root: false) } it 'should render without errors' do diff --git a/spec/serializers/user_auth_token_serializer_spec.rb b/spec/serializers/user_auth_token_serializer_spec.rb index 75f1767d5ca..a2e1aecc0f3 100644 --- a/spec/serializers/user_auth_token_serializer_spec.rb +++ b/spec/serializers/user_auth_token_serializer_spec.rb @@ -4,7 +4,7 @@ require 'rails_helper' describe UserAuthTokenSerializer do - let(:user) { Fabricate(:moderator) } + fab!(:user) { Fabricate(:moderator) } let(:token) { UserAuthToken.generate!(user_id: user.id, client_ip: '2a02:ea00::', staff: true) } before(:each) do diff --git a/spec/serializers/user_serializer_spec.rb b/spec/serializers/user_serializer_spec.rb index c409cba1460..8fed2367b80 100644 --- a/spec/serializers/user_serializer_spec.rb +++ b/spec/serializers/user_serializer_spec.rb @@ -168,7 +168,7 @@ describe UserSerializer do end context "with custom_fields" do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } let(:json) { UserSerializer.new(user, scope: Guardian.new, root: false).as_json } before do @@ -206,7 +206,7 @@ describe UserSerializer do end context "with user fields" do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } let! :fields do [ @@ -231,7 +231,7 @@ describe UserSerializer do end context "with user_api_keys" do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } it "sorts keys by last used time" do freeze_time diff --git a/spec/serializers/web_hook_post_serializer_spec.rb b/spec/serializers/web_hook_post_serializer_spec.rb index 398c8f2fcb9..7d0cae98451 100644 --- a/spec/serializers/web_hook_post_serializer_spec.rb +++ b/spec/serializers/web_hook_post_serializer_spec.rb @@ -3,8 +3,8 @@ require 'rails_helper' RSpec.describe WebHookPostSerializer do - let(:admin) { Fabricate(:admin) } - let(:post) { Fabricate(:post) } + fab!(:admin) { Fabricate(:admin) } + fab!(:post) { Fabricate(:post) } def serialized_for_user(u) WebHookPostSerializer.new(post, scope: Guardian.new(u), root: false).as_json diff --git a/spec/serializers/web_hook_topic_view_serializer_spec.rb b/spec/serializers/web_hook_topic_view_serializer_spec.rb index d599757d4d6..f0499f985e0 100644 --- a/spec/serializers/web_hook_topic_view_serializer_spec.rb +++ b/spec/serializers/web_hook_topic_view_serializer_spec.rb @@ -3,8 +3,8 @@ require 'rails_helper' RSpec.describe WebHookTopicViewSerializer do - let(:admin) { Fabricate(:admin) } - let(:topic) { Fabricate(:topic) } + fab!(:admin) { Fabricate(:admin) } + fab!(:topic) { Fabricate(:topic) } let(:serializer) do WebHookTopicViewSerializer.new(TopicView.new(topic), diff --git a/spec/serializers/web_hook_user_serializer_spec.rb b/spec/serializers/web_hook_user_serializer_spec.rb index 6d612b1df0e..82ef437f6c5 100644 --- a/spec/serializers/web_hook_user_serializer_spec.rb +++ b/spec/serializers/web_hook_user_serializer_spec.rb @@ -9,7 +9,7 @@ RSpec.describe WebHookUserSerializer do user end - let(:admin) { Fabricate(:admin) } + fab!(:admin) { Fabricate(:admin) } let :serializer do WebHookUserSerializer.new(user, scope: Guardian.new(admin), root: false) diff --git a/spec/services/anonymous_shadow_creator_spec.rb b/spec/services/anonymous_shadow_creator_spec.rb index f390b60c685..57e4d52d109 100644 --- a/spec/services/anonymous_shadow_creator_spec.rb +++ b/spec/services/anonymous_shadow_creator_spec.rb @@ -12,7 +12,7 @@ describe AnonymousShadowCreator do before { SiteSetting.allow_anonymous_posting = true } - let(:user) { Fabricate(:user, trust_level: 3) } + fab!(:user) { Fabricate(:user, trust_level: 3) } it "returns no shadow if trust level is not met" do expect(AnonymousShadowCreator.get(Fabricate.build(:user, trust_level: 0))).to eq(nil) diff --git a/spec/services/badge_granter_spec.rb b/spec/services/badge_granter_spec.rb index e3aad4f1fdb..5063cba02bf 100644 --- a/spec/services/badge_granter_spec.rb +++ b/spec/services/badge_granter_spec.rb @@ -4,8 +4,8 @@ require 'rails_helper' describe BadgeGranter do - let(:badge) { Fabricate(:badge) } - let(:user) { Fabricate(:user) } + fab!(:badge) { Fabricate(:badge) } + fab!(:user) { Fabricate(:user) } describe 'revoke_titles' do it 'can correctly revoke titles' do @@ -182,7 +182,7 @@ describe BadgeGranter do describe 'revoke' do - let(:admin) { Fabricate(:admin) } + fab!(:admin) { Fabricate(:admin) } let!(:user_badge) { BadgeGranter.grant(badge, user) } it 'revokes the badge and does necessary cleanup' do @@ -199,8 +199,8 @@ describe BadgeGranter do end context "update_badges" do - let(:user) { Fabricate(:user) } - let(:liker) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } + fab!(:liker) { Fabricate(:user) } before do BadgeGranter.clear_queue! diff --git a/spec/services/destroy_task_spec.rb b/spec/services/destroy_task_spec.rb index 1114f7a984e..e33276710b1 100644 --- a/spec/services/destroy_task_spec.rb +++ b/spec/services/destroy_task_spec.rb @@ -5,14 +5,14 @@ require 'rails_helper' describe DestroyTask do describe 'destroy topics' do - let!(:c) { Fabricate(:category) } - let!(:t) { Fabricate(:topic, category: c) } + fab!(:c) { Fabricate(:category) } + fab!(:t) { Fabricate(:topic, category: c) } let!(:p) { Fabricate(:post, topic: t) } - let!(:c2) { Fabricate(:category) } - let!(:t2) { Fabricate(:topic, category: c2) } + fab!(:c2) { Fabricate(:category) } + fab!(:t2) { Fabricate(:topic, category: c2) } let!(:p2) { Fabricate(:post, topic: t2) } - let!(:sc) { Fabricate(:category, parent_category: c) } - let!(:t3) { Fabricate(:topic, category: sc) } + fab!(:sc) { Fabricate(:category, parent_category: c) } + fab!(:t3) { Fabricate(:topic, category: sc) } let!(:p3) { Fabricate(:post, topic: t3) } it 'destroys all topics in a category' do diff --git a/spec/services/flag_sockpuppets_spec.rb b/spec/services/flag_sockpuppets_spec.rb index 0c44b6ea92d..985d8fc5b98 100644 --- a/spec/services/flag_sockpuppets_spec.rb +++ b/spec/services/flag_sockpuppets_spec.rb @@ -4,8 +4,8 @@ require 'rails_helper' describe SpamRule::FlagSockpuppets do - let(:user1) { Fabricate(:user, ip_address: '182.189.119.174') } - let(:post1) { Fabricate(:post, user: user1, topic: Fabricate(:topic, user: user1)) } + fab!(:user1) { Fabricate(:user, ip_address: '182.189.119.174') } + fab!(:post1) { Fabricate(:post, user: user1, topic: Fabricate(:topic, user: user1)) } describe 'perform' do let(:rule) { described_class.new(post1) } @@ -113,7 +113,7 @@ describe SpamRule::FlagSockpuppets do end describe 'flag_sockpuppet_users' do - let(:post2) { Fabricate(:post, user: Fabricate(:user, ip_address: user1.ip_address), topic: post1.topic) } + fab!(:post2) { Fabricate(:post, user: Fabricate(:user, ip_address: user1.ip_address), topic: post1.topic) } let(:system) { Discourse.system_user } let(:spam) { PostActionType.types[:spam] } diff --git a/spec/services/group_action_logger_spec.rb b/spec/services/group_action_logger_spec.rb index 5daf9f487e7..865138e87ff 100644 --- a/spec/services/group_action_logger_spec.rb +++ b/spec/services/group_action_logger_spec.rb @@ -3,9 +3,9 @@ require 'rails_helper' RSpec.describe GroupActionLogger do - let(:group_owner) { Fabricate(:user) } - let(:group) { Fabricate(:group) } - let(:user) { Fabricate(:user) } + fab!(:group_owner) { Fabricate(:user) } + fab!(:group) { Fabricate(:group) } + fab!(:user) { Fabricate(:user) } subject { described_class.new(group_owner, group) } diff --git a/spec/services/group_mentions_updater_spec.rb b/spec/services/group_mentions_updater_spec.rb index b591158ab58..9d642c75821 100644 --- a/spec/services/group_mentions_updater_spec.rb +++ b/spec/services/group_mentions_updater_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' RSpec.describe GroupMentionsUpdater do - let(:post) { Fabricate(:post) } + fab!(:post) { Fabricate(:post) } before do Jobs.run_immediately! diff --git a/spec/services/notification_emailer_spec.rb b/spec/services/notification_emailer_spec.rb index 1c34978072e..e28e17201d9 100644 --- a/spec/services/notification_emailer_spec.rb +++ b/spec/services/notification_emailer_spec.rb @@ -8,8 +8,8 @@ describe NotificationEmailer do NotificationEmailer.enable end - let(:topic) { Fabricate(:topic) } - let(:post) { Fabricate(:post, topic: topic) } + fab!(:topic) { Fabricate(:topic) } + fab!(:post) { Fabricate(:post, topic: topic) } # something is off with fabricator def create_notification(type, user = nil) diff --git a/spec/services/post_action_notifier_spec.rb b/spec/services/post_action_notifier_spec.rb index 89a1229e5d5..845ab88313e 100644 --- a/spec/services/post_action_notifier_spec.rb +++ b/spec/services/post_action_notifier_spec.rb @@ -8,8 +8,8 @@ describe PostActionNotifier do PostActionNotifier.enable end - let!(:evil_trout) { Fabricate(:evil_trout) } - let(:post) { Fabricate(:post) } + fab!(:evil_trout) { Fabricate(:evil_trout) } + fab!(:post) { Fabricate(:post) } context 'when editing a post' do it 'notifies a user of the revision' do @@ -45,8 +45,8 @@ describe PostActionNotifier do end context 'private message' do - let(:user) { Fabricate(:user) } - let(:mention_post) { Fabricate(:post, user: user, raw: 'Hello @eviltrout') } + fab!(:user) { Fabricate(:user) } + fab!(:mention_post) { Fabricate(:post, user: user, raw: 'Hello @eviltrout') } let(:topic) do topic = mention_post.topic topic.update_columns archetype: Archetype.private_message, category_id: nil @@ -71,8 +71,8 @@ describe PostActionNotifier do end context 'moderator action post' do - let(:user) { Fabricate(:user) } - let(:first_post) { Fabricate(:post, user: user, raw: 'A useless post for you.') } + fab!(:user) { Fabricate(:user) } + fab!(:first_post) { Fabricate(:post, user: user, raw: 'A useless post for you.') } let(:topic) { first_post.topic } it 'should not notify anyone' do diff --git a/spec/services/post_alerter_spec.rb b/spec/services/post_alerter_spec.rb index e8724ace37e..4579d2f4d47 100644 --- a/spec/services/post_alerter_spec.rb +++ b/spec/services/post_alerter_spec.rb @@ -27,8 +27,8 @@ RSpec::Matchers.define_negated_matcher :not_add_notification, :add_notification describe PostAlerter do - let!(:evil_trout) { Fabricate(:evil_trout) } - let(:user) { Fabricate(:user) } + fab!(:evil_trout) { Fabricate(:evil_trout) } + fab!(:user) { Fabricate(:user) } def create_post_with_alerts(args = {}) post = Fabricate(:post, args) @@ -259,7 +259,7 @@ describe PostAlerter do context '@group mentions' do - let(:group) { Fabricate(:group, name: 'group', mentionable_level: Group::ALIAS_LEVELS[:everyone]) } + fab!(:group) { Fabricate(:group, name: 'group', mentionable_level: Group::ALIAS_LEVELS[:everyone]) } let(:post) { create_post_with_alerts(raw: "Hello @group how are you?") } before { group.add(evil_trout) } @@ -348,12 +348,12 @@ describe PostAlerter do }.not_to change(evil_trout.notifications, :count) end - let(:alice) { Fabricate(:user, username: 'alice') } - let(:bob) { Fabricate(:user, username: 'bob') } - let(:carol) { Fabricate(:admin, username: 'carol') } - let(:dave) { Fabricate(:user, username: 'dave') } - let(:eve) { Fabricate(:user, username: 'eve') } - let(:group) { Fabricate(:group, name: 'group', mentionable_level: Group::ALIAS_LEVELS[:everyone]) } + fab!(:alice) { Fabricate(:user, username: 'alice') } + fab!(:bob) { Fabricate(:user, username: 'bob') } + fab!(:carol) { Fabricate(:admin, username: 'carol') } + fab!(:dave) { Fabricate(:user, username: 'dave') } + fab!(:eve) { Fabricate(:user, username: 'eve') } + fab!(:group) { Fabricate(:group, name: 'group', mentionable_level: Group::ALIAS_LEVELS[:everyone]) } before do group.bulk_add([alice.id, eve.id]) @@ -369,7 +369,7 @@ describe PostAlerter do end context "topic" do - let(:topic) { Fabricate(:topic, user: alice) } + fab!(:topic) { Fabricate(:topic, user: alice) } [:watching, :tracking, :regular].each do |notification_level| context "when notification level is '#{notification_level}'" do @@ -397,7 +397,7 @@ describe PostAlerter do end context "message to users" do - let(:pm_topic) do + fab!(:pm_topic) do Fabricate(:private_message_topic, user: alice, topic_allowed_users: [ @@ -469,8 +469,8 @@ describe PostAlerter do context "message to group" do - let(:some_group) { Fabricate(:group, name: 'some_group', mentionable_level: Group::ALIAS_LEVELS[:everyone]) } - let(:pm_topic) do + fab!(:some_group) { Fabricate(:group, name: 'some_group', mentionable_level: Group::ALIAS_LEVELS[:everyone]) } + fab!(:pm_topic) do Fabricate(:private_message_topic, user: alice, topic_allowed_groups: [ @@ -542,8 +542,8 @@ describe PostAlerter do end describe ".create_notification" do - let(:topic) { Fabricate(:private_message_topic, user: user, created_at: 1.hour.ago) } - let(:post) { Fabricate(:post, topic: topic, created_at: 1.hour.ago) } + fab!(:topic) { Fabricate(:private_message_topic, user: user, created_at: 1.hour.ago) } + fab!(:post) { Fabricate(:post, topic: topic, created_at: 1.hour.ago) } it "creates a notification for PMs" do post.revise(user, { raw: 'This is the revised post' }, revised_at: Time.zone.now) @@ -697,12 +697,12 @@ describe PostAlerter do end describe "watching_first_post" do - let(:group) { Fabricate(:group) } - let(:user) { Fabricate(:user) } - let(:category) { Fabricate(:category) } - let(:tag) { Fabricate(:tag) } - let(:topic) { Fabricate(:topic, category: category, tags: [tag]) } - let(:post) { Fabricate(:post, topic: topic) } + fab!(:group) { Fabricate(:group) } + fab!(:user) { Fabricate(:user) } + fab!(:category) { Fabricate(:category) } + fab!(:tag) { Fabricate(:tag) } + fab!(:topic) { Fabricate(:topic, category: category, tags: [tag]) } + fab!(:post) { Fabricate(:post, topic: topic) } it "doesn't notify people who aren't watching" do PostAlerter.post_created(post) @@ -941,10 +941,10 @@ describe PostAlerter do end context "on change" do - let(:user) { Fabricate(:user) } - let(:other_tag) { Fabricate(:tag) } - let(:watched_tag) { Fabricate(:tag) } - let(:post) { Fabricate(:post) } + fab!(:user) { Fabricate(:user) } + fab!(:other_tag) { Fabricate(:tag) } + fab!(:watched_tag) { Fabricate(:tag) } + fab!(:post) { Fabricate(:post) } before do SiteSetting.tagging_enabled = true @@ -974,9 +974,9 @@ describe PostAlerter do end describe '#extract_linked_users' do - let(:topic) { Fabricate(:topic) } - let(:post) { Fabricate(:post, topic: topic) } - let(:post2) { Fabricate(:post) } + fab!(:topic) { Fabricate(:topic) } + fab!(:post) { Fabricate(:post, topic: topic) } + fab!(:post2) { Fabricate(:post) } describe 'when linked post has been deleted' do let(:topic_link) do diff --git a/spec/services/post_owner_changer_spec.rb b/spec/services/post_owner_changer_spec.rb index 2c8b124a1c7..b32a0ed0b06 100644 --- a/spec/services/post_owner_changer_spec.rb +++ b/spec/services/post_owner_changer_spec.rb @@ -4,8 +4,8 @@ require "rails_helper" describe PostOwnerChanger do describe "change_owner!" do - let!(:editor) { Fabricate(:admin) } - let(:user_a) { Fabricate(:user) } + fab!(:editor) { Fabricate(:admin) } + fab!(:user_a) { Fabricate(:user) } let(:p1) { create_post(post_number: 1) } let(:topic) { p1.topic } let(:p2) { create_post(topic: topic, post_number: 2) } @@ -190,7 +190,7 @@ describe PostOwnerChanger do end context 'private message topic' do - # let(:topic) { Fabricate(:private_message_topic) } + # fab!(:topic) { Fabricate(:private_message_topic) } let(:pm) do create_post( archetype: 'private_message', diff --git a/spec/services/staff_action_logger_spec.rb b/spec/services/staff_action_logger_spec.rb index 68c5d52a8a8..beb46d8b1bc 100644 --- a/spec/services/staff_action_logger_spec.rb +++ b/spec/services/staff_action_logger_spec.rb @@ -4,7 +4,7 @@ require 'rails_helper' describe StaffActionLogger do - let(:admin) { Fabricate(:admin) } + fab!(:admin) { Fabricate(:admin) } let(:logger) { described_class.new(admin) } describe 'new' do @@ -18,7 +18,7 @@ describe StaffActionLogger do end describe 'log_user_deletion' do - let(:deleted_user) { Fabricate(:user) } + fab!(:deleted_user) { Fabricate(:user) } subject(:log_user_deletion) { described_class.new(admin).log_user_deletion(deleted_user) } @@ -50,7 +50,7 @@ describe StaffActionLogger do end describe 'log_post_deletion' do - let(:deleted_post) { Fabricate(:post) } + fab!(:deleted_post) { Fabricate(:post) } subject(:log_post_deletion) { described_class.new(admin).log_post_deletion(deleted_post) } @@ -75,7 +75,7 @@ describe StaffActionLogger do end describe 'log_topic_delete_recover' do - let(:topic) { Fabricate(:topic) } + fab!(:topic) { Fabricate(:topic) } context "when deleting topic" do subject(:log_topic_delete_recover) { described_class.new(admin).log_topic_delete_recover(topic) } @@ -111,7 +111,7 @@ describe StaffActionLogger do end describe 'log_trust_level_change' do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } let(:old_trust_level) { TrustLevel[0] } let(:new_trust_level) { TrustLevel[1] } @@ -155,7 +155,7 @@ describe StaffActionLogger do expect { logger.log_theme_change(nil, nil) }.to raise_error(Discourse::InvalidParameters) end - let :theme do + let! :theme do Fabricate(:theme) end @@ -213,7 +213,7 @@ describe StaffActionLogger do end describe "log_user_suspend" do - let(:user) { Fabricate(:user, suspended_at: 10.minutes.ago, suspended_till: 1.day.from_now) } + fab!(:user) { Fabricate(:user, suspended_at: 10.minutes.ago, suspended_till: 1.day.from_now) } it "raises an error when arguments are missing" do expect { logger.log_user_suspend(nil, nil) }.to raise_error(Discourse::InvalidParameters) @@ -234,7 +234,7 @@ describe StaffActionLogger do end describe "log_user_unsuspend" do - let(:user) { Fabricate(:user, suspended_at: 1.day.ago, suspended_till: 7.days.from_now) } + fab!(:user) { Fabricate(:user, suspended_at: 1.day.ago, suspended_till: 7.days.from_now) } it "raises an error when argument is missing" do expect { logger.log_user_unsuspend(nil) }.to raise_error(Discourse::InvalidParameters) @@ -265,8 +265,8 @@ describe StaffActionLogger do end describe "log_badge_revoke" do - let(:user) { Fabricate(:user) } - let(:badge) { Fabricate(:badge) } + fab!(:user) { Fabricate(:user) } + fab!(:badge) { Fabricate(:badge) } let(:user_badge) { BadgeGranter.grant(badge, user) } it "raises an error when argument is missing" do @@ -357,8 +357,8 @@ describe StaffActionLogger do end describe 'log_category_deletion' do - let(:parent_category) { Fabricate(:category) } - let(:category) { Fabricate(:category, parent_category: parent_category) } + fab!(:parent_category) { Fabricate(:category) } + fab!(:category) { Fabricate(:category, parent_category: parent_category) } it "raises an error when category is missing" do expect { logger.log_category_deletion(nil) }.to raise_error(Discourse::InvalidParameters) @@ -379,7 +379,7 @@ describe StaffActionLogger do end describe 'log_category_creation' do - let(:category) { Fabricate(:category) } + fab!(:category) { Fabricate(:category) } it "raises an error when category is missing" do expect { logger.log_category_deletion(nil) }.to raise_error(Discourse::InvalidParameters) @@ -398,7 +398,7 @@ describe StaffActionLogger do end describe 'log_lock_trust_level' do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } it "raises an error when argument is missing" do expect { logger.log_lock_trust_level(nil) }.to raise_error(Discourse::InvalidParameters) @@ -418,7 +418,7 @@ describe StaffActionLogger do end describe 'log_user_activate' do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } it "raises an error when argument is missing" do expect { logger.log_user_activate(nil, nil) }.to raise_error(Discourse::InvalidParameters) @@ -456,7 +456,7 @@ describe StaffActionLogger do end describe 'log_check_personal_message' do - let(:personal_message) { Fabricate(:private_message_topic) } + fab!(:personal_message) { Fabricate(:private_message_topic) } subject(:log_check_personal_message) { described_class.new(admin).log_check_personal_message(personal_message) } @@ -474,7 +474,7 @@ describe StaffActionLogger do end describe 'log_post_approved' do - let(:approved_post) { Fabricate(:post) } + fab!(:approved_post) { Fabricate(:post) } subject(:log_post_approved) { described_class.new(admin).log_post_approved(approved_post) } @@ -492,7 +492,7 @@ describe StaffActionLogger do end describe 'log_post_rejected' do - let(:reviewable) { Fabricate(:reviewable_queued_post) } + fab!(:reviewable) { Fabricate(:reviewable_queued_post) } subject(:log_post_rejected) { described_class.new(admin).log_post_rejected(reviewable, DateTime.now) } diff --git a/spec/services/topic_status_updater_spec.rb b/spec/services/topic_status_updater_spec.rb index bb11cfbc248..c0a6843e2e8 100644 --- a/spec/services/topic_status_updater_spec.rb +++ b/spec/services/topic_status_updater_spec.rb @@ -8,8 +8,8 @@ require_dependency 'post_destroyer' describe TopicStatusUpdater do - let(:user) { Fabricate(:user) } - let(:admin) { Fabricate(:admin) } + fab!(:user) { Fabricate(:user) } + fab!(:admin) { Fabricate(:admin) } it "avoids notifying on automatically closed topics" do # TODO: TopicStatusUpdater should suppress message bus updates from the users it "pretends to read" diff --git a/spec/services/user_authenticator_spec.rb b/spec/services/user_authenticator_spec.rb index 3e3bcd9f0c3..b54f282f153 100644 --- a/spec/services/user_authenticator_spec.rb +++ b/spec/services/user_authenticator_spec.rb @@ -21,7 +21,7 @@ end describe UserAuthenticator do context "#finish" do - let(:group) { Fabricate(:group, automatic_membership_email_domains: "discourse.org") } + fab!(:group) { Fabricate(:group, automatic_membership_email_domains: "discourse.org") } before do SiteSetting.enable_github_logins = true diff --git a/spec/services/user_destroyer_spec.rb b/spec/services/user_destroyer_spec.rb index ef55d81d2a8..af7596a2ec1 100644 --- a/spec/services/user_destroyer_spec.rb +++ b/spec/services/user_destroyer_spec.rb @@ -5,8 +5,8 @@ require_dependency 'user_destroyer' describe UserDestroyer do - let(:user) { Fabricate(:user) } - let(:admin) { Fabricate(:admin) } + fab!(:user) { Fabricate(:user) } + fab!(:admin) { Fabricate(:admin) } describe 'new' do it 'raises an error when user is nil' do diff --git a/spec/services/user_merger_spec.rb b/spec/services/user_merger_spec.rb index b6a3616e566..fcce2e72510 100644 --- a/spec/services/user_merger_spec.rb +++ b/spec/services/user_merger_spec.rb @@ -3,9 +3,9 @@ require 'rails_helper' describe UserMerger do - let!(:target_user) { Fabricate(:user, username: 'alice', email: 'alice@example.com') } - let!(:source_user) { Fabricate(:user, username: 'alice1', email: 'alice@work.com') } - let(:walter) { Fabricate(:walter_white) } + fab!(:target_user) { Fabricate(:user, username: 'alice', email: 'alice@example.com') } + fab!(:source_user) { Fabricate(:user, username: 'alice1', email: 'alice@work.com') } + fab!(:walter) { Fabricate(:walter_white) } def merge_users!(source = nil, target = nil) source ||= source_user @@ -677,8 +677,8 @@ describe UserMerger do # action_type and user_id are not nullable # target_topic_id and acting_user_id are nullable, but always have a value - let(:post1) { Fabricate(:post) } - let(:post2) { Fabricate(:post) } + fab!(:post1) { Fabricate(:post) } + fab!(:post2) { Fabricate(:post) } def log_like_action(acting_user, user, post) UserAction.log_action!(action_type: UserAction::LIKE, diff --git a/spec/services/user_silencer_spec.rb b/spec/services/user_silencer_spec.rb index 2350443079f..66bb96a4c7b 100644 --- a/spec/services/user_silencer_spec.rb +++ b/spec/services/user_silencer_spec.rb @@ -9,7 +9,7 @@ describe UserSilencer do end describe 'silence' do - let(:user) { Fabricate(:user) } + fab!(:user) { Fabricate(:user) } let(:silencer) { UserSilencer.new(user) } subject(:silence_user) { silencer.silence } @@ -100,8 +100,8 @@ describe UserSilencer do end describe 'hide_posts' do - let(:user) { Fabricate(:user, trust_level: 0) } - let!(:post) { Fabricate(:post, user: user) } + fab!(:user) { Fabricate(:user, trust_level: 0) } + fab!(:post) { Fabricate(:post, user: user) } subject { UserSilencer.new(user) } it "hides all the user's posts" do diff --git a/spec/services/user_updater_spec.rb b/spec/services/user_updater_spec.rb index 7826d2a5a58..8e2515498ff 100644 --- a/spec/services/user_updater_spec.rb +++ b/spec/services/user_updater_spec.rb @@ -89,9 +89,9 @@ describe UserUpdater do end describe '#update' do - let(:category) { Fabricate(:category) } - let(:tag) { Fabricate(:tag) } - let(:tag2) { Fabricate(:tag) } + fab!(:category) { Fabricate(:category) } + fab!(:tag) { Fabricate(:tag) } + fab!(:tag2) { Fabricate(:tag) } it 'saves user' do user = Fabricate(:user, name: 'Billy Bob') @@ -274,8 +274,8 @@ describe UserUpdater do end context 'title is from a badge' do - let(:user) { Fabricate(:user, title: 'Emperor') } - let(:badge) { Fabricate(:badge, name: 'Minion') } + fab!(:user) { Fabricate(:user, title: 'Emperor') } + fab!(:badge) { Fabricate(:badge, name: 'Minion') } context 'badge can be used as a title' do before do diff --git a/spec/services/word_watcher_spec.rb b/spec/services/word_watcher_spec.rb index 1df8b20ee31..d7d83caa484 100644 --- a/spec/services/word_watcher_spec.rb +++ b/spec/services/word_watcher_spec.rb @@ -16,7 +16,7 @@ describe WordWatcher do end context "with watched words" do - let!(:anise) { Fabricate(:watched_word, word: "anise", action: WatchedWord.actions[:require_approval]) } + fab!(:anise) { Fabricate(:watched_word, word: "anise", action: WatchedWord.actions[:require_approval]) } it "is falsey without a match" do expect(WordWatcher.new("No liquorice for me, thanks...").word_matches_for_action?(:require_approval)).to be_falsey diff --git a/spec/tasks/posts_spec.rb b/spec/tasks/posts_spec.rb index d410313b588..24f12fdf5a1 100644 --- a/spec/tasks/posts_spec.rb +++ b/spec/tasks/posts_spec.rb @@ -5,8 +5,8 @@ require 'highline/import' require 'highline/simulate' RSpec.describe "Post rake tasks" do - let!(:post) { Fabricate(:post, raw: 'The quick brown fox jumps over the lazy dog') } - let!(:tricky_post) { Fabricate(:post, raw: 'Today ^Today') } + fab!(:post) { Fabricate(:post, raw: 'The quick brown fox jumps over the lazy dog') } + fab!(:tricky_post) { Fabricate(:post, raw: 'Today ^Today') } before do Rake::Task.clear