333 lines
11 KiB
Ruby
333 lines
11 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require "rails_helper"
|
|
require_relative "../support/assign_allowed_group"
|
|
|
|
describe ListController do
|
|
before { SiteSetting.assign_enabled = true }
|
|
|
|
let(:user) { Fabricate(:active_user) }
|
|
let(:user2) { Fabricate(:user) }
|
|
let(:admin) { Fabricate(:admin) }
|
|
let(:post) { Fabricate(:post) }
|
|
|
|
describe "only allow users from allowed groups" do
|
|
include_context "A group that is allowed to assign"
|
|
|
|
it "filters requests where current_user is not member of an allowed group" do
|
|
sign_in(user)
|
|
SiteSetting.assign_allowed_on_groups = ""
|
|
|
|
get "/topics/group-topics-assigned/#{get_assigned_allowed_group_name}.json"
|
|
expect(response.status).to eq(403)
|
|
|
|
get "/topics/messages-assigned/#{user.username_lower}.json"
|
|
expect(response.status).to eq(403)
|
|
end
|
|
|
|
it "as an anon user" do
|
|
get "/topics/group-topics-assigned/#{get_assigned_allowed_group_name}.json"
|
|
expect(response.status).to eq(403)
|
|
|
|
get "/topics/messages-assigned/#{user.username_lower}.json"
|
|
expect(response.status).to eq(403)
|
|
end
|
|
|
|
it "as an admin user" do
|
|
sign_in(admin)
|
|
get "/topics/group-topics-assigned/#{get_assigned_allowed_group_name}.json"
|
|
expect(response.status).to eq(200)
|
|
|
|
get "/topics/messages-assigned/#{user.username_lower}.json"
|
|
expect(response.status).to eq(200)
|
|
end
|
|
end
|
|
|
|
context "#group_topics_assigned" do
|
|
include_context "A group that is allowed to assign"
|
|
|
|
fab!(:post1) { Fabricate(:post) }
|
|
fab!(:post2) { Fabricate(:post) }
|
|
fab!(:post3) { Fabricate(:post) }
|
|
fab!(:topic) { post3.topic }
|
|
fab!(:topic1) { post1.topic }
|
|
fab!(:topic2) { post2.topic }
|
|
|
|
before do
|
|
add_to_assign_allowed_group(user)
|
|
|
|
Assigner.new(topic1, user).assign(user)
|
|
Assigner.new(topic2, user).assign(user2)
|
|
|
|
sign_in(user)
|
|
end
|
|
|
|
it "returns user-assigned-topics-list of users in the assigned_allowed_group and doesnt include deleted topic" do
|
|
get "/topics/group-topics-assigned/#{get_assigned_allowed_group_name}.json"
|
|
expect(
|
|
JSON.parse(response.body)["topic_list"]["topics"].map { |t| t["assigned_to_user"]["id"] },
|
|
).to match_array([user.id])
|
|
end
|
|
|
|
it "returns user-assigned-topics-list of users in the assigned_allowed_group and doesnt include inactive topics" do
|
|
Assignment.where(assigned_to: user, target: topic1).update_all(active: false)
|
|
|
|
get "/topics/group-topics-assigned/#{get_assigned_allowed_group_name}.json"
|
|
expect(response.parsed_body["topic_list"]["topics"]).to be_empty
|
|
end
|
|
|
|
it "returns empty user-assigned-topics-list for users not in the assigned_allowed_group" do
|
|
ids = []
|
|
get "/topics/group-topics-assigned/#{get_assigned_allowed_group_name}.json"
|
|
JSON.parse(response.body)["topic_list"]["topics"].each do |t|
|
|
ids.push(t["assigned_to_user"]["id"]) if t["assigned_to_user"]["id"] == user2.id
|
|
end
|
|
expect(ids).to be_empty
|
|
end
|
|
|
|
it "doesnt returns deleted topics" do
|
|
sign_in(admin)
|
|
|
|
Assigner.new(topic, user).assign(user)
|
|
|
|
delete "/t/#{topic.id}.json"
|
|
|
|
topic.reload
|
|
|
|
id = 0
|
|
get "/topics/group-topics-assigned/#{get_assigned_allowed_group_name}.json"
|
|
|
|
JSON.parse(response.body)["topic_list"]["topics"].each do |t|
|
|
id = t.id if t["id"] == topic.id
|
|
end
|
|
|
|
expect(id).to eq(0)
|
|
end
|
|
end
|
|
|
|
context "#sorting messages_assigned and group_topics_assigned" do
|
|
include_context "A group that is allowed to assign"
|
|
|
|
fab!(:post1) { Fabricate(:post) }
|
|
fab!(:post2) { Fabricate(:post) }
|
|
fab!(:post3) { Fabricate(:post) }
|
|
fab!(:topic1) { post1.topic }
|
|
fab!(:topic2) { post2.topic }
|
|
fab!(:topic3) { post3.topic }
|
|
|
|
before do
|
|
add_to_assign_allowed_group(user)
|
|
add_to_assign_allowed_group(user2)
|
|
|
|
Assigner.new(post1.topic, user).assign(user)
|
|
Assigner.new(post2.topic, user).assign(user2)
|
|
Assigner.new(post3.topic, user).assign(user)
|
|
|
|
sign_in(user)
|
|
end
|
|
|
|
it "group_topics_assigned returns sorted topicsList" do
|
|
topic1.bumped_at = Time.now
|
|
topic2.bumped_at = 1.day.ago
|
|
topic3.bumped_at = 3.day.ago
|
|
|
|
topic1.views = 3
|
|
topic2.views = 5
|
|
topic3.views = 1
|
|
|
|
topic1.posts_count = 3
|
|
topic2.posts_count = 1
|
|
topic3.posts_count = 5
|
|
|
|
topic1.save!
|
|
topic2.save!
|
|
topic3.save!
|
|
|
|
get "/topics/group-topics-assigned/#{get_assigned_allowed_group_name}.json?order=posts"
|
|
expect(JSON.parse(response.body)["topic_list"]["topics"].map { |t| t["id"] }).to match_array(
|
|
[topic2.id, topic1.id, topic3.id],
|
|
)
|
|
|
|
get "/topics/group-topics-assigned/#{get_assigned_allowed_group_name}.json?order=views"
|
|
expect(JSON.parse(response.body)["topic_list"]["topics"].map { |t| t["id"] }).to match_array(
|
|
[topic3.id, topic1.id, topic2.id],
|
|
)
|
|
|
|
get "/topics/group-topics-assigned/#{get_assigned_allowed_group_name}.json?order=activity"
|
|
expect(JSON.parse(response.body)["topic_list"]["topics"].map { |t| t["id"] }).to match_array(
|
|
[topic3.id, topic2.id, topic1.id],
|
|
)
|
|
|
|
get "/topics/group-topics-assigned/#{get_assigned_allowed_group_name}.json?order=posts&ascending=true"
|
|
expect(JSON.parse(response.body)["topic_list"]["topics"].map { |t| t["id"] }).to match_array(
|
|
[topic3.id, topic1.id, topic2.id],
|
|
)
|
|
|
|
get "/topics/group-topics-assigned/#{get_assigned_allowed_group_name}.json?order=views&ascending=true"
|
|
expect(JSON.parse(response.body)["topic_list"]["topics"].map { |t| t["id"] }).to match_array(
|
|
[topic2.id, topic1.id, topic3.id],
|
|
)
|
|
|
|
get "/topics/group-topics-assigned/#{get_assigned_allowed_group_name}.json?order=activity&ascending=true"
|
|
expect(JSON.parse(response.body)["topic_list"]["topics"].map { |t| t["id"] }).to match_array(
|
|
[topic1.id, topic2.id, topic3.id],
|
|
)
|
|
end
|
|
|
|
it "messages_assigned returns sorted topicsList" do
|
|
topic1.bumped_at = Time.now
|
|
topic3.bumped_at = 3.day.ago
|
|
|
|
topic1.views = 3
|
|
topic3.views = 1
|
|
|
|
topic1.posts_count = 3
|
|
topic3.posts_count = 5
|
|
|
|
topic1.reload
|
|
topic3.reload
|
|
|
|
get "/topics/messages-assigned/#{user.username}.json?order=posts"
|
|
expect(JSON.parse(response.body)["topic_list"]["topics"].map { |t| t["id"] }).to match_array(
|
|
[topic1.id, topic3.id],
|
|
)
|
|
|
|
get "/topics/messages-assigned/#{user.username}.json?order=views"
|
|
expect(JSON.parse(response.body)["topic_list"]["topics"].map { |t| t["id"] }).to match_array(
|
|
[topic3.id, topic1.id],
|
|
)
|
|
|
|
get "/topics/messages-assigned/#{user.username}.json?order=activity"
|
|
expect(JSON.parse(response.body)["topic_list"]["topics"].map { |t| t["id"] }).to match_array(
|
|
[topic3.id, topic1.id],
|
|
)
|
|
|
|
get "/topics/messages-assigned/#{user.username}.json?order=posts&ascending=true"
|
|
expect(JSON.parse(response.body)["topic_list"]["topics"].map { |t| t["id"] }).to match_array(
|
|
[topic3.id, topic1.id],
|
|
)
|
|
|
|
get "/topics/messages-assigned/#{user.username}.json?order=views&ascending=true"
|
|
expect(JSON.parse(response.body)["topic_list"]["topics"].map { |t| t["id"] }).to match_array(
|
|
[topic1.id, topic3.id],
|
|
)
|
|
|
|
get "/topics/messages-assigned/#{user.username}.json?order=activity&ascending=true"
|
|
expect(JSON.parse(response.body)["topic_list"]["topics"].map { |t| t["id"] }).to match_array(
|
|
[topic1.id, topic3.id],
|
|
)
|
|
end
|
|
end
|
|
|
|
context "filtering of topics as per parameter" do
|
|
include_context "A group that is allowed to assign"
|
|
|
|
fab!(:post1) { Fabricate(:post) }
|
|
fab!(:post2) { Fabricate(:post) }
|
|
fab!(:post3) { Fabricate(:post) }
|
|
fab!(:topic1) { post1.topic }
|
|
fab!(:topic2) { post2.topic }
|
|
fab!(:topic3) { post3.topic }
|
|
|
|
before do
|
|
SearchIndexer.enable
|
|
|
|
add_to_assign_allowed_group(user)
|
|
add_to_assign_allowed_group(user2)
|
|
|
|
Assigner.new(post1.topic, user).assign(user)
|
|
Assigner.new(post2.topic, user).assign(user2)
|
|
Assigner.new(post3.topic, user).assign(user)
|
|
|
|
sign_in(user)
|
|
end
|
|
|
|
after { SearchIndexer.disable }
|
|
|
|
it "returns topics as per filter for #group_topics_assigned" do
|
|
topic1.title = "QUnit testing is love"
|
|
topic2.title = "RSpec testing is too fun"
|
|
topic3.title = "Testing is main part of programming"
|
|
|
|
topic1.save!
|
|
topic2.save!
|
|
topic3.save!
|
|
|
|
get "/topics/group-topics-assigned/#{get_assigned_allowed_group_name}.json",
|
|
params: {
|
|
search: "Testing",
|
|
}
|
|
expect(JSON.parse(response.body)["topic_list"]["topics"].map { |t| t["id"] }).to match_array(
|
|
[topic1.id, topic2.id, topic3.id],
|
|
)
|
|
|
|
get "/topics/group-topics-assigned/#{get_assigned_allowed_group_name}.json",
|
|
params: {
|
|
search: "RSpec",
|
|
}
|
|
expect(JSON.parse(response.body)["topic_list"]["topics"].map { |t| t["id"] }).to match_array(
|
|
[topic2.id],
|
|
)
|
|
|
|
get "/topics/group-topics-assigned/#{get_assigned_allowed_group_name}.json",
|
|
params: {
|
|
search: "love",
|
|
}
|
|
expect(JSON.parse(response.body)["topic_list"]["topics"].map { |t| t["id"] }).to match_array(
|
|
[topic1.id],
|
|
)
|
|
end
|
|
|
|
it "returns topics as per filter for #group_topics_assigned" do
|
|
topic1.title = "QUnit testing is love"
|
|
topic2.title = "RSpec testing is too fun"
|
|
topic3.title = "Testing is main part of programming"
|
|
|
|
topic1.save!
|
|
topic2.save!
|
|
topic3.save!
|
|
|
|
get "/topics/messages-assigned/#{user.username}.json", params: { search: "Testing" }
|
|
expect(JSON.parse(response.body)["topic_list"]["topics"].map { |t| t["id"] }).to match_array(
|
|
[topic1.id, topic3.id],
|
|
)
|
|
|
|
get "/topics/group-topics-assigned/#{get_assigned_allowed_group_name}.json",
|
|
params: {
|
|
search: "love",
|
|
}
|
|
expect(JSON.parse(response.body)["topic_list"]["topics"].map { |t| t["id"] }).to match_array(
|
|
[topic1.id],
|
|
)
|
|
end
|
|
end
|
|
|
|
context "#messages_assigned" do
|
|
include_context "A group that is allowed to assign"
|
|
|
|
fab!(:post1) { Fabricate(:post) }
|
|
fab!(:post2) { Fabricate(:post) }
|
|
|
|
before do
|
|
add_to_assign_allowed_group(user)
|
|
|
|
Assigner.new(post1.topic, user).assign(user)
|
|
Assigner.new(post2.topic, user).assign(user2)
|
|
|
|
sign_in(user)
|
|
end
|
|
|
|
it "returns user-assigned-topics-list of given user" do
|
|
get "/topics/messages-assigned/#{user.username_lower}.json"
|
|
expect(
|
|
JSON.parse(response.body)["topic_list"]["topics"].map { |t| t["assigned_to_user"]["id"] },
|
|
).to match_array([user.id])
|
|
end
|
|
|
|
it "returns empty user-assigned-topics-list for given user not in the assigned_allowed_group" do
|
|
get "/topics/messages-assigned/#{user2.username_lower}.json"
|
|
expect(JSON.parse(response.body)["topic_list"]["topics"]).to be_empty
|
|
end
|
|
end
|
|
end
|