FIX: Allow expanding posts when anonymous, add specs
This commit is contained in:
parent
baff2c2fd7
commit
10d0320532
|
@ -5,7 +5,7 @@ require_dependency 'distributed_memoizer'
|
|||
class PostsController < ApplicationController
|
||||
|
||||
# Need to be logged in for all actions here
|
||||
before_filter :ensure_logged_in, except: [:show, :replies, :by_number, :short_link, :reply_history, :revisions]
|
||||
before_filter :ensure_logged_in, except: [:show, :replies, :by_number, :short_link, :reply_history, :revisions, :expand_embed]
|
||||
|
||||
skip_before_filter :store_incoming_links, only: [:short_link]
|
||||
skip_before_filter :check_xhr, only: [:markdown,:short_link]
|
||||
|
@ -144,14 +144,7 @@ class PostsController < ApplicationController
|
|||
end
|
||||
|
||||
def expand_embed
|
||||
post = find_post_from_params
|
||||
content = Rails.cache.fetch("embed-topic:#{post.topic_id}", expires_in: 10.minutes) do
|
||||
url = TopicEmbed.where(topic_id: post.topic_id).pluck(:embed_url).first
|
||||
title, body = TopicEmbed.find_remote(url)
|
||||
body << TopicEmbed.imported_from_html(url)
|
||||
body
|
||||
end
|
||||
render json: {cooked: content}
|
||||
render json: {cooked: TopicEmbed.expanded_for(find_post_from_params) }
|
||||
rescue
|
||||
render_json_error I18n.t('errors.embed.load_from_remote')
|
||||
end
|
||||
|
|
|
@ -137,6 +137,16 @@ class TopicEmbed < ActiveRecord::Base
|
|||
# If there is no first paragaph, return the first div (onebox)
|
||||
doc.css('div').first
|
||||
end
|
||||
|
||||
def self.expanded_for(post)
|
||||
Rails.cache.fetch("embed-topic:#{post.topic_id}", expires_in: 10.minutes) do
|
||||
url = TopicEmbed.where(topic_id: post.topic_id).pluck(:embed_url).first
|
||||
title, body = TopicEmbed.find_remote(url)
|
||||
body << TopicEmbed.imported_from_html(url)
|
||||
body
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
# == Schema Information
|
||||
|
|
|
@ -490,4 +490,21 @@ describe PostsController do
|
|||
|
||||
end
|
||||
|
||||
describe 'expandable embedded posts' do
|
||||
let(:post) { Fabricate(:post) }
|
||||
|
||||
it "raises an error when you can't see the post" do
|
||||
Guardian.any_instance.expects(:can_see?).with(post).returns(false)
|
||||
xhr :get, :expand_embed, id: post.id
|
||||
response.should_not be_success
|
||||
end
|
||||
|
||||
it "retrieves the body when you can see the post" do
|
||||
Guardian.any_instance.expects(:can_see?).with(post).returns(true)
|
||||
TopicEmbed.expects(:expanded_for).with(post).returns("full content")
|
||||
xhr :get, :expand_embed, id: post.id
|
||||
response.should be_success
|
||||
::JSON.parse(response.body)['cooked'].should == "full content"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue