diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 4ac8823..93ff068 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -1,2 +1,5 @@ class ApplicationController < ActionController::API + def current_user + @current_user ||= User.find_by(id: request.cookies['user_id']) + end end diff --git a/app/controllers/posts_controller.rb b/app/controllers/posts_controller.rb index e1fe816..c77af43 100644 --- a/app/controllers/posts_controller.rb +++ b/app/controllers/posts_controller.rb @@ -27,6 +27,9 @@ class PostsController < ApplicationController # Only allow a list of trusted parameters through. def post_params - params.require(:post).permit(:content, :user_id, :quoted_post_id) + { + user: current_user, + **params.require(:post).permit(:content, :quoted_post_id) + } end end diff --git a/app/controllers/user_follows_controller.rb b/app/controllers/user_follows_controller.rb index 3ddf0ea..f014ca7 100644 --- a/app/controllers/user_follows_controller.rb +++ b/app/controllers/user_follows_controller.rb @@ -21,6 +21,9 @@ class UserFollowsController < ApplicationController # Only allow a list of trusted parameters through. def user_follow_params - params.require(:user_follow).permit(:follower_id, :followed_id) + { + follower: current_user, + **params.require(:user_follow).permit(:followed_id) + } end end diff --git a/app/models/post.rb b/app/models/post.rb index 17d9af6..13a4510 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -3,30 +3,26 @@ class Post < ApplicationRecord belongs_to :quoted_post, optional: true, class_name: 'Post' validates :content, length: { maximum: 777 } - validates :content, presence: true, if: :quoted_post? + validates :content, presence: true, unless: :repost? validate :user, :limit_of_post_per_day + def repost? + kind == :quoted_post + end + def kind - if quoted_post? - :quoted_post - elsif repost? + if quoted_post_id.blank? + :post + elsif content.blank? && quoted_post_id.present? :repost else - :post + :quoted_post end end private - def quoted_post? - content.present? && quoted_post_id - end - - def repost? - content.blank? && quoted_post_id - end - def limit_of_post_per_day posts_from_day = user&.posts&.where('created_at >= ?', Time.zone.now.beginning_of_day) diff --git a/spec/models/post_spec.rb b/spec/models/post_spec.rb index 0c6a0f6..1cc7a85 100644 --- a/spec/models/post_spec.rb +++ b/spec/models/post_spec.rb @@ -5,7 +5,7 @@ RSpec.describe Post, type: :model do context 'when post have other post reference and a content' do it 'returns :quoted_post' do quoted_post = create(:post) - post = create(:post, quoted_post: quoted_post) + post = build(:post, quoted_post: quoted_post) expect(post.kind).to eq(:quoted_post) end @@ -14,7 +14,7 @@ RSpec.describe Post, type: :model do context 'when post have other post reference and dont have a content' do it 'returns :repost' do quoted_post = create(:post) - post = create(:post, quoted_post: quoted_post, content: nil) + post = build(:post, quoted_post: quoted_post, content: nil) expect(post.kind).to eq(:repost) end @@ -22,7 +22,7 @@ RSpec.describe Post, type: :model do context 'when post dont have other post reference and have a content' do it 'returns :post' do - post = create(:post) + post = build(:post) expect(post.kind).to eq(:post) end diff --git a/spec/requests/posts_spec.rb b/spec/requests/posts_spec.rb index c76ef02..00459a2 100644 --- a/spec/requests/posts_spec.rb +++ b/spec/requests/posts_spec.rb @@ -13,18 +13,17 @@ require 'rails_helper' # sticking to rails and rspec-rails APIs to keep things simple and stable. RSpec.describe "/posts", type: :request do - let(:quoted_post) { create(:post) } + let(:user) { create(:user) } let(:valid_attributes) { { content: "Quo dolorem recusandae. Vero laborum deleniti. Qui ipsam illum.", - user_id: create(:user).id, } } let(:invalid_attributes) { { - content: "Quo dolorem recusandae. Vero laborum deleniti. Qui ipsam illum." + content: nil, } } @@ -33,12 +32,14 @@ RSpec.describe "/posts", type: :request do # PostsController, or in your router and rack # middleware. Be sure to keep this updated too. let(:valid_headers) { - {} + { + Cookie: "user_id=#{user.id}" + } } describe "GET /index" do it "renders a successful response" do - Post.create! valid_attributes + create(:post) get posts_url, headers: valid_headers, as: :json expect(response).to be_successful end @@ -46,7 +47,7 @@ RSpec.describe "/posts", type: :request do describe "GET /show" do it "renders a successful response" do - post = Post.create! valid_attributes + post = create(:post) get post_url(post), as: :json expect(response).to be_successful end diff --git a/spec/requests/user_follows_spec.rb b/spec/requests/user_follows_spec.rb index 8b7ff95..73773c0 100644 --- a/spec/requests/user_follows_spec.rb +++ b/spec/requests/user_follows_spec.rb @@ -7,19 +7,19 @@ RSpec.describe "/user_follows", type: :request do let(:valid_attributes) { { followed_id: followed.id, - follower_id: follower.id } } let(:invalid_attributes) { { - followed_id: followed.id, - follower_id: 'follower.id' + followed_id: 'invalid_id', } } let(:valid_headers) { - {} + { + Cookie: "user_id=#{follower.id}" + } } describe "POST /create" do @@ -58,7 +58,7 @@ RSpec.describe "/user_follows", type: :request do describe "DELETE /destroy" do it "destroys the requested user_follow" do - user_follow = UserFollow.create! valid_attributes + user_follow = create(:user_follow, follower: follower, followed: followed) expect { delete user_follow_url(user_follow), headers: valid_headers, as: :json }.to change(UserFollow, :count).by(-1)