diff --git a/app/controllers/concerns/sociable_controller.rb b/app/controllers/concerns/sociable_controller.rb index 5f8f1e0921ceb1cee0258084012d4804648b69e9..2bdc8081e9de9b2103bedbadb027aae56c92ceda 100644 --- a/app/controllers/concerns/sociable_controller.rb +++ b/app/controllers/concerns/sociable_controller.rb @@ -6,26 +6,18 @@ module SociableController VIEWABLE_METHODS = [:show] included do - before_action :authenticate_user!, only: [:like, :unlike] - before_action :authorize_sociable!, only: [:like, :unlike] + before_action :authenticate_user!, only: [:like] + before_action :authorize_sociable!, only: [:like] before_action :view_object!, only: VIEWABLE_METHODS end - # POST /v1/learning_objects/1/like - # POST /v1/learning_objects/1/like.json + # PUT /v1/learning_objects/1/like + # PUT /v1/learning_objects/1/like.json def like if !sociable.liked? current_user sociable.like current_user render json: {count: sociable.likes.count}, status: :created - else - render status: :forbidden - end - end - - # DELETE /v1/learning_objects/1/unlike - # DELETE /v1/learning_objects/1/unlike.json - def unlike - if sociable.liked? current_user + elsif sociable.liked? current_user sociable.dislike current_user render json: {count: sociable.likes.count}, status: :ok else diff --git a/app/policies/sociable_policy.rb b/app/policies/sociable_policy.rb index a0b54bcc5e9c986fdddf5e0fb970509b30892357..392f3793932a1e92ce3fbd0acd62598b1046f7e7 100644 --- a/app/policies/sociable_policy.rb +++ b/app/policies/sociable_policy.rb @@ -4,10 +4,6 @@ module SociablePolicy record if user_exists? end - def unlike? - record if user_exists? - end - def liked? record if user_exists? end diff --git a/config/routes.rb b/config/routes.rb index ca60c9e1f8af743950e78af5539c08c242e33b88..222f2bd8e6727c844215ee0955020bda88f694a4 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -39,8 +39,7 @@ Rails.application.routes.draw do concern :sociable do member do - post 'like', as: :like, action: :like - delete 'like', as: :unlike, action: :unlike + put 'like', as: :like, action: :like end end diff --git a/spec/acceptance/collections_spec.rb b/spec/acceptance/collections_spec.rb index a3d636d5740b375499246654f24765cd0958ad56..3b6db6d86aab132b648ca61647fe7c34caa88eeb 100644 --- a/spec/acceptance/collections_spec.rb +++ b/spec/acceptance/collections_spec.rb @@ -124,7 +124,7 @@ resource 'Collections' do end - post '/v1/collections/:id/like' do + put '/v1/collections/:id/like' do include_context "authenticate_user" let(:id) { collections.first.id } @@ -138,7 +138,7 @@ resource 'Collections' do end end - delete '/v1/collections/:id/like' do + put '/v1/collections/:id/like' do include_context "authenticate_user" let(:id) { collections.first.id } diff --git a/spec/acceptance/learning_objects_spec.rb b/spec/acceptance/learning_objects_spec.rb index fe74369478f25a71cde4d7055f0d7c005a6f76e9..b3354842560ab72b70d0183a3982738f3aba5bc1 100644 --- a/spec/acceptance/learning_objects_spec.rb +++ b/spec/acceptance/learning_objects_spec.rb @@ -102,7 +102,7 @@ resource 'Learning Objects' do end end - post '/v1/learning_objects/:id/like' do + put '/v1/learning_objects/:id/like' do include_context "authenticate_user" let(:id) { learning_objects.first.id } @@ -116,7 +116,7 @@ resource 'Learning Objects' do end end - delete '/v1/learning_objects/:id/like' do + put '/v1/learning_objects/:id/like' do include_context "authenticate_user" let(:id) { learning_objects.first.id } @@ -167,7 +167,7 @@ resource 'Learning Objects' do end end - + delete '/v1/learning_objects/:id' do include_context "authenticate_user" diff --git a/spec/acceptance/users_spec.rb b/spec/acceptance/users_spec.rb index ba7c818d5877a7bf51244dbb03971e5f5c79fd09..89f684467b91a8b95a7e495b955ffd16de43ca78 100644 --- a/spec/acceptance/users_spec.rb +++ b/spec/acceptance/users_spec.rb @@ -108,6 +108,99 @@ resource 'Users' do end end + get '/v1/users/:id/following/:type' do + include_context "authenticate_user" + + before do + @collection = create(:collection, privacy: "public") + @follow = create(:follow, user: @user, followable: @collection) + end + + let(:id) { @user.id } + let(:type) { "Collection" } + + example 'Showing what the user is following' do + do_request + expect(status).to eq(200) + end + end + + get '/v1/users/:id/reviews/received' do + include_context "authenticate_user" + + before do + @learning_object = create(:learning_object, publisher: @user) + create(:review, reviewable: @learning_object) + end + + let(:id) { @user.id } + + example 'Showing a user’s received reviews' do + do_request + expect(status).to eq(200) + end + end + + get '/v1/users/:id/reviews/own' do + include_context "authenticate_user" + + before do + create(:review, user: @user) + end + + let(:id) { @user.id } + + example 'Showing a user’s own reviews' do + do_request + expect(status).to eq(200) + end + end + + get '/v1/users/:id/learning_objects/liked' do + include_context "authenticate_user" + + before do + create(:like, user: @user) + end + + let(:id) { @user.id } + + example 'Showing a user’s liked learning objects' do + do_request + expect(status).to eq(200) + end + end + + get '/v1/users/:id/learning_objects' do + include_context "authenticate_user" + + before do + create(:learning_object, publisher: @user) + end + + let(:id) { @user.id } + + example 'Showing a user’s learning objects' do + do_request + expect(status).to eq(200) + end + end + + get '/v1/users/:id/drafts' do + include_context "authenticate_user" + + before do + create(:learning_object, publisher: @user, state: LearningObject.states[:draft]) + end + + let(:id) { @user.id } + + example 'Showing a user’s drafts' do + do_request + expect(status).to eq(200) + end + end + delete '/v1/auth' do include_context "authenticate_user"