mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
FEATURE: Allow group moderators to close/archive topics
* FEATURE: Allow group moderators to close/archive topics
This commit is contained in:
@@ -380,7 +380,7 @@ describe UserGuardian do
|
||||
group = Fabricate(:group)
|
||||
group.add(user)
|
||||
guardian = Guardian.new(user)
|
||||
SiteSetting.enable_category_group_review = true
|
||||
SiteSetting.enable_category_group_moderation = true
|
||||
|
||||
Fabricate(:reviewable_flagged_post, reviewable_by_group: group, category: nil)
|
||||
|
||||
@@ -391,7 +391,7 @@ describe UserGuardian do
|
||||
group = Fabricate(:group)
|
||||
group.add(user)
|
||||
guardian = Guardian.new(user)
|
||||
SiteSetting.enable_category_group_review = false
|
||||
SiteSetting.enable_category_group_moderation = false
|
||||
|
||||
Fabricate(:reviewable_flagged_post, reviewable_by_group: group, category: nil)
|
||||
|
||||
@@ -402,7 +402,7 @@ describe UserGuardian do
|
||||
group = Fabricate(:group)
|
||||
group.add(user)
|
||||
guardian = Guardian.new(user)
|
||||
SiteSetting.enable_category_group_review = true
|
||||
SiteSetting.enable_category_group_moderation = true
|
||||
category = Fabricate(:category, read_restricted: true)
|
||||
|
||||
Fabricate(:reviewable_flagged_post, reviewable_by_group: group, category: category)
|
||||
|
||||
@@ -1726,8 +1726,8 @@ describe Guardian do
|
||||
expect(Guardian.new(user).can_review_topic?(topic)).to eq(false)
|
||||
end
|
||||
|
||||
it 'returns false for a regular user' do
|
||||
SiteSetting.enable_category_group_review = true
|
||||
it 'returns true for a group member with reviewable status' do
|
||||
SiteSetting.enable_category_group_moderation = true
|
||||
group = Fabricate(:group)
|
||||
GroupUser.create!(group_id: group.id, user_id: user.id)
|
||||
topic.category.update!(reviewable_by_group_id: group.id)
|
||||
@@ -1735,6 +1735,50 @@ describe Guardian do
|
||||
end
|
||||
end
|
||||
|
||||
context "can_close_topic?" do
|
||||
it 'returns false with a nil object' do
|
||||
expect(Guardian.new(user).can_close_topic?(nil)).to eq(false)
|
||||
end
|
||||
|
||||
it 'returns true for a staff user' do
|
||||
expect(Guardian.new(moderator).can_close_topic?(topic)).to eq(true)
|
||||
end
|
||||
|
||||
it 'returns false for a regular user' do
|
||||
expect(Guardian.new(user).can_close_topic?(topic)).to eq(false)
|
||||
end
|
||||
|
||||
it 'returns true for a group member with reviewable status' do
|
||||
SiteSetting.enable_category_group_moderation = true
|
||||
group = Fabricate(:group)
|
||||
GroupUser.create!(group_id: group.id, user_id: user.id)
|
||||
topic.category.update!(reviewable_by_group_id: group.id)
|
||||
expect(Guardian.new(user).can_close_topic?(topic)).to eq(true)
|
||||
end
|
||||
end
|
||||
|
||||
context "can_archive_topic?" do
|
||||
it 'returns false with a nil object' do
|
||||
expect(Guardian.new(user).can_archive_topic?(nil)).to eq(false)
|
||||
end
|
||||
|
||||
it 'returns true for a staff user' do
|
||||
expect(Guardian.new(moderator).can_archive_topic?(topic)).to eq(true)
|
||||
end
|
||||
|
||||
it 'returns false for a regular user' do
|
||||
expect(Guardian.new(user).can_archive_topic?(topic)).to eq(false)
|
||||
end
|
||||
|
||||
it 'returns true for a group member with reviewable status' do
|
||||
SiteSetting.enable_category_group_moderation = true
|
||||
group = Fabricate(:group)
|
||||
GroupUser.create!(group_id: group.id, user_id: user.id)
|
||||
topic.category.update!(reviewable_by_group_id: group.id)
|
||||
expect(Guardian.new(user).can_archive_topic?(topic)).to eq(true)
|
||||
end
|
||||
end
|
||||
|
||||
context "can_create_topic?" do
|
||||
it 'returns true for staff user' do
|
||||
expect(Guardian.new(moderator).can_create_topic?(topic)).to eq(true)
|
||||
|
||||
@@ -11,7 +11,7 @@ describe Jobs::NotifyReviewable do
|
||||
let(:group) { group_user.group }
|
||||
|
||||
it "will notify users of new reviewable content" do
|
||||
SiteSetting.enable_category_group_review = true
|
||||
SiteSetting.enable_category_group_moderation = true
|
||||
|
||||
GroupUser.create!(group_id: group.id, user_id: moderator.id)
|
||||
|
||||
@@ -52,7 +52,7 @@ describe Jobs::NotifyReviewable do
|
||||
end
|
||||
|
||||
it "won't notify a group when disabled" do
|
||||
SiteSetting.enable_category_group_review = false
|
||||
SiteSetting.enable_category_group_moderation = false
|
||||
|
||||
GroupUser.create!(group_id: group.id, user_id: moderator.id)
|
||||
r3 = Fabricate(:reviewable, reviewable_by_moderator: true, reviewable_by_group: group)
|
||||
@@ -64,7 +64,7 @@ describe Jobs::NotifyReviewable do
|
||||
end
|
||||
|
||||
it "respects visibility" do
|
||||
SiteSetting.enable_category_group_review = true
|
||||
SiteSetting.enable_category_group_moderation = true
|
||||
Reviewable.set_priorities(medium: 2.0)
|
||||
SiteSetting.reviewable_default_visibility = 'medium'
|
||||
|
||||
|
||||
@@ -58,13 +58,13 @@ describe Category do
|
||||
fab!(:user) { Fabricate(:user) }
|
||||
|
||||
it "will add the group to the reviewable" do
|
||||
SiteSetting.enable_category_group_review = true
|
||||
SiteSetting.enable_category_group_moderation = true
|
||||
reviewable = PostActionCreator.spam(user, post).reviewable
|
||||
expect(reviewable.reviewable_by_group_id).to eq(group.id)
|
||||
end
|
||||
|
||||
it "will add the group to the reviewable even if created manually" do
|
||||
SiteSetting.enable_category_group_review = true
|
||||
SiteSetting.enable_category_group_moderation = true
|
||||
reviewable = ReviewableFlaggedPost.create!(
|
||||
created_by: user,
|
||||
payload: { raw: 'test raw' },
|
||||
@@ -74,7 +74,7 @@ describe Category do
|
||||
end
|
||||
|
||||
it "will not add add the group to the reviewable" do
|
||||
SiteSetting.enable_category_group_review = false
|
||||
SiteSetting.enable_category_group_moderation = false
|
||||
reviewable = PostActionCreator.spam(user, post).reviewable
|
||||
expect(reviewable.reviewable_by_group_id).to be_nil
|
||||
end
|
||||
@@ -87,7 +87,7 @@ describe Category do
|
||||
end
|
||||
|
||||
it "will remove the reviewable_by_group if the category is updated" do
|
||||
SiteSetting.enable_category_group_review = true
|
||||
SiteSetting.enable_category_group_moderation = true
|
||||
reviewable = PostActionCreator.spam(user, post).reviewable
|
||||
category.reviewable_by_group_id = nil
|
||||
category.save!
|
||||
|
||||
@@ -105,7 +105,7 @@ RSpec.describe Reviewable, type: :model do
|
||||
end
|
||||
|
||||
it "works with the reviewable by group" do
|
||||
SiteSetting.enable_category_group_review = true
|
||||
SiteSetting.enable_category_group_moderation = true
|
||||
group = Fabricate(:group)
|
||||
reviewable.reviewable_by_group_id = group.id
|
||||
reviewable.save!
|
||||
@@ -121,7 +121,7 @@ RSpec.describe Reviewable, type: :model do
|
||||
end
|
||||
|
||||
it "doesn't allow review by group when disabled" do
|
||||
SiteSetting.enable_category_group_review = false
|
||||
SiteSetting.enable_category_group_moderation = false
|
||||
group = Fabricate(:group)
|
||||
reviewable.reviewable_by_group_id = group.id
|
||||
reviewable.save!
|
||||
|
||||
@@ -135,7 +135,7 @@ describe CategoriesController do
|
||||
|
||||
describe "success" do
|
||||
it "works" do
|
||||
SiteSetting.enable_category_group_review = true
|
||||
SiteSetting.enable_category_group_moderation = true
|
||||
|
||||
readonly = CategoryGroup.permission_types[:readonly]
|
||||
create_post = CategoryGroup.permission_types[:create_post]
|
||||
|
||||
@@ -655,7 +655,7 @@ RSpec.describe TopicsController do
|
||||
expect(response.status).to eq(403)
|
||||
end
|
||||
|
||||
describe 'when logged in' do
|
||||
describe 'when logged in as a moderator' do
|
||||
let(:topic) { Fabricate(:topic) }
|
||||
before do
|
||||
sign_in(moderator)
|
||||
@@ -703,6 +703,48 @@ RSpec.describe TopicsController do
|
||||
expect(body['topic_status_update']).to eq(nil)
|
||||
end
|
||||
end
|
||||
|
||||
describe 'when logged in as a group member with reviewable status' do
|
||||
fab!(:group_user) { Fabricate(:group_user) }
|
||||
fab!(:category) { Fabricate(:category, reviewable_by_group: group_user.group) }
|
||||
fab!(:topic) { Fabricate(:topic, category: category) }
|
||||
|
||||
let(:user) { group_user.user }
|
||||
let(:group) { group_user.group }
|
||||
|
||||
before do
|
||||
sign_in(user)
|
||||
SiteSetting.enable_category_group_moderation = true
|
||||
end
|
||||
|
||||
it 'should allow a group moderator to close a topic' do
|
||||
put "/t/#{topic.id}/status.json", params: {
|
||||
status: 'closed', enabled: 'true'
|
||||
}
|
||||
|
||||
expect(response.status).to eq(200)
|
||||
expect(topic.reload.closed).to eq(true)
|
||||
end
|
||||
|
||||
it 'should allow a group moderator to archive a topic' do
|
||||
put "/t/#{topic.id}/status.json", params: {
|
||||
status: 'archived', enabled: 'true'
|
||||
}
|
||||
|
||||
expect(response.status).to eq(200)
|
||||
expect(topic.reload.archived).to eq(true)
|
||||
end
|
||||
|
||||
it 'should not allow a group moderator to pin a topic' do
|
||||
put "/t/#{topic.id}/status.json", params: {
|
||||
status: 'pinned', enabled: 'true'
|
||||
}
|
||||
|
||||
expect(response.status).to eq(403)
|
||||
expect(topic.reload.pinned_at).to eq(nil)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
describe '#destroy_timings' do
|
||||
|
||||
@@ -7,13 +7,13 @@ describe CategorySerializer do
|
||||
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
|
||||
SiteSetting.enable_category_group_moderation = true
|
||||
json = described_class.new(category, scope: Guardian.new, root: false).as_json
|
||||
expect(json[:reviewable_by_group_name]).to eq(group.name)
|
||||
end
|
||||
|
||||
it "doesn't include the reviewable by group name if disabled" do
|
||||
SiteSetting.enable_category_group_review = false
|
||||
SiteSetting.enable_category_group_moderation = false
|
||||
json = described_class.new(category, scope: Guardian.new, root: false).as_json
|
||||
expect(json[:reviewable_by_group_name]).to be_blank
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user