143 lines
3.8 KiB
Ruby
143 lines
3.8 KiB
Ruby
require 'rails_helper'
|
|
require_dependency 'queued_posts_controller'
|
|
|
|
# NOTE: This controller only exists for backwards compatibility
|
|
describe QueuedPostsController do
|
|
context 'without authentication' do
|
|
it 'fails' do
|
|
get "/queued-posts.json"
|
|
expect(response).to be_forbidden
|
|
end
|
|
end
|
|
|
|
context 'as a regular user' do
|
|
before { sign_in(Fabricate(:user)) }
|
|
|
|
it 'fails' do
|
|
get "/queued-posts.json"
|
|
expect(response).to be_forbidden
|
|
end
|
|
end
|
|
|
|
context 'as an admin' do
|
|
before { sign_in(Fabricate(:moderator)) }
|
|
|
|
it 'returns the queued posts' do
|
|
get "/queued-posts.json"
|
|
expect(response.status).to eq(200)
|
|
end
|
|
end
|
|
|
|
describe '#update' do
|
|
before { sign_in(Fabricate(:moderator)) }
|
|
let(:qp) { Fabricate(:reviewable_queued_post) }
|
|
|
|
context 'not found' do
|
|
it 'returns json error' do
|
|
qp.destroy!
|
|
|
|
put "/queued_posts/#{qp.id}.json", params: {
|
|
queued_post: { state: 'approved' }
|
|
}
|
|
|
|
expect(response.status).to eq(404)
|
|
end
|
|
end
|
|
|
|
context 'approved' do
|
|
it 'updates the post to approved' do
|
|
|
|
put "/queued_posts/#{qp.id}.json", params: {
|
|
queued_post: { state: 'approved' }
|
|
}
|
|
|
|
expect(response.status).to eq(200)
|
|
json = ::JSON.parse(response.body)
|
|
qp_json = json['queued_posts']
|
|
|
|
expect(qp_json['state']).to eq(2)
|
|
end
|
|
end
|
|
|
|
context 'rejected' do
|
|
it 'updates the post to rejected' do
|
|
|
|
put "/queued_posts/#{qp.id}.json", params: {
|
|
queued_post: { state: 'rejected' }
|
|
}
|
|
|
|
expect(response.status).to eq(200)
|
|
|
|
json = ::JSON.parse(response.body)
|
|
qp_json = json['queued_posts']
|
|
expect(qp_json['state']).to eq(3)
|
|
end
|
|
end
|
|
|
|
context 'editing content' do
|
|
let(:changes) do
|
|
{
|
|
raw: 'new raw',
|
|
title: 'new title',
|
|
category_id: 10,
|
|
tags: ['new_tag']
|
|
}
|
|
end
|
|
|
|
context 'when it is a topic' do
|
|
let(:queued_topic) { Fabricate(:reviewable_queued_post_topic,) }
|
|
|
|
it 'updates the topic attributes' do
|
|
put "/queued_posts/#{queued_topic.id}.json", params: {
|
|
queued_post: changes
|
|
}
|
|
|
|
expect(response.status).to eq(200)
|
|
queued_topic.reload
|
|
|
|
expect(queued_topic.payload['raw']).to eq(changes[:raw])
|
|
expect(queued_topic.payload['title']).to eq(changes[:title])
|
|
expect(queued_topic.category_id).to eq(changes[:category_id])
|
|
expect(queued_topic.payload['tags']).to eq(changes[:tags])
|
|
end
|
|
|
|
it 'removes tags if not present' do
|
|
queued_topic.payload[:tags] = ['another-tag']
|
|
queued_topic.save!
|
|
|
|
put "/queued_posts/#{queued_topic.id}.json", params: {
|
|
queued_post: changes.except(:tags)
|
|
}
|
|
|
|
expect(response.status).to eq(200)
|
|
queued_topic.reload
|
|
|
|
expect(queued_topic.payload['raw']).to eq(changes[:raw])
|
|
expect(queued_topic.payload['title']).to eq(changes[:title])
|
|
expect(queued_topic.category_id).to eq(changes[:category_id])
|
|
expect(queued_topic.payload['tags']).to be_nil
|
|
end
|
|
end
|
|
|
|
context 'when it is a reply' do
|
|
let(:queued_reply) { Fabricate(:reviewable_queued_post) }
|
|
|
|
it 'updates the reply attributes' do
|
|
put "/queued_posts/#{queued_reply.id}.json", params: {
|
|
queued_post: changes
|
|
}
|
|
|
|
original_category = queued_reply.category_id
|
|
expect(response.status).to eq(200)
|
|
queued_reply.reload
|
|
|
|
expect(queued_reply.payload['raw']).to eq(changes[:raw])
|
|
expect(queued_reply.payload['title']).to be_nil
|
|
expect(queued_reply.category_id).to eq(original_category)
|
|
expect(queued_reply.payload['tags']).to be_nil
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|