discourse/spec/requests/post_readers_controller_spec.rb
Josh Soref 59097b207f
DEV: Correct typos and spelling mistakes (#12812)
Over the years we accrued many spelling mistakes in the code base. 

This PR attempts to fix spelling mistakes and typos in all areas of the code that are extremely safe to change 

- comments
- test descriptions
- other low risk areas
2021-05-21 11:43:47 +10:00

133 lines
4.4 KiB
Ruby

# frozen_string_literal: true
require 'rails_helper'
describe PostReadersController do
describe '#index' do
fab!(:admin) { Fabricate(:admin) }
fab!(:reader) { Fabricate(:user) }
before { sign_in(admin) }
before do
@group = Fabricate(:group)
@group_message = Fabricate(:private_message_topic, allowed_groups: [@group])
@post = Fabricate(:post, topic: @group_message, post_number: 3)
end
context 'When the user has access to readers data' do
before do
@group.update!(publish_read_state: true)
@group.add(admin)
@group.add(reader)
end
it 'returns an empty list when nobody has read the topic' do
get '/post_readers.json', params: { id: @post.id }
readers = response.parsed_body['post_readers']
expect(readers).to be_empty
end
it 'returns an user who read until that post' do
TopicUser.create!(user: reader, topic: @group_message, last_read_post_number: 3)
get '/post_readers.json', params: { id: @post.id }
reader_data = response.parsed_body['post_readers'].first
assert_reader_is_correctly_serialized(reader_data, reader, @post)
end
it 'returns an user who read pass that post' do
TopicUser.create!(user: reader, topic: @group_message, last_read_post_number: 4)
get '/post_readers.json', params: { id: @post.id }
reader_data = response.parsed_body['post_readers'].first
assert_reader_is_correctly_serialized(reader_data, reader, @post)
end
it 'return an empty list when nodobody read until that post' do
TopicUser.create!(user: reader, topic: @group_message, last_read_post_number: 1)
get '/post_readers.json', params: { id: @post.id }
readers = response.parsed_body['post_readers']
expect(readers).to be_empty
end
it "doesn't include users without reading progress on first post" do
@post.update(post_number: 1)
TopicUser.create!(user: reader, topic: @group_message, last_read_post_number: nil)
get '/post_readers.json', params: { id: @post.id }
readers = response.parsed_body['post_readers']
expect(readers).to be_empty
end
it "doesn't include staged users" do
TopicUser.create!(user: reader, topic: @group_message, last_read_post_number: 4)
reader.update(staged: true)
get '/post_readers.json', params: { id: @post.id }
readers = response.parsed_body['post_readers']
expect(readers).to be_empty
end
it "doesn't include non-staff users when the post is a whisper" do
@post.update(post_type: Post.types[:whisper])
non_staff_user = Fabricate(:user)
TopicUser.create!(user: non_staff_user, topic: @group_message, last_read_post_number: 4)
get '/post_readers.json', params: { id: @post.id }
readers = response.parsed_body['post_readers']
expect(readers).to be_empty
end
it "includes staff users when the post is a whisper" do
@post.update(post_type: Post.types[:whisper])
admin = Fabricate(:admin)
TopicUser.create!(user: admin, topic: @group_message, last_read_post_number: 4)
get '/post_readers.json', params: { id: @post.id }
reader_data = response.parsed_body['post_readers'].first
assert_reader_is_correctly_serialized(reader_data, admin, @post)
end
it "doesn't include bots" do
TopicUser.create!(user: Discourse.system_user, topic: @group_message, last_read_post_number: 4)
get '/post_readers.json', params: { id: @post.id }
readers = response.parsed_body['post_readers']
expect(readers).to be_empty
end
end
def assert_reader_is_correctly_serialized(reader_data, reader, post)
expect(reader_data['avatar_template']).to eq reader.avatar_template
expect(reader_data['username']).to eq reader.username
expect(reader_data['username_lower']).to eq reader.username_lower
end
it 'returns forbidden if no group has publish_read_state enabled' do
get '/post_readers.json', params: { id: @post.id }
expect(response).to be_forbidden
end
it 'returns forbidden if current_user is not a member of a group with publish_read_state enabled' do
@group.update!(publish_read_state: true)
get '/post_readers.json', params: { id: @post.id }
expect(response).to be_forbidden
end
end
end