Last active
August 17, 2024 16:43
-
-
Save paderinandrey/dac39d0d3ec85d7aa54a322685b67d74 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# frozen_string_literal: true | |
require 'rails_helper' | |
using TestProf::AnyFixture::DSL | |
describe 'Home' do | |
let(:scopes) { 'read:statuses' } | |
let_it_be(:bob) { Fabricate(:account) } | |
let_it_be(:tim) { Fabricate(:account) } | |
let_it_be(:ana) { Fabricate(:account) } | |
before_all do | |
user = fixture(:request_user) | |
user.account.follow!(bob) | |
user.account.follow!(ana) | |
Sidekiq::Testing.inline! do | |
PostStatusService.new.call(bob, text: 'New toot from bob.') | |
PostStatusService.new.call(tim, text: 'New toot from tim.') | |
PostStatusService.new.call(ana, text: 'New toot from ana.') | |
end | |
end | |
describe 'GET /api/v1/timelines/home' do | |
subject do | |
get '/api/v1/timelines/home', headers: headers, params: params | |
end | |
let(:params) { {} } | |
it_behaves_like 'forbidden for wrong scope', 'write write:statuses' | |
context 'when the timeline is available' do | |
let(:home_statuses) { bob.statuses + ana.statuses } | |
it 'returns http success' do | |
subject | |
expect(response).to have_http_status(200) | |
end | |
it 'returns the statuses of followed users' do | |
subject | |
expect(body_as_json.pluck(:id)).to match_array(home_statuses.map { |status| status.id.to_s }) | |
end | |
context 'with limit param' do | |
let(:params) { { limit: 1 } } | |
it 'returns only the requested number of statuses' do | |
subject | |
expect(body_as_json.size).to eq(params[:limit]) | |
end | |
it 'sets the correct pagination headers', :aggregate_failures do | |
subject | |
expect(response) | |
.to include_pagination_headers( | |
prev: api_v1_timelines_home_url(limit: params[:limit], min_id: ana.statuses.first.id), | |
next: api_v1_timelines_home_url(limit: params[:limit], max_id: ana.statuses.first.id) | |
) | |
end | |
end | |
end | |
context 'when the timeline is regenerating' do | |
let(:timeline) { instance_double(HomeFeed, regenerating?: true, get: []) } | |
before do | |
allow(HomeFeed).to receive(:new).and_return(timeline) | |
end | |
it 'returns http partial content' do | |
subject | |
expect(response).to have_http_status(206) | |
end | |
end | |
context 'without an authorization header' do | |
let(:headers) { {} } | |
it 'returns http unauthorized' do | |
subject | |
expect(response).to have_http_status(401) | |
end | |
end | |
context 'without a user context' do | |
let(:token) { Fabricate(:accessible_access_token, resource_owner_id: nil, scopes: scopes) } | |
it 'returns http unprocessable entity', :aggregate_failures do | |
subject | |
expect(response).to have_http_status(422) | |
expect(response.headers['Link']).to be_nil | |
end | |
end | |
end | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
RSpec.configure do |config| | |
config.after do | |
Rails.cache.clear | |
# redis.del(redis.keys) | |
end | |
end | |
TestProf::BeforeAll.configure do |config| | |
config.after(:rollback) do | |
include Redisable | |
redis.del(redis.keys) | |
end | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
RSpec.configure do |config| | |
config.after :suite do | |
FileUtils.rm_rf(Dir[Rails.root.join('spec', 'test_files')]) | |
include Redisable | |
redis.del(redis.keys) | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment