discourse/spec/components/flag_query_spec.rb
Robin Ward 5af7c90bab FEATURE: Hide Reviewable scores, change score filter to Priority
We found score hard to understand. It is still there behind the scenes
for sorting purposes, but it is no longer shown.

You can now filter by minimum priority (low, med, high) instead of
score.
2019-05-07 14:05:23 -04:00

159 lines
4.8 KiB
Ruby

# frozen_string_literal: true
require 'rails_helper'
require_dependency 'flag_query'
describe FlagQuery do
fab!(:codinghorror) { Fabricate(:coding_horror) }
describe "flagged_topics" do
it "respects `reviewable_default_visibility`" do
Reviewable.set_priorities(medium: 10.0)
admin = Fabricate(:admin)
moderator = Fabricate(:moderator)
post = create_post
SiteSetting.reviewable_default_visibility = 'low'
PostActionCreator.spam(moderator, post)
result = FlagQuery.flagged_topics
expect(result[:flagged_topics]).to be_present
ft = result[:flagged_topics].first
expect(ft.topic).to eq(post.topic)
expect(ft.flag_counts).to eq(PostActionType.types[:spam] => 1)
SiteSetting.reviewable_default_visibility = 'medium'
result = FlagQuery.flagged_topics
expect(result[:flagged_topics]).to be_blank
PostActionCreator.create(admin, post, :inappropriate)
result = FlagQuery.flagged_topics
expect(result[:flagged_topics]).to be_present
ft = result[:flagged_topics].first
expect(ft.topic).to eq(post.topic)
expect(ft.flag_counts).to eq(
PostActionType.types[:spam] => 1,
PostActionType.types[:inappropriate] => 1
)
end
end
describe "flagged_post_actions" do
it "returns the proper count" do
moderator = Fabricate(:moderator)
post = create_post
PostActionCreator.spam(moderator, post)
expect(FlagQuery.flagged_post_actions(topic_id: post.topic_id).count).to eq(1)
expect(FlagQuery.flagged_post_actions(topic_id: post.topic_id, filter: 'old').count).to eq(0)
end
end
describe "flagged_posts_report" do
it "does not return flags on system posts" do
admin = Fabricate(:admin)
post = create_post(user: Discourse.system_user)
PostActionCreator.create(codinghorror, post, :spam)
posts, topics, users = FlagQuery.flagged_posts_report(admin)
expect(posts).to be_blank
expect(topics).to be_blank
expect(users).to be_blank
end
it "operates correctly" do
admin = Fabricate(:admin)
moderator = Fabricate(:moderator)
post = create_post
post2 = create_post
user2 = Fabricate(:user)
user3 = Fabricate(:user)
PostActionCreator.spam(codinghorror, post)
PostActionCreator.create(user2, post, :spam)
result = PostActionCreator.new(
user3,
post,
PostActionType.types[:notify_moderators],
message: "this is a :one::zero:"
).perform
mod_message = result.post_action
PostActionCreator.spam(codinghorror, post2)
PostActionCreator.spam(user2, post2)
posts, topics, users, all_actions = FlagQuery.flagged_posts_report(admin)
expect(posts.count).to eq(2)
first = posts.first
expect(users.count).to eq(5)
expect(first[:post_action_ids].count).to eq(2)
expect(topics.count).to eq(2)
second = posts[1]
expect(second[:post_action_ids].count).to eq(3)
action = all_actions.find { |a| a[:id] == second[:post_action_ids][0] }
expect(action[:permalink]).to eq(mod_message.related_post.topic.relative_url)
expect(action[:conversation][:response][:excerpt]).to match("<img src=")
posts, users = FlagQuery.flagged_posts_report(admin, offset: 1)
expect(posts.count).to eq(1)
# Try by topic
posts = FlagQuery.flagged_posts_report(admin, topic_id: post.topic_id)
expect(posts).to be_present
posts = FlagQuery.flagged_posts_report(admin, topic_id: -1)
expect(posts[0]).to be_blank
# Try by user
posts = FlagQuery.flagged_posts_report(admin, user_id: post.user_id)
expect(posts).to be_present
posts = FlagQuery.flagged_posts_report(admin, user_id: -1000)
expect(posts[0]).to be_blank
# chuck post in category a mod can not see and make sure it's not returned
category = Fabricate(:category)
category.set_permissions(admins: :full)
category.save
post2.topic.change_category_to_id(category.id)
post2.topic.save
posts, users = FlagQuery.flagged_posts_report(moderator)
expect(posts.count).to eq(1)
end
it "respects `reviewable_default_visibility`" do
Reviewable.set_priorities(medium: 3.0)
SiteSetting.reviewable_default_visibility = 'medium'
admin = Fabricate(:admin)
flagger = Fabricate(:user)
post = create_post
PostActionCreator.create(flagger, post, :spam)
posts, topics, users = FlagQuery.flagged_posts_report(admin)
expect(posts).to be_blank
expect(topics).to be_blank
expect(users).to be_blank
PostActionCreator.create(admin, post, :inappropriate)
posts, topics, users = FlagQuery.flagged_posts_report(admin)
expect(posts).to be_present
expect(topics).to be_present
expect(users).to be_present
end
end
end