Show pinned statuses only in the top of the profile page (#4803)
* Show pinned statuses only in the top of the profile page * Refactor AccountsController#show_pinned_statuses?
This commit is contained in:
		
							parent
							
								
									b6f3869f8d
								
							
						
					
					
						commit
						2293466edd
					
				
					 2 changed files with 30 additions and 7 deletions
				
			
		| 
						 | 
				
			
			@ -14,7 +14,7 @@ class AccountsController < ApplicationController
 | 
			
		|||
          return
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        @pinned_statuses = cache_collection(@account.pinned_statuses, Status) unless media_requested?
 | 
			
		||||
        @pinned_statuses = cache_collection(@account.pinned_statuses, Status) if show_pinned_statuses?
 | 
			
		||||
        @statuses        = filtered_statuses.paginate_by_max_id(20, params[:max_id], params[:since_id])
 | 
			
		||||
        @statuses        = cache_collection(@statuses, Status)
 | 
			
		||||
        @next_url        = next_url unless @statuses.empty?
 | 
			
		||||
| 
						 | 
				
			
			@ -33,6 +33,10 @@ class AccountsController < ApplicationController
 | 
			
		|||
 | 
			
		||||
  private
 | 
			
		||||
 | 
			
		||||
  def show_pinned_statuses?
 | 
			
		||||
    [replies_requested?, media_requested?, params[:max_id].present?, params[:since_id].present?].none?
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def filtered_statuses
 | 
			
		||||
    default_statuses.tap do |statuses|
 | 
			
		||||
      statuses.merge!(only_media_scope) if media_requested?
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -61,7 +61,29 @@ RSpec.describe AccountsController, type: :controller do
 | 
			
		|||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context 'html' do
 | 
			
		||||
    context 'html without since_id nor max_id' do
 | 
			
		||||
      before do
 | 
			
		||||
        get :show, params: { username: alice.username }
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      it 'assigns @account' do
 | 
			
		||||
        expect(assigns(:account)).to eq alice
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      it 'assigns @pinned_statuses' do
 | 
			
		||||
        pinned_statuses = assigns(:pinned_statuses).to_a
 | 
			
		||||
        expect(pinned_statuses.size).to eq 3
 | 
			
		||||
        expect(pinned_statuses[0]).to eq status7
 | 
			
		||||
        expect(pinned_statuses[1]).to eq status5
 | 
			
		||||
        expect(pinned_statuses[2]).to eq status6
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      it 'returns http success' do
 | 
			
		||||
        expect(response).to have_http_status(:success)
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context 'html with since_id and max_id' do
 | 
			
		||||
      before do
 | 
			
		||||
        get :show, params: { username: alice.username, max_id: status4.id, since_id: status1.id }
 | 
			
		||||
      end
 | 
			
		||||
| 
						 | 
				
			
			@ -77,12 +99,9 @@ RSpec.describe AccountsController, type: :controller do
 | 
			
		|||
        expect(statuses[1]).to eq status2
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      it 'assigns @pinned_statuses' do
 | 
			
		||||
      it 'assigns an empty array to @pinned_statuses' do
 | 
			
		||||
        pinned_statuses = assigns(:pinned_statuses).to_a
 | 
			
		||||
        expect(pinned_statuses.size).to eq 3
 | 
			
		||||
        expect(pinned_statuses[0]).to eq status7
 | 
			
		||||
        expect(pinned_statuses[1]).to eq status5
 | 
			
		||||
        expect(pinned_statuses[2]).to eq status6
 | 
			
		||||
        expect(pinned_statuses.size).to eq 0
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      it 'returns http success' do
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue