FEATURE: Allow group moderators to close/archive topics

* FEATURE: Allow group moderators to close/archive topics
This commit is contained in:
jbrw
2020-07-14 12:36:19 -04:00
committed by GitHub
parent cc6d722de1
commit 06073fe8c6
31 changed files with 215 additions and 38 deletions

View File

@@ -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)

View File

@@ -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)

View File

@@ -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'

View File

@@ -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!

View File

@@ -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!

View File

@@ -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]

View File

@@ -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

View File

@@ -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