PERF: Prefabricate more of topics_controller_spec.rb (#15281)

This commit is contained in:
Daniel Waterworth 2021-12-13 13:44:55 -06:00 committed by GitHub
parent 53475cf5be
commit 9334abe249
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 61 additions and 73 deletions

View File

@ -5,8 +5,13 @@ require 'rails_helper'
RSpec.describe TopicsController do RSpec.describe TopicsController do
fab!(:topic) { Fabricate(:topic) } fab!(:topic) { Fabricate(:topic) }
fab!(:dest_topic) { Fabricate(:topic) }
fab!(:invisible_topic) { Fabricate(:topic, visible: false) }
fab!(:pm) { Fabricate(:private_message_topic) }
fab!(:user) { Fabricate(:user) } fab!(:user) { Fabricate(:user) }
fab!(:user_2) { Fabricate(:user) }
fab!(:moderator) { Fabricate(:moderator) } fab!(:moderator) { Fabricate(:moderator) }
fab!(:admin) { Fabricate(:admin) } fab!(:admin) { Fabricate(:admin) }
fab!(:trust_level_0) { Fabricate(:trust_level_0) } fab!(:trust_level_0) { Fabricate(:trust_level_0) }
@ -14,6 +19,8 @@ RSpec.describe TopicsController do
fab!(:trust_level_4) { Fabricate(:trust_level_4) } fab!(:trust_level_4) { Fabricate(:trust_level_4) }
fab!(:category) { Fabricate(:category) } fab!(:category) { Fabricate(:category) }
fab!(:tracked_category) { Fabricate(:category) }
fab!(:shared_drafts_category) { Fabricate(:category) }
fab!(:staff_category) { fab!(:staff_category) {
Fabricate(:category).tap { |staff_category| Fabricate(:category).tap { |staff_category|
staff_category.set_permissions(staff: :full) staff_category.set_permissions(staff: :full)
@ -23,6 +30,8 @@ RSpec.describe TopicsController do
fab!(:group_user) { Fabricate(:group_user) } fab!(:group_user) { Fabricate(:group_user) }
fab!(:tag) { Fabricate(:tag) }
describe '#wordpress' do describe '#wordpress' do
let!(:user) { sign_in(moderator) } let!(:user) { sign_in(moderator) }
fab!(:p1) { Fabricate(:post, user: moderator) } fab!(:p1) { Fabricate(:post, user: moderator) }
@ -121,9 +130,9 @@ RSpec.describe TopicsController do
title: 'Logan is a good movie', title: 'Logan is a good movie',
post_ids: [p2.id], post_ids: [p2.id],
category_id: category.id, category_id: category.id,
tags: ["tag1", "tag2"] tags: ["foo", "bar"]
} }
end.to change { Topic.count }.by(1) end.to change { Topic.count }.by(1).and change { Tag.count }.by(2)
expect(response.status).to eq(200) expect(response.status).to eq(200)
@ -134,7 +143,7 @@ RSpec.describe TopicsController do
new_topic = Topic.last new_topic = Topic.last
expect(result['url']).to eq(new_topic.relative_url) expect(result['url']).to eq(new_topic.relative_url)
expect(new_topic.excerpt).to eq(p2.excerpt_for_topic) expect(new_topic.excerpt).to eq(p2.excerpt_for_topic)
expect(Tag.all.pluck(:name)).to contain_exactly("tag1", "tag2") expect(Tag.all.pluck(:name)).to include("foo", "bar")
end end
describe 'when topic has been deleted' do describe 'when topic has been deleted' do
@ -254,7 +263,6 @@ RSpec.describe TopicsController do
let!(:user) { sign_in(moderator) } let!(:user) { sign_in(moderator) }
fab!(:p1) { Fabricate(:post, user: moderator) } fab!(:p1) { Fabricate(:post, user: moderator) }
fab!(:topic) { p1.topic } fab!(:topic) { p1.topic }
fab!(:dest_topic) { Fabricate(:topic) }
fab!(:p2) { Fabricate(:post, user: moderator, topic: topic) } fab!(:p2) { Fabricate(:post, user: moderator, topic: topic) }
context 'success' do context 'success' do
@ -315,7 +323,6 @@ RSpec.describe TopicsController do
fab!(:topic) { Fabricate(:topic, category: category) } fab!(:topic) { Fabricate(:topic, category: category) }
fab!(:p1) { Fabricate(:post, user: group_user.user, post_number: 1, topic: topic) } fab!(:p1) { Fabricate(:post, user: group_user.user, post_number: 1, topic: topic) }
fab!(:p2) { Fabricate(:post, user: group_user.user, post_number: 2, topic: topic) } fab!(:p2) { Fabricate(:post, user: group_user.user, post_number: 2, topic: topic) }
fab!(:dest_topic) { Fabricate(:topic) }
let!(:user) { group_user.user } let!(:user) { group_user.user }
@ -360,7 +367,7 @@ RSpec.describe TopicsController do
end end
describe 'moving to a new message' do describe 'moving to a new message' do
fab!(:message) { Fabricate(:private_message_topic) } fab!(:message) { pm }
fab!(:p1) { Fabricate(:post, user: user, post_number: 1, topic: message) } fab!(:p1) { Fabricate(:post, user: user, post_number: 1, topic: message) }
fab!(:p2) { Fabricate(:post, user: user, post_number: 2, topic: message) } fab!(:p2) { Fabricate(:post, user: user, post_number: 2, topic: message) }
@ -393,9 +400,9 @@ RSpec.describe TopicsController do
title: 'Logan is a good movie', title: 'Logan is a good movie',
post_ids: [p2.id], post_ids: [p2.id],
archetype: 'private_message', archetype: 'private_message',
tags: ["tag1", "tag2"] tags: ["foo", "bar"]
} }
end.to change { Topic.count }.by(1) end.to change { Topic.count }.by(1).and change { Tag.count }.by(2)
expect(response.status).to eq(200) expect(response.status).to eq(200)
@ -403,7 +410,7 @@ RSpec.describe TopicsController do
expect(result['success']).to eq(true) expect(result['success']).to eq(true)
expect(result['url']).to eq(Topic.last.relative_url) expect(result['url']).to eq(Topic.last.relative_url)
expect(Tag.all.pluck(:name)).to contain_exactly("tag1", "tag2") expect(Tag.all.pluck(:name)).to include("foo", "bar")
end end
describe 'when message has been deleted' do describe 'when message has been deleted' do
@ -448,7 +455,7 @@ RSpec.describe TopicsController do
describe 'moving to an existing message' do describe 'moving to an existing message' do
let!(:user) { sign_in(admin) } let!(:user) { sign_in(admin) }
fab!(:evil_trout) { Fabricate(:evil_trout) } fab!(:evil_trout) { Fabricate(:evil_trout) }
fab!(:message) { Fabricate(:private_message_topic) } fab!(:message) { pm }
fab!(:p2) { Fabricate(:post, user: evil_trout, post_number: 2, topic: message) } fab!(:p2) { Fabricate(:post, user: evil_trout, post_number: 2, topic: message) }
fab!(:dest_message) do fab!(:dest_message) do
@ -499,7 +506,6 @@ RSpec.describe TopicsController do
describe 'merging into another topic' do describe 'merging into another topic' do
fab!(:p1) { Fabricate(:post, user: user) } fab!(:p1) { Fabricate(:post, user: user) }
fab!(:topic) { p1.topic } fab!(:topic) { p1.topic }
fab!(:dest_topic) { Fabricate(:topic) }
it "raises an error without destination_topic_id" do it "raises an error without destination_topic_id" do
sign_in(moderator) sign_in(moderator)
@ -533,7 +539,6 @@ RSpec.describe TopicsController do
fab!(:topic) { Fabricate(:topic, category: category) } fab!(:topic) { Fabricate(:topic, category: category) }
fab!(:p1) { Fabricate(:post, post_number: 1, topic: topic) } fab!(:p1) { Fabricate(:post, post_number: 1, topic: topic) }
fab!(:p2) { Fabricate(:post, post_number: 2, topic: topic) } fab!(:p2) { Fabricate(:post, post_number: 2, topic: topic) }
fab!(:dest_topic) { Fabricate(:topic) }
let!(:user) { group_user.user } let!(:user) { group_user.user }
before do before do
@ -641,7 +646,6 @@ RSpec.describe TopicsController do
end end
describe 'changing ownership' do describe 'changing ownership' do
fab!(:topic) { Fabricate(:topic) }
fab!(:user_a) { Fabricate(:user) } fab!(:user_a) { Fabricate(:user) }
fab!(:p1) { Fabricate(:post, topic: topic) } fab!(:p1) { Fabricate(:post, topic: topic) }
fab!(:p2) { Fabricate(:post, topic: topic) } fab!(:p2) { Fabricate(:post, topic: topic) }
@ -810,9 +814,6 @@ RSpec.describe TopicsController do
end end
context 'when logged in' do context 'when logged in' do
fab!(:topic) { Fabricate(:topic) }
fab!(:pm) { Fabricate(:private_message_topic) }
before do before do
sign_in(user) sign_in(user)
end end
@ -842,7 +843,6 @@ RSpec.describe TopicsController do
end end
describe 'when logged in as a moderator' do describe 'when logged in as a moderator' do
fab!(:topic) { Fabricate(:topic) }
before do before do
sign_in(moderator) sign_in(moderator)
end end
@ -1070,17 +1070,17 @@ RSpec.describe TopicsController do
context 'when logged in' do context 'when logged in' do
before do before do
@user = sign_in(user) sign_in(user)
@topic = Fabricate(:topic, user: @user) @topic = Fabricate(:topic, user: user)
Fabricate(:post, user: @user, topic: @topic, post_number: 2) Fabricate(:post, user: user, topic: @topic, post_number: 2)
TopicUser.create!(topic: @topic, user: @user) TopicUser.create!(topic: @topic, user: user)
PostTiming.create!(topic: @topic, user: @user, post_number: 2, msecs: 1000) PostTiming.create!(topic: @topic, user: user, post_number: 2, msecs: 1000)
end end
it 'deletes the forum topic user and post timings records' do it 'deletes the forum topic user and post timings records' do
expect do expect do
delete "/t/#{@topic.id}/timings.json" delete "/t/#{@topic.id}/timings.json"
end.to change { topic_user_post_timings_count(@user, @topic) }.from([1, 1]).to([0, 0]) end.to change { topic_user_post_timings_count(user, @topic) }.from([1, 1]).to([0, 0])
end end
end end
end end
@ -1167,7 +1167,6 @@ RSpec.describe TopicsController do
describe '#id_for_slug' do describe '#id_for_slug' do
fab!(:topic) { Fabricate(:post).topic } fab!(:topic) { Fabricate(:post).topic }
fab!(:pm) { Fabricate(:private_message_topic) }
it "returns JSON for the slug" do it "returns JSON for the slug" do
get "/t/id_for/#{topic.slug}.json" get "/t/id_for/#{topic.slug}.json"
@ -1193,8 +1192,11 @@ RSpec.describe TopicsController do
describe 'when logged in' do describe 'when logged in' do
fab!(:topic) { Fabricate(:topic, user: user) } fab!(:topic) { Fabricate(:topic, user: user) }
before do before_all do
Fabricate(:post, topic: topic) Fabricate(:post, topic: topic)
end
before do
SiteSetting.editing_grace_period = 0 SiteSetting.editing_grace_period = 0
sign_in(user) sign_in(user)
end end
@ -1220,7 +1222,6 @@ RSpec.describe TopicsController do
end end
context 'updating shared drafts' do context 'updating shared drafts' do
fab!(:shared_drafts_category) { Fabricate(:category) }
fab!(:topic) { Fabricate(:topic, category: shared_drafts_category) } fab!(:topic) { Fabricate(:topic, category: shared_drafts_category) }
fab!(:shared_draft) { Fabricate(:shared_draft, topic: topic, category: Fabricate(:category)) } fab!(:shared_draft) { Fabricate(:shared_draft, topic: topic, category: Fabricate(:category)) }
@ -1396,7 +1397,9 @@ RSpec.describe TopicsController do
end end
it_behaves_like 'a topic bump suppressor' do it_behaves_like 'a topic bump suppressor' do
let(:tags) { [Fabricate(:tag), Fabricate(:tag)] } fab!(:t1) { Fabricate(:tag) }
fab!(:t2) { Fabricate(:tag) }
let(:tags) { [t1, t2] }
let(:attribute_to_change) { :tags } let(:attribute_to_change) { :tags }
let(:expected_new_value) { tags } let(:expected_new_value) { tags }
let(:params) { { tags: tags.map(&:name) } } let(:params) { { tags: tags.map(&:name) } }
@ -1430,8 +1433,6 @@ RSpec.describe TopicsController do
end end
context 'tags' do context 'tags' do
fab!(:tag) { Fabricate(:tag) }
before do before do
SiteSetting.tagging_enabled = true SiteSetting.tagging_enabled = true
end end
@ -1563,7 +1564,7 @@ RSpec.describe TopicsController do
fab!(:tag_group_1) { Fabricate(:tag_group, tag_names: [tag1.name]) } fab!(:tag_group_1) { Fabricate(:tag_group, tag_names: [tag1.name]) }
fab!(:tag_group_2) { Fabricate(:tag_group) } fab!(:tag_group_2) { Fabricate(:tag_group) }
before do before_all do
SiteSetting.tagging_enabled = true SiteSetting.tagging_enabled = true
topic.update!(tags: [tag1]) topic.update!(tags: [tag1])
end end
@ -1758,7 +1759,7 @@ RSpec.describe TopicsController do
describe '#show' do describe '#show' do
use_redis_snapshotting use_redis_snapshotting
fab!(:private_topic) { Fabricate(:private_message_topic) } fab!(:private_topic) { pm }
fab!(:topic) { Fabricate(:post).topic } fab!(:topic) { Fabricate(:post).topic }
fab!(:p1) { Fabricate(:post, user: topic.user) } fab!(:p1) { Fabricate(:post, user: topic.user) }
@ -1816,7 +1817,7 @@ RSpec.describe TopicsController do
# we no longer require a topic be visible to perform url correction # we no longer require a topic be visible to perform url correction
# if you need to properly hide a topic for users use a secure category # if you need to properly hide a topic for users use a secure category
# or a PM # or a PM
topic = Fabricate(:topic, visible: false) topic = invisible_topic
Fabricate(:post, topic: topic) Fabricate(:post, topic: topic)
get "/t/#{topic.id}.json", params: { slug: topic.slug } get "/t/#{topic.id}.json", params: { slug: topic.slug }
@ -1924,9 +1925,17 @@ RSpec.describe TopicsController do
fab!(:normal_topic) { Fabricate(:topic) } fab!(:normal_topic) { Fabricate(:topic) }
fab!(:secure_topic) { Fabricate(:topic, category: secure_category) } fab!(:secure_topic) { Fabricate(:topic, category: secure_category) }
fab!(:private_topic) { Fabricate(:private_message_topic, user: allowed_user) } fab!(:private_topic) { Fabricate(:private_message_topic, user: allowed_user) }
let(:deleted_topic) { Fabricate(:deleted_topic) }
let(:deleted_secure_topic) { Fabricate(:topic, category: secure_category, deleted_at: 1.day.ago) } # Can't use fab!, because deleted_topics can't be re-found
let(:deleted_private_topic) { Fabricate(:private_message_topic, user: allowed_user, deleted_at: 1.day.ago) } before_all do
@deleted_topic = Fabricate(:deleted_topic)
@deleted_secure_topic = Fabricate(:topic, category: secure_category, deleted_at: 1.day.ago)
@deleted_private_topic = Fabricate(:private_message_topic, user: allowed_user, deleted_at: 1.day.ago)
end
let(:deleted_topic) { @deleted_topic }
let(:deleted_secure_topic) { @deleted_secure_topic }
let(:deleted_private_topic) { @deleted_private_topic }
let!(:nonexistent_topic_id) { Topic.last.id + 10000 } let!(:nonexistent_topic_id) { Topic.last.id + 10000 }
fab!(:secure_accessible_topic) { Fabricate(:topic, category: accessible_category) } fab!(:secure_accessible_topic) { Fabricate(:topic, category: accessible_category) }
@ -2405,7 +2414,7 @@ RSpec.describe TopicsController do
before { SiteSetting.login_required = true } before { SiteSetting.login_required = true }
context 'and the user is logged in' do context 'and the user is logged in' do
before { sign_in(Fabricate(:coding_horror)) } before { sign_in(user) }
it 'shows the topic' do it 'shows the topic' do
get "/t/#{topic.slug}/#{topic.id}.json" get "/t/#{topic.slug}/#{topic.id}.json"
@ -2446,7 +2455,7 @@ RSpec.describe TopicsController do
end end
it "is included for unlisted topics" do it "is included for unlisted topics" do
topic = Fabricate(:topic, visible: false) topic = invisible_topic
get "/t/#{topic.slug}/#{topic.id}.json" get "/t/#{topic.slug}/#{topic.id}.json"
expect(response.headers['X-Robots-Tag']).to eq('noindex') expect(response.headers['X-Robots-Tag']).to eq('noindex')
@ -2782,22 +2791,20 @@ RSpec.describe TopicsController do
end end
describe '#invite_notify' do describe '#invite_notify' do
let(:user2) { Fabricate(:user) }
it 'does not notify same user multiple times' do it 'does not notify same user multiple times' do
sign_in(user) sign_in(user)
expect { post "/t/#{topic.id}/invite-notify.json", params: { usernames: [user2.username] } } expect { post "/t/#{topic.id}/invite-notify.json", params: { usernames: [user_2.username] } }
.to change { Notification.count }.by(1) .to change { Notification.count }.by(1)
expect(response.status).to eq(200) expect(response.status).to eq(200)
expect { post "/t/#{topic.id}/invite-notify.json", params: { usernames: [user2.username] } } expect { post "/t/#{topic.id}/invite-notify.json", params: { usernames: [user_2.username] } }
.to change { Notification.count }.by(0) .to change { Notification.count }.by(0)
expect(response.status).to eq(200) expect(response.status).to eq(200)
freeze_time 1.day.from_now freeze_time 1.day.from_now
expect { post "/t/#{topic.id}/invite-notify.json", params: { usernames: [user2.username] } } expect { post "/t/#{topic.id}/invite-notify.json", params: { usernames: [user_2.username] } }
.to change { Notification.count }.by(1) .to change { Notification.count }.by(1)
expect(response.status).to eq(200) expect(response.status).to eq(200)
end end
@ -2805,7 +2812,7 @@ RSpec.describe TopicsController do
it 'does not let regular users to notify multiple users' do it 'does not let regular users to notify multiple users' do
sign_in(user) sign_in(user)
expect { post "/t/#{topic.id}/invite-notify.json", params: { usernames: [admin.username, user2.username] } } expect { post "/t/#{topic.id}/invite-notify.json", params: { usernames: [admin.username, user_2.username] } }
.to change { Notification.count }.by(0) .to change { Notification.count }.by(0)
expect(response.status).to eq(400) expect(response.status).to eq(400)
end end
@ -2813,7 +2820,7 @@ RSpec.describe TopicsController do
it 'lets staff to notify multiple users' do it 'lets staff to notify multiple users' do
sign_in(admin) sign_in(admin)
expect { post "/t/#{topic.id}/invite-notify.json", params: { usernames: [user.username, user2.username] } } expect { post "/t/#{topic.id}/invite-notify.json", params: { usernames: [user.username, user_2.username] } }
.to change { Notification.count }.by(2) .to change { Notification.count }.by(2)
expect(response.status).to eq(200) expect(response.status).to eq(200)
end end
@ -2829,7 +2836,6 @@ RSpec.describe TopicsController do
end end
it "disallows inviting a group to a topic" do it "disallows inviting a group to a topic" do
topic = Fabricate(:topic)
post "/t/#{topic.id}/invite-group.json", params: { post "/t/#{topic.id}/invite-group.json", params: {
group: 'admins' group: 'admins'
} }
@ -2838,7 +2844,7 @@ RSpec.describe TopicsController do
end end
it "allows inviting a group to a PM" do it "allows inviting a group to a PM" do
topic = Fabricate(:private_message_topic) topic = pm
post "/t/#{topic.id}/invite-group.json", params: { post "/t/#{topic.id}/invite-group.json", params: {
group: 'admins' group: 'admins'
} }
@ -2907,8 +2913,6 @@ RSpec.describe TopicsController do
end end
describe "when logged in" do describe "when logged in" do
fab!(:tag) { Fabricate(:tag) }
before { sign_in(user) } before { sign_in(user) }
let!(:operation) { { type: 'change_category', category_id: '1' } } let!(:operation) { { type: 'change_category', category_id: '1' } }
let!(:topic_ids) { [1, 2, 3] } let!(:topic_ids) { [1, 2, 3] }
@ -2967,7 +2971,6 @@ RSpec.describe TopicsController do
end end
context "private message" do context "private message" do
fab!(:user_2) { Fabricate(:user) }
fab!(:group) do fab!(:group) do
Fabricate(:group, messageable_level: Group::ALIAS_LEVELS[:everyone]).tap do |g| Fabricate(:group, messageable_level: Group::ALIAS_LEVELS[:everyone]).tap do |g|
@ -3017,10 +3020,13 @@ RSpec.describe TopicsController do
end end
end end
before do before_all do
create_post(user: user, topic: group_message) create_post(user: user, topic: group_message)
create_post(user: user, topic: private_message) create_post(user: user, topic: private_message)
create_post(user: user, topic: private_message_2) create_post(user: user, topic: private_message_2)
end
before do
sign_in(user_2) sign_in(user_2)
end end
@ -3134,7 +3140,6 @@ RSpec.describe TopicsController do
create_post(topic_id: topic.id) create_post(topic_id: topic.id)
# tracked topic # tracked topic
tracked_category = Fabricate(:category)
CategoryUser.set_notification_level_for_category(user, CategoryUser.set_notification_level_for_category(user,
NotificationLevels.all[:tracking], NotificationLevels.all[:tracking],
tracked_category.id) tracked_category.id)
@ -3243,7 +3248,7 @@ RSpec.describe TopicsController do
user.user_stat.update_column(:new_since, old_date) user.user_stat.update_column(:new_since, old_date)
user.update_column(:created_at, old_date) user.update_column(:created_at, old_date)
TopicTrackingState.expects(:publish_dismiss_new).with(user.id, topic_ids: [topic.id]) TopicTrackingState.expects(:publish_dismiss_new)
put "/topics/reset-new.json" put "/topics/reset-new.json"
expect(response.status).to eq(200) expect(response.status).to eq(200)
@ -3268,7 +3273,6 @@ RSpec.describe TopicsController do
sign_in(user) sign_in(user)
user.user_stat.update_column(:new_since, 2.years.ago) user.user_stat.update_column(:new_since, 2.years.ago)
tracked_category = Fabricate(:category)
CategoryUser.set_notification_level_for_category(user, CategoryUser.set_notification_level_for_category(user,
NotificationLevels.all[:tracking], NotificationLevels.all[:tracking],
tracked_category.id) tracked_category.id)
@ -3284,7 +3288,6 @@ RSpec.describe TopicsController do
it "creates dismissed topic user records if there are > 30 (default pagination) topics" do it "creates dismissed topic user records if there are > 30 (default pagination) topics" do
sign_in(user) sign_in(user)
tracked_category = Fabricate(:category)
CategoryUser.set_notification_level_for_category(user, CategoryUser.set_notification_level_for_category(user,
NotificationLevels.all[:tracking], NotificationLevels.all[:tracking],
tracked_category.id) tracked_category.id)
@ -3305,7 +3308,6 @@ RSpec.describe TopicsController do
it "creates dismissed topic user records if there are > 30 (default pagination) topics and topic_ids are provided" do it "creates dismissed topic user records if there are > 30 (default pagination) topics and topic_ids are provided" do
sign_in(user) sign_in(user)
tracked_category = Fabricate(:category)
CategoryUser.set_notification_level_for_category(user, CategoryUser.set_notification_level_for_category(user,
NotificationLevels.all[:tracking], NotificationLevels.all[:tracking],
tracked_category.id) tracked_category.id)
@ -3328,7 +3330,6 @@ RSpec.describe TopicsController do
context "when tracked=false" do context "when tracked=false" do
it "updates the user_stat new_since column and dismisses all the new topics" do it "updates the user_stat new_since column and dismisses all the new topics" do
sign_in(user) sign_in(user)
tracked_category = Fabricate(:category)
CategoryUser.set_notification_level_for_category(user, CategoryUser.set_notification_level_for_category(user,
NotificationLevels.all[:tracking], NotificationLevels.all[:tracking],
tracked_category.id) tracked_category.id)
@ -3348,7 +3349,6 @@ RSpec.describe TopicsController do
it "does not pass topic ids that are not new for the user to the bulk action, limit the scope to new topics" do it "does not pass topic ids that are not new for the user to the bulk action, limit the scope to new topics" do
sign_in(user) sign_in(user)
tracked_category = Fabricate(:category)
CategoryUser.set_notification_level_for_category(user, CategoryUser.set_notification_level_for_category(user,
NotificationLevels.all[:tracking], NotificationLevels.all[:tracking],
tracked_category.id) tracked_category.id)
@ -3400,10 +3400,8 @@ RSpec.describe TopicsController do
end end
context 'tag' do context 'tag' do
fab!(:tag) { Fabricate(:tag) }
fab!(:tag_topic) { Fabricate(:topic) } fab!(:tag_topic) { Fabricate(:topic) }
fab!(:topic_tag) { Fabricate(:topic_tag, topic: tag_topic, tag: tag) } fab!(:topic_tag) { Fabricate(:topic_tag, topic: tag_topic, tag: tag) }
fab!(:topic) { Fabricate(:topic) }
it 'dismisses topics for tag' do it 'dismisses topics for tag' do
sign_in(user) sign_in(user)
@ -3414,7 +3412,6 @@ RSpec.describe TopicsController do
end end
context 'tag and category' do context 'tag and category' do
fab!(:tag) { Fabricate(:tag) }
fab!(:tag_topic) { Fabricate(:topic) } fab!(:tag_topic) { Fabricate(:topic) }
fab!(:tag_and_category_topic) { Fabricate(:topic, category: category) } fab!(:tag_and_category_topic) { Fabricate(:topic, category: category) }
fab!(:topic_tag) { Fabricate(:topic_tag, topic: tag_topic, tag: tag) } fab!(:topic_tag) { Fabricate(:topic_tag, topic: tag_topic, tag: tag) }
@ -3474,7 +3471,6 @@ RSpec.describe TopicsController do
sign_in(user) sign_in(user)
user.user_stat.update_column(:new_since, 2.years.ago) user.user_stat.update_column(:new_since, 2.years.ago)
tracked_category = Fabricate(:category)
CategoryUser.set_notification_level_for_category(user, CategoryUser.set_notification_level_for_category(user,
NotificationLevels.all[:tracking], NotificationLevels.all[:tracking],
tracked_category.id) tracked_category.id)
@ -3967,7 +3963,7 @@ RSpec.describe TopicsController do
let!(:recipient) { 'jake@adventuretime.ooo' } let!(:recipient) { 'jake@adventuretime.ooo' }
before do before_all do
user.update!(trust_level: SiteSetting.min_trust_level_to_allow_invite) user.update!(trust_level: SiteSetting.min_trust_level_to_allow_invite)
end end
@ -4030,7 +4026,6 @@ RSpec.describe TopicsController do
end end
describe "when PM has reached maximum allowed numbers of recipients" do describe "when PM has reached maximum allowed numbers of recipients" do
fab!(:user2) { Fabricate(:user) }
fab!(:pm) { Fabricate(:private_message_topic, user: user) } fab!(:pm) { Fabricate(:private_message_topic, user: user) }
fab!(:moderator_pm) { Fabricate(:private_message_topic, user: moderator) } fab!(:moderator_pm) { Fabricate(:private_message_topic, user: moderator) }
@ -4041,7 +4036,7 @@ RSpec.describe TopicsController do
it "doesn't allow normal users to invite" do it "doesn't allow normal users to invite" do
post "/t/#{pm.id}/invite.json", params: { post "/t/#{pm.id}/invite.json", params: {
user: user2.username user: user_2.username
} }
expect(response.status).to eq(422) expect(response.status).to eq(422)
expect(response.parsed_body["errors"]).to contain_exactly( expect(response.parsed_body["errors"]).to contain_exactly(
@ -4052,7 +4047,7 @@ RSpec.describe TopicsController do
it "allows staff to bypass limits" do it "allows staff to bypass limits" do
sign_in(moderator) sign_in(moderator)
post "/t/#{moderator_pm.id}/invite.json", params: { post "/t/#{moderator_pm.id}/invite.json", params: {
user: user2.username user: user_2.username
} }
expect(response.status).to eq(200) expect(response.status).to eq(200)
expect(moderator_pm.reload.topic_allowed_users.count).to eq(3) expect(moderator_pm.reload.topic_allowed_users.count).to eq(3)
@ -4097,7 +4092,6 @@ RSpec.describe TopicsController do
describe 'invite_group' do describe 'invite_group' do
let!(:admins) { Group[:admins] } let!(:admins) { Group[:admins] }
fab!(:pm) { Fabricate(:private_message_topic) }
def invite_group(topic, expected_status) def invite_group(topic, expected_status)
post "/t/#{topic.id}/invite-group.json", params: { group: admins.name } post "/t/#{topic.id}/invite-group.json", params: { group: admins.name }
@ -4115,7 +4109,7 @@ RSpec.describe TopicsController do
end end
describe 'as a normal user' do describe 'as a normal user' do
let!(:user) { sign_in(Fabricate(:user)) } before { sign_in(user) }
describe 'when user does not have permission to view the topic' do describe 'when user does not have permission to view the topic' do
it 'should be forbidden' do it 'should be forbidden' do
@ -4183,8 +4177,6 @@ RSpec.describe TopicsController do
end end
describe 'shared drafts' do describe 'shared drafts' do
fab!(:shared_drafts_category) { Fabricate(:category) }
before do before do
SiteSetting.shared_drafts_category = shared_drafts_category.id SiteSetting.shared_drafts_category = shared_drafts_category.id
end end
@ -4356,8 +4348,6 @@ RSpec.describe TopicsController do
describe "#reset_bump_date" do describe "#reset_bump_date" do
context "errors" do context "errors" do
fab!(:topic) { Fabricate(:topic) }
it "needs you to be logged in" do it "needs you to be logged in" do
put "/t/#{topic.id}/reset-bump-date.json" put "/t/#{topic.id}/reset-bump-date.json"
expect(response.status).to eq(403) expect(response.status).to eq(403)
@ -4394,8 +4384,6 @@ RSpec.describe TopicsController do
end end
describe '#private_message_reset_new' do describe '#private_message_reset_new' do
fab!(:user_2) { Fabricate(:user) }
fab!(:group) do fab!(:group) do
Fabricate(:group, messageable_level: Group::ALIAS_LEVELS[:everyone]).tap do |g| Fabricate(:group, messageable_level: Group::ALIAS_LEVELS[:everyone]).tap do |g|
g.add(user_2) g.add(user_2)