discourse-assign/spec/requests/list_controller_spec.rb

287 lines
10 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|
if t['assigned_to_user']['id'] == user2.id
ids.push(t['assigned_to_user']['id'])
end
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|
if t['id'] == topic.id
id = t.id
end
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