From 4859958a0c1b405bb7a16646430d044e82f5e923 Mon Sep 17 00:00:00 2001 From: Daniel M Brasil Date: Mon, 17 Jul 2023 11:50:00 -0300 Subject: [PATCH] Migrate to request specs in `/api/v1/polls` (#25596) --- .../api/v1/polls_controller_spec.rb | 37 --------------- spec/requests/api/v1/polls_spec.rb | 47 +++++++++++++++++++ 2 files changed, 47 insertions(+), 37 deletions(-) delete mode 100644 spec/controllers/api/v1/polls_controller_spec.rb create mode 100644 spec/requests/api/v1/polls_spec.rb diff --git a/spec/controllers/api/v1/polls_controller_spec.rb b/spec/controllers/api/v1/polls_controller_spec.rb deleted file mode 100644 index 3aae5496db..0000000000 --- a/spec/controllers/api/v1/polls_controller_spec.rb +++ /dev/null @@ -1,37 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -RSpec.describe Api::V1::PollsController do - render_views - - let(:user) { Fabricate(:user) } - let(:scopes) { 'read:statuses' } - let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } - - before { allow(controller).to receive(:doorkeeper_token) { token } } - - describe 'GET #show' do - let(:poll) { Fabricate(:poll, status: Fabricate(:status, visibility: visibility)) } - - before do - get :show, params: { id: poll.id } - end - - context 'when parent status is public' do - let(:visibility) { 'public' } - - it 'returns http success' do - expect(response).to have_http_status(200) - end - end - - context 'when parent status is private' do - let(:visibility) { 'private' } - - it 'returns http not found' do - expect(response).to have_http_status(404) - end - end - end -end diff --git a/spec/requests/api/v1/polls_spec.rb b/spec/requests/api/v1/polls_spec.rb new file mode 100644 index 0000000000..1c8a818d59 --- /dev/null +++ b/spec/requests/api/v1/polls_spec.rb @@ -0,0 +1,47 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Polls' do + let(:user) { Fabricate(:user) } + let(:scopes) { 'read:statuses' } + let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } + + describe 'GET /api/v1/polls/:id' do + subject do + get "/api/v1/polls/#{poll.id}", headers: headers + end + + let(:poll) { Fabricate(:poll, status: Fabricate(:status, visibility: visibility)) } + let(:visibility) { 'public' } + + it_behaves_like 'forbidden for wrong scope', 'write write:statuses' + + context 'when parent status is public' do + it 'returns the poll data successfully', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + expect(body_as_json).to match( + a_hash_including( + id: poll.id.to_s, + voted: false, + voters_count: poll.voters_count, + votes_count: poll.votes_count + ) + ) + end + end + + context 'when parent status is private' do + let(:visibility) { 'private' } + + it 'returns http not found' do + subject + + expect(response).to have_http_status(404) + end + end + end +end