78 lines
2.3 KiB
Ruby
78 lines
2.3 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require "rails_helper"
|
|
require_relative "../support/assign_allowed_group"
|
|
|
|
describe Search do
|
|
fab!(:user) { Fabricate(:active_user) }
|
|
fab!(:user2) { Fabricate(:user) }
|
|
|
|
before do
|
|
SearchIndexer.enable
|
|
SiteSetting.assign_enabled = true
|
|
end
|
|
|
|
context "Advanced search" do
|
|
include_context "A group that is allowed to assign"
|
|
|
|
let(:post1) { Fabricate(:post) }
|
|
let(:post2) { Fabricate(:post) }
|
|
let(:post3) { Fabricate(:post) }
|
|
let(:post4) { Fabricate(:post) }
|
|
let(:post5) { Fabricate(:post, topic: post4.topic) }
|
|
let(:post6) { Fabricate(:post) }
|
|
|
|
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)
|
|
Assigner.new(post5, user).assign(user)
|
|
Assignment.create!(
|
|
assigned_to: user,
|
|
assigned_by_user: user,
|
|
target: post6,
|
|
topic_id: post6.topic.id,
|
|
active: false,
|
|
)
|
|
end
|
|
|
|
it "can find by status" do
|
|
expect(Search.execute("in:assigned", guardian: Guardian.new(user)).posts.length).to eq(4)
|
|
|
|
Assigner.new(post3.topic, user).unassign
|
|
|
|
expect(Search.execute("in:unassigned", guardian: Guardian.new(user)).posts.length).to eq(2)
|
|
expect(
|
|
Search.execute("assigned:#{user.username}", guardian: Guardian.new(user)).posts.length,
|
|
).to eq(2)
|
|
end
|
|
|
|
it "serializes results" do
|
|
guardian = Guardian.new(user)
|
|
result = Search.execute("in:assigned", guardian: guardian)
|
|
serializer = GroupedSearchResultSerializer.new(result, scope: guardian)
|
|
indirectly_assigned_to =
|
|
serializer.as_json[:topics].find { |topic| topic[:id] == post5.topic.id }[
|
|
:indirectly_assigned_to
|
|
]
|
|
expect(indirectly_assigned_to).to eq(
|
|
post5.id => {
|
|
assigned_to: {
|
|
assign_icon: "user-plus",
|
|
assign_path: "/u/#{user.username}/activity/assigned",
|
|
avatar_template: user.avatar_template,
|
|
name: user.name,
|
|
username: user.username,
|
|
},
|
|
post_number: post5.post_number,
|
|
assignment_note: nil,
|
|
assignment_status: nil,
|
|
},
|
|
)
|
|
end
|
|
end
|
|
end
|