improve relations and scopes

This commit is contained in:
João Victor Geonizeli
2022-02-28 10:33:44 -03:00
parent e465123190
commit 7ea2d65fef
4 changed files with 62 additions and 0 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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