improve relations and scopes
This commit is contained in:
@@ -7,6 +7,10 @@ class Post < ApplicationRecord
|
|||||||
|
|
||||||
validate :user, :limit_of_post_per_day
|
validate :user, :limit_of_post_per_day
|
||||||
|
|
||||||
|
scope :by_user_follows, ->(user) {
|
||||||
|
where(user_id: user.following_ids)
|
||||||
|
}
|
||||||
|
|
||||||
def repost?
|
def repost?
|
||||||
kind == :quoted_post
|
kind == :quoted_post
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -9,4 +9,9 @@ class User < ApplicationRecord
|
|||||||
}
|
}
|
||||||
|
|
||||||
has_many :posts
|
has_many :posts
|
||||||
|
|
||||||
|
has_many :user_follows_following, class_name: 'UserFollow', foreign_key: :follower_id
|
||||||
|
has_many :user_follows_followers, class_name: 'UserFollow', foreign_key: :followed_id
|
||||||
|
has_many :following, through: :user_follows_following, source: :followed
|
||||||
|
has_many :followers, through: :user_follows_followers, source: :follower
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,6 +1,31 @@
|
|||||||
require 'rails_helper'
|
require 'rails_helper'
|
||||||
|
|
||||||
RSpec.describe Post, type: :model do
|
RSpec.describe Post, type: :model do
|
||||||
|
describe 'scopes' do
|
||||||
|
context '#by_user_follows' do
|
||||||
|
it 'returns only posts from user follows ' do
|
||||||
|
followed_user = create(:user)
|
||||||
|
not_followed_user = create(:user)
|
||||||
|
|
||||||
|
post1 = create(:post, user: followed_user)
|
||||||
|
post2 = create(:post, user: followed_user)
|
||||||
|
create(:post, user: not_followed_user)
|
||||||
|
|
||||||
|
following_user = create(:user)
|
||||||
|
create(
|
||||||
|
:user_follow,
|
||||||
|
follower_id: following_user.id,
|
||||||
|
followed_id: followed_user.id
|
||||||
|
)
|
||||||
|
|
||||||
|
expect(Post.by_user_follows(following_user)).to eq([
|
||||||
|
post1,
|
||||||
|
post2
|
||||||
|
])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe '#kind' do
|
describe '#kind' do
|
||||||
context 'when post have other post reference and a content' do
|
context 'when post have other post reference and a content' do
|
||||||
it 'returns :quoted_post' do
|
it 'returns :quoted_post' do
|
||||||
|
|||||||
@@ -33,4 +33,32 @@ RSpec.describe User, type: :model do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context '#relations' do
|
||||||
|
context 'following' do
|
||||||
|
it do
|
||||||
|
user1 = create(:user)
|
||||||
|
user2 = create(:user)
|
||||||
|
user3 = create(:user)
|
||||||
|
|
||||||
|
create(:user_follow, follower_id: user1.id, followed_id: user2.id)
|
||||||
|
create(:user_follow, follower_id: user3.id, followed_id: user1.id)
|
||||||
|
|
||||||
|
expect(user1.following).to eq([user2])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'followers' do
|
||||||
|
it do
|
||||||
|
user1 = create(:user)
|
||||||
|
user2 = create(:user)
|
||||||
|
user3 = create(:user)
|
||||||
|
|
||||||
|
create(:user_follow, follower_id: user1.id, followed_id: user2.id)
|
||||||
|
create(:user_follow, follower_id: user3.id, followed_id: user1.id)
|
||||||
|
|
||||||
|
expect(user1.followers).to eq([user3])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user