Skip to content
Snippets Groups Projects
Commit bf575a1f authored by Akihiko Odaki's avatar Akihiko Odaki Committed by Eugen Rochko
Browse files

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.
parent 860ffc05
No related branches found
No related tags found
No related merge requests found
......@@ -4,6 +4,6 @@ class FollowerAccountsController < ApplicationController
include AccountControllerConcern
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
......@@ -4,6 +4,6 @@ class FollowingAccountsController < ApplicationController
include AccountControllerConcern
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
......@@ -23,4 +23,6 @@ class Follow < ApplicationRecord
has_one :notification, as: :activity, dependent: :destroy
validates :account_id, uniqueness: { scope: :target_account_id }
scope :recent, -> { reorder(id: :desc) }
end
......@@ -4,11 +4,21 @@ describe FollowerAccountsController do
render_views
let(:alice) { Fabricate(:account, username: 'alice') }
let(:follower0) { Fabricate(:account) }
let(:follower1) { Fabricate(:account) }
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 }
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)
end
end
......
......@@ -4,11 +4,21 @@ describe FollowingAccountsController do
render_views
let(:alice) { Fabricate(:account, username: 'alice') }
let(:followee0) { Fabricate(:account) }
let(:followee1) { Fabricate(:account) }
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 }
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)
end
end
......
......@@ -4,9 +4,9 @@ RSpec.describe Follow, type: :model do
let(:alice) { Fabricate(:account, username: 'alice') }
let(:bob) { Fabricate(:account, username: 'bob') }
subject { Follow.new(account: alice, target_account: bob) }
describe 'validations' do
subject { Follow.new(account: alice, target_account: bob) }
it 'has a valid fabricator' do
follow = Fabricate.build(:follow)
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)
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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment