forked from cybrespace/mastodon
		
	Introduce recent to Follow (#3247)
Introduce recent to Follow, as Account and other models have. This change also adds specs for the scope and the dependents.
This commit is contained in:
		
							parent
							
								
									860ffc0560
								
							
						
					
					
						commit
						bf575a1f5e
					
				
					 6 changed files with 41 additions and 6 deletions
				
			
		| 
						 | 
					@ -4,6 +4,6 @@ class FollowerAccountsController < ApplicationController
 | 
				
			||||||
  include AccountControllerConcern
 | 
					  include AccountControllerConcern
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def index
 | 
					  def index
 | 
				
			||||||
    @follows = Follow.where(target_account: @account).order(id: :desc).page(params[:page]).per(FOLLOW_PER_PAGE).preload(:account)
 | 
					    @follows = Follow.where(target_account: @account).recent.page(params[:page]).per(FOLLOW_PER_PAGE).preload(:account)
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,6 +4,6 @@ class FollowingAccountsController < ApplicationController
 | 
				
			||||||
  include AccountControllerConcern
 | 
					  include AccountControllerConcern
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def index
 | 
					  def index
 | 
				
			||||||
    @follows = Follow.where(account: @account).order(id: :desc).page(params[:page]).per(FOLLOW_PER_PAGE).preload(:target_account)
 | 
					    @follows = Follow.where(account: @account).recent.page(params[:page]).per(FOLLOW_PER_PAGE).preload(:target_account)
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -23,4 +23,6 @@ class Follow < ApplicationRecord
 | 
				
			||||||
  has_one :notification, as: :activity, dependent: :destroy
 | 
					  has_one :notification, as: :activity, dependent: :destroy
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  validates :account_id, uniqueness: { scope: :target_account_id }
 | 
					  validates :account_id, uniqueness: { scope: :target_account_id }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  scope :recent, -> { reorder(id: :desc) }
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,11 +4,21 @@ describe FollowerAccountsController do
 | 
				
			||||||
  render_views
 | 
					  render_views
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  let(:alice) { Fabricate(:account, username: 'alice') }
 | 
					  let(:alice) { Fabricate(:account, username: 'alice') }
 | 
				
			||||||
 | 
					  let(:follower0) { Fabricate(:account) }
 | 
				
			||||||
 | 
					  let(:follower1) { Fabricate(:account) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  describe 'GET #index' do
 | 
					  describe 'GET #index' do
 | 
				
			||||||
    it 'returns http success' do
 | 
					    it 'assigns follows' do
 | 
				
			||||||
 | 
					      follow0 = follower0.follow!(alice)
 | 
				
			||||||
 | 
					      follow1 = follower1.follow!(alice)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      get :index, params: { account_username: alice.username }
 | 
					      get :index, params: { account_username: alice.username }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      assigned = assigns(:follows).to_a
 | 
				
			||||||
 | 
					      expect(assigned.size).to eq 2
 | 
				
			||||||
 | 
					      expect(assigned[0]).to eq follow1
 | 
				
			||||||
 | 
					      expect(assigned[1]).to eq follow0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      expect(response).to have_http_status(:success)
 | 
					      expect(response).to have_http_status(:success)
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,11 +4,21 @@ describe FollowingAccountsController do
 | 
				
			||||||
  render_views
 | 
					  render_views
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  let(:alice) { Fabricate(:account, username: 'alice') }
 | 
					  let(:alice) { Fabricate(:account, username: 'alice') }
 | 
				
			||||||
 | 
					  let(:followee0) { Fabricate(:account) }
 | 
				
			||||||
 | 
					  let(:followee1) { Fabricate(:account) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  describe 'GET #index' do
 | 
					  describe 'GET #index' do
 | 
				
			||||||
    it 'returns http success' do
 | 
					    it 'assigns followees' do
 | 
				
			||||||
 | 
					      follow0 = alice.follow!(followee0)
 | 
				
			||||||
 | 
					      follow1 = alice.follow!(followee1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      get :index, params: { account_username: alice.username }
 | 
					      get :index, params: { account_username: alice.username }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      assigned = assigns(:follows).to_a
 | 
				
			||||||
 | 
					      expect(assigned.size).to eq 2
 | 
				
			||||||
 | 
					      expect(assigned[0]).to eq follow1
 | 
				
			||||||
 | 
					      expect(assigned[1]).to eq follow0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      expect(response).to have_http_status(:success)
 | 
					      expect(response).to have_http_status(:success)
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,9 +4,9 @@ RSpec.describe Follow, type: :model do
 | 
				
			||||||
  let(:alice) { Fabricate(:account, username: 'alice') }
 | 
					  let(:alice) { Fabricate(:account, username: 'alice') }
 | 
				
			||||||
  let(:bob)   { Fabricate(:account, username: 'bob') }
 | 
					  let(:bob)   { Fabricate(:account, username: 'bob') }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  subject { Follow.new(account: alice, target_account: bob) }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  describe 'validations' do
 | 
					  describe 'validations' do
 | 
				
			||||||
 | 
					    subject { Follow.new(account: alice, target_account: bob) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    it 'has a valid fabricator' do
 | 
					    it 'has a valid fabricator' do
 | 
				
			||||||
      follow = Fabricate.build(:follow)
 | 
					      follow = Fabricate.build(:follow)
 | 
				
			||||||
      expect(follow).to be_valid
 | 
					      expect(follow).to be_valid
 | 
				
			||||||
| 
						 | 
					@ -24,4 +24,17 @@ RSpec.describe Follow, type: :model do
 | 
				
			||||||
      expect(follow).to model_have_error_on_field(:target_account)
 | 
					      expect(follow).to model_have_error_on_field(:target_account)
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  describe 'recent' do
 | 
				
			||||||
 | 
					    it 'sorts so that more recent follows comes earlier' do
 | 
				
			||||||
 | 
					      follow0 = Follow.create!(account: alice, target_account: bob)
 | 
				
			||||||
 | 
					      follow1 = Follow.create!(account: bob, target_account: alice)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      a = Follow.recent.to_a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      expect(a.size).to eq 2
 | 
				
			||||||
 | 
					      expect(a[0]).to eq follow1
 | 
				
			||||||
 | 
					      expect(a[1]).to eq follow0
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue