about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAkihiko Odaki <akihiko.odaki.4i@stu.hosei.ac.jp>2017-05-23 20:12:19 +0900
committerEugen Rochko <eugen@zeonfederated.com>2017-05-23 13:12:19 +0200
commitbf575a1f5e45515733c8c518182bbb0a3c439920 (patch)
treea26a2f3adc19a816577002ca42bdba5c80f2aebc
parent860ffc05602b148769b87d0cda39985feb9a8486 (diff)
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.
-rw-r--r--app/controllers/follower_accounts_controller.rb2
-rw-r--r--app/controllers/following_accounts_controller.rb2
-rw-r--r--app/models/follow.rb2
-rw-r--r--spec/controllers/follower_accounts_controller_spec.rb12
-rw-r--r--spec/controllers/following_accounts_controller_spec.rb12
-rw-r--r--spec/models/follow_spec.rb17
6 files changed, 41 insertions, 6 deletions
diff --git a/app/controllers/follower_accounts_controller.rb b/app/controllers/follower_accounts_controller.rb
index d56bd2a4d..1e7c7c406 100644
--- a/app/controllers/follower_accounts_controller.rb
+++ b/app/controllers/follower_accounts_controller.rb
@@ -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
diff --git a/app/controllers/following_accounts_controller.rb b/app/controllers/following_accounts_controller.rb
index 925647864..f4488eef5 100644
--- a/app/controllers/following_accounts_controller.rb
+++ b/app/controllers/following_accounts_controller.rb
@@ -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
diff --git a/app/models/follow.rb b/app/models/follow.rb
index 863710f5d..62f6fb670 100644
--- a/app/models/follow.rb
+++ b/app/models/follow.rb
@@ -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
diff --git a/spec/controllers/follower_accounts_controller_spec.rb b/spec/controllers/follower_accounts_controller_spec.rb
index f2082f601..b9b7fef73 100644
--- a/spec/controllers/follower_accounts_controller_spec.rb
+++ b/spec/controllers/follower_accounts_controller_spec.rb
@@ -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
diff --git a/spec/controllers/following_accounts_controller_spec.rb b/spec/controllers/following_accounts_controller_spec.rb
index f4a7e88f9..55e7265c7 100644
--- a/spec/controllers/following_accounts_controller_spec.rb
+++ b/spec/controllers/following_accounts_controller_spec.rb
@@ -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
diff --git a/spec/models/follow_spec.rb b/spec/models/follow_spec.rb
index 0fae25352..43175d852 100644
--- a/spec/models/follow_spec.rb
+++ b/spec/models/follow_spec.rb
@@ -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