diaspora/spec/presenters/poll_presenter_spec.rb
2020-02-02 18:40:07 +01:00

48 lines
2 KiB
Ruby

# frozen_string_literal: true
describe PollPresenter do
let(:poll) { FactoryGirl.create(:status_message_with_poll, public: true).poll }
let(:poll_answer) { poll.poll_answers.first }
describe "#poll" do
it "works without a user" do
presenter = PollPresenter.new(poll)
confirm_poll_api_json_format(presenter.as_api_json, 0, false)
end
it "works with user" do
presenter = PollPresenter.new(poll, alice)
confirm_poll_api_json_format(presenter.as_api_json, 0, false)
expect(presenter.as_api_json[:poll_answers]).to all(include(own_answer: false))
poll.poll_participations.create(poll_answer: poll_answer, author: alice.person)
presenter = PollPresenter.new(poll, alice)
confirm_poll_api_json_format(presenter.as_api_json, 1, true)
expect(presenter.as_api_json[:poll_answers]).to include(include(id: poll_answer.id, own_answer: true))
presenter = PollPresenter.new(poll, eve)
confirm_poll_api_json_format(presenter.as_api_json, 1, false)
expect(presenter.as_api_json[:poll_answers]).to all(include(own_answer: false))
presenter = PollPresenter.new(poll)
confirm_poll_api_json_format(presenter.as_api_json, 1, false)
expect(presenter.as_api_json[:poll_answers]).to_not include(include(:own_answer))
end
end
private
# rubocop:disable Metrics/AbcSize
def confirm_poll_api_json_format(response, expected_count, expected_participation)
expect(response).to include(guid: poll.guid)
expect(response).to include(participation_count: expected_count)
expect(response).to include(already_participated: expected_participation)
expect(response).to include(question: poll.question)
expect(response.has_key?(:poll_answers)).to be_truthy
answer = response[:poll_answers].find {|a| a[:id] == poll_answer.id }
expect(answer[:answer]).to eq(poll_answer.answer)
expect(answer[:vote_count]).to eq(poll_answer.vote_count)
end
# rubocop:enable Metrics/AbcSize
end