Support fetching StatusMessage by Poll guid

When public fetch is requested with Poll guid, return parent
StatusMessage for it, which includes the Poll in its turn.

closes #7815
This commit is contained in:
cmrd Senya 2018-05-18 19:22:02 +03:00 committed by Benjamin Neff
parent cfa7724d73
commit 87968284ba
No known key found for this signature in database
GPG key ID: 971464C3F1A90194
4 changed files with 30 additions and 2 deletions

View file

@ -10,6 +10,7 @@
* Allow fonts to be served from asset host in CSP [#7825](https://github.com/diaspora/diaspora/pull/7825)
## Features
* Support fetching StatusMessage by Poll GUID [#7815](https://github.com/diaspora/diaspora/pull/7815)
# 0.7.5.0

View file

@ -15,6 +15,8 @@ class Poll < ApplicationRecord
validate :enough_poll_answers
validates :question, presence: true
scope :all_public, -> { joins(:status_message).where(posts: {public: true}) }
self.include_root_in_json = false
def enough_poll_answers

View file

@ -117,8 +117,13 @@ DiasporaFederation.configure do |config|
end
on :fetch_public_entity do |entity_type, guid|
entity = Diaspora::Federation::Mappings.model_class_for(entity_type).find_by(guid: guid, public: true)
Diaspora::Federation::Entities.post(entity) if entity.is_a? Post
entity = Diaspora::Federation::Mappings.model_class_for(entity_type).all_public.find_by(guid: guid)
case entity
when Post
Diaspora::Federation::Entities.post(entity)
when Poll
Diaspora::Federation::Entities.status_message(entity.status_message)
end
end
on :fetch_person_url_to do |diaspora_id, path|

View file

@ -430,6 +430,26 @@ describe "diaspora federation callbacks" do
expect(entity.author).to eq(alice.diaspora_handle)
end
it "fetches a StatusMessage by a Poll guid" do
post = FactoryGirl.create(:status_message, author: alice.person, public: true)
poll = FactoryGirl.create(:poll, status_message: post)
entity = DiasporaFederation.callbacks.trigger(:fetch_public_entity, "Poll", poll.guid)
expect(entity.guid).to eq(post.guid)
expect(entity.author).to eq(alice.diaspora_handle)
expect(entity.public).to be_truthy
expect(entity.poll.guid).to eq(poll.guid)
expect(entity.poll.question).to eq(poll.question)
end
it "doesn't fetch a private StatusMessage by a Poll guid" do
post = FactoryGirl.create(:status_message, author: alice.person, public: false)
poll = FactoryGirl.create(:poll, status_message: post)
expect(
DiasporaFederation.callbacks.trigger(:fetch_public_entity, "Poll", poll.guid)
).to be_nil
end
it "does not fetch a private post" do
post = FactoryGirl.create(:status_message, author: alice.person, public: false)