From 73e9555994e7c693ad374ef4ac6c7baa75f2a5c4 Mon Sep 17 00:00:00 2001 From: Claire Date: Wed, 14 Jun 2023 08:54:52 +0200 Subject: [PATCH] Fix ArgumentError when loading newer Private Mentions (#25399) --- .../api/v1/conversations_controller_spec.rb | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 spec/controllers/api/v1/conversations_controller_spec.rb diff --git a/spec/controllers/api/v1/conversations_controller_spec.rb b/spec/controllers/api/v1/conversations_controller_spec.rb new file mode 100644 index 0000000000..e60b1e8037 --- /dev/null +++ b/spec/controllers/api/v1/conversations_controller_spec.rb @@ -0,0 +1,74 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe Api::V1::ConversationsController do + render_views + + let!(:user) { Fabricate(:user, account_attributes: { username: 'alice' }) } + let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + let(:other) { Fabricate(:user) } + + before do + allow(controller).to receive(:doorkeeper_token) { token } + end + + describe 'GET #index', :sidekiq_inline do + let(:scopes) { 'read:statuses' } + + before do + PostStatusService.new.call(other.account, text: 'Hey @alice', visibility: 'direct') + PostStatusService.new.call(user.account, text: 'Hey, nobody here', visibility: 'direct') + end + + it 'returns pagination headers', :aggregate_failures do + get :index, params: { limit: 1 } + + expect(response).to have_http_status(200) + expect(response.headers['Link'].links.size).to eq(2) + end + + it 'returns conversations', :aggregate_failures do + get :index + json = body_as_json + expect(json.size).to eq 2 + expect(json[0][:accounts].size).to eq 1 + end + + context 'with since_id' do + context 'when requesting old posts' do + it 'returns conversations' do + get :index, params: { since_id: Mastodon::Snowflake.id_at(1.hour.ago, with_random: false) } + json = body_as_json + expect(json.size).to eq 2 + end + end + + context 'when requesting posts in the future' do + it 'returns no conversation' do + get :index, params: { since_id: Mastodon::Snowflake.id_at(1.hour.from_now, with_random: false) } + json = body_as_json + expect(json.size).to eq 0 + end + end + end + + context 'with since_id' do + context 'when requesting old posts' do + it 'returns conversations' do + get :index, params: { since_id: Mastodon::Snowflake.id_at(1.hour.ago, with_random: false) } + json = body_as_json + expect(json.size).to eq 1 + end + end + + context 'when requesting posts in the future' do + it 'returns no conversation' do + get :index, params: { since_id: Mastodon::Snowflake.id_at(1.hour.from_now, with_random: false) } + json = body_as_json + expect(json.size).to eq 0 + end + end + end + end +end