PERF: Prefabricate more of topics_controller_spec.rb (#15281)
This commit is contained in:
parent
53475cf5be
commit
9334abe249
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue