238 lines
7.1 KiB
Ruby
238 lines
7.1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require "rails_helper"
|
|
require_relative "../support/assign_allowed_group"
|
|
|
|
describe TopicQuery do
|
|
before { SiteSetting.assign_enabled = true }
|
|
|
|
fab!(:user) { Fabricate(:user) }
|
|
fab!(:user2) { Fabricate(:user) }
|
|
fab!(:user3) { Fabricate(:user) }
|
|
fab!(:user4) { Fabricate(:user) }
|
|
|
|
include_context "A group that is allowed to assign"
|
|
|
|
before do
|
|
add_to_assign_allowed_group(user)
|
|
add_to_assign_allowed_group(user2)
|
|
end
|
|
|
|
describe "#list_messages_assigned" do
|
|
fab!(:private_message) { Fabricate(:private_message_post, user: user).topic }
|
|
|
|
fab!(:topic) { Fabricate(:post, user: user).topic }
|
|
fab!(:group_topic) { Fabricate(:post, user: user).topic }
|
|
|
|
before do
|
|
assign_to(private_message, user, user)
|
|
assign_to(topic, user, user)
|
|
assign_to(group_topic, user, assign_allowed_group)
|
|
end
|
|
|
|
it "Includes topics and PMs assigned to user" do
|
|
assigned_messages = TopicQuery.new(user, { page: 0 }).list_messages_assigned(user).topics
|
|
|
|
expect(assigned_messages).to contain_exactly(private_message, topic, group_topic)
|
|
end
|
|
|
|
it "Excludes inactive assignments" do
|
|
Assignment.update_all(active: false)
|
|
|
|
assigned_messages = TopicQuery.new(user, { page: 0 }).list_messages_assigned(user).topics
|
|
|
|
expect(assigned_messages).to eq([])
|
|
end
|
|
|
|
it "Excludes topics and PMs not assigned to user" do
|
|
assigned_messages = TopicQuery.new(user2, { page: 0 }).list_messages_assigned(user2).topics
|
|
|
|
expect(assigned_messages).to contain_exactly(group_topic)
|
|
end
|
|
|
|
it "direct filter excludes group assignment" do
|
|
assigned_messages =
|
|
TopicQuery.new(user, { page: 0, filter: :direct }).list_messages_assigned(user).topics
|
|
|
|
expect(assigned_messages).to contain_exactly(private_message, topic)
|
|
end
|
|
|
|
it "Returns the results ordered by the bumped_at field" do
|
|
topic.update(bumped_at: 2.weeks.ago)
|
|
|
|
assigned_messages = TopicQuery.new(user, { page: 0 }).list_messages_assigned(user).topics
|
|
|
|
expect(assigned_messages).to eq([group_topic, private_message, topic])
|
|
end
|
|
end
|
|
|
|
describe "#list_group_topics_assigned" do
|
|
fab!(:private_message) { Fabricate(:private_message_post, user: user).topic }
|
|
|
|
fab!(:topic) { Fabricate(:post, user: user).topic }
|
|
|
|
fab!(:group_topic) { Fabricate(:post, user: user).topic }
|
|
|
|
before do
|
|
assign_to(private_message, user, user)
|
|
assign_to(topic, user2, user2)
|
|
assign_to(group_topic, user, assign_allowed_group)
|
|
end
|
|
|
|
it "Includes topics and PMs assigned to user" do
|
|
assigned_messages =
|
|
TopicQuery.new(user, { page: 0 }).list_group_topics_assigned(assign_allowed_group).topics
|
|
|
|
expect(assigned_messages).to contain_exactly(private_message, topic, group_topic)
|
|
end
|
|
|
|
it "Returns the results ordered by the bumped_at field" do
|
|
topic.update(bumped_at: 2.weeks.ago)
|
|
|
|
assigned_messages =
|
|
TopicQuery.new(user, { page: 0 }).list_group_topics_assigned(assign_allowed_group).topics
|
|
|
|
expect(assigned_messages).to eq([group_topic, private_message, topic])
|
|
end
|
|
|
|
it "direct filter shows only group assignments" do
|
|
assigned_messages =
|
|
TopicQuery
|
|
.new(user, { page: 0, filter: :direct })
|
|
.list_group_topics_assigned(assign_allowed_group)
|
|
.topics
|
|
|
|
expect(assigned_messages).to contain_exactly(group_topic)
|
|
end
|
|
end
|
|
|
|
describe "#list_private_messages_assigned" do
|
|
let(:user_topic) do
|
|
topic =
|
|
create_post(
|
|
user: user3,
|
|
target_usernames: [user.username, user2.username],
|
|
archetype: Archetype.private_message,
|
|
).topic
|
|
|
|
create_post(topic_id: topic.id, user: user)
|
|
|
|
topic
|
|
end
|
|
|
|
let(:assigned_topic) do
|
|
topic =
|
|
create_post(
|
|
user: user4,
|
|
target_usernames: [user.username, user2.username],
|
|
archetype: Archetype.private_message,
|
|
).topic
|
|
|
|
assign_to(topic, user, user)
|
|
end
|
|
|
|
let(:group2) { Fabricate(:group, messageable_level: Group::ALIAS_LEVELS[:everyone]) }
|
|
|
|
let(:group_assigned_topic) do
|
|
topic =
|
|
create_post(
|
|
user: user,
|
|
target_group_names: [assign_allowed_group.name, group2.name],
|
|
archetype: Archetype.private_message,
|
|
).topic
|
|
|
|
assign_to(topic, user, user)
|
|
end
|
|
|
|
before do
|
|
Group.refresh_automatic_groups!
|
|
|
|
assign_allowed_group.update!(messageable_level: Group::ALIAS_LEVELS[:everyone])
|
|
|
|
user_topic
|
|
assigned_topic
|
|
group_assigned_topic
|
|
end
|
|
|
|
it "should return the right topics" do
|
|
expect(TopicQuery.new(user).list_private_messages_assigned(user).topics).to contain_exactly(
|
|
assigned_topic,
|
|
group_assigned_topic,
|
|
)
|
|
|
|
UserArchivedMessage.archive!(user.id, assigned_topic)
|
|
|
|
expect(TopicQuery.new(user).list_private_messages_assigned(user).topics).to contain_exactly(
|
|
assigned_topic,
|
|
group_assigned_topic,
|
|
)
|
|
|
|
GroupArchivedMessage.archive!(group2.id, group_assigned_topic)
|
|
|
|
expect(TopicQuery.new(user).list_private_messages_assigned(user).topics).to contain_exactly(
|
|
assigned_topic,
|
|
group_assigned_topic,
|
|
)
|
|
|
|
GroupArchivedMessage.archive!(assign_allowed_group.id, group_assigned_topic)
|
|
|
|
expect(TopicQuery.new(user).list_private_messages_assigned(user).topics).to contain_exactly(
|
|
assigned_topic,
|
|
group_assigned_topic,
|
|
)
|
|
end
|
|
end
|
|
|
|
context "assigned filter" do
|
|
it "filters topics assigned to a user" do
|
|
assigned_topic = Fabricate(:post).topic
|
|
assigned_topic2 = Fabricate(:post).topic
|
|
|
|
Assigner.new(assigned_topic, user).assign(user)
|
|
Assigner.new(assigned_topic2, user2).assign(user2)
|
|
query = TopicQuery.new(user, assigned: user.username).list_latest
|
|
|
|
expect(query.topics.length).to eq(1)
|
|
expect(query.topics.first).to eq(assigned_topic)
|
|
end
|
|
|
|
it "filters topics assigned to the current user" do
|
|
assigned_topic = Fabricate(:post).topic
|
|
assigned_topic2 = Fabricate(:post).topic
|
|
|
|
Assigner.new(assigned_topic, user).assign(user)
|
|
Assigner.new(assigned_topic2, user2).assign(user2)
|
|
query = TopicQuery.new(user2, assigned: "me").list_latest
|
|
|
|
expect(query.topics.length).to eq(1)
|
|
expect(query.topics.first).to eq(assigned_topic2)
|
|
end
|
|
|
|
it "filters topics assigned to nobody" do
|
|
assigned_topic = Fabricate(:post).topic
|
|
unassigned_topic = Fabricate(:topic)
|
|
|
|
Assigner.new(assigned_topic, user).assign(user)
|
|
query = TopicQuery.new(user, assigned: "nobody").list_latest
|
|
|
|
expect(query.topics.length).to eq(1)
|
|
expect(query.topics.first).to eq(unassigned_topic)
|
|
end
|
|
|
|
it "filters topics assigned to anybody (*)" do
|
|
assigned_topic = Fabricate(:post).topic
|
|
Fabricate(:topic)
|
|
|
|
Assigner.new(assigned_topic, user).assign(user)
|
|
query = TopicQuery.new(user, assigned: "*").list_latest
|
|
|
|
expect(query.topics.length).to eq(1)
|
|
expect(query.topics.first).to eq(assigned_topic)
|
|
end
|
|
end
|
|
|
|
def assign_to(topic, user, assignee)
|
|
topic.tap { |t| Assigner.new(t, user).assign(assignee) }
|
|
end
|
|
end
|