From ee79fd88d291112ee2fea6d7040d02c9ae631e7a Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Fri, 10 Nov 2023 13:05:23 +1100 Subject: [PATCH] Add /admin/users/:id/accept_terms_or_service end point Plus specs --- .../spree/admin/users_controller.rb | 8 ++++++ config/routes/spree.rb | 7 +++-- .../spree/admin/users_controller_spec.rb | 27 +++++++++++++++++++ 3 files changed, 40 insertions(+), 2 deletions(-) diff --git a/app/controllers/spree/admin/users_controller.rb b/app/controllers/spree/admin/users_controller.rb index 34714ba233..4b5f236b3d 100644 --- a/app/controllers/spree/admin/users_controller.rb +++ b/app/controllers/spree/admin/users_controller.rb @@ -57,6 +57,14 @@ module Spree end end + def accept_terms_of_services + if @user.update(terms_of_service_accepted_at: DateTime.now) + head :ok + else + head :unprocessable_entity + end + end + protected def collection diff --git a/config/routes/spree.rb b/config/routes/spree.rb index 2568731c9a..46e22d2384 100644 --- a/config/routes/spree.rb +++ b/config/routes/spree.rb @@ -48,8 +48,11 @@ Spree::Core::Engine.routes.draw do get '/search/known_users' => "search#known_users", :as => :search_known_users get '/search/customers' => 'search#customers', :as => :search_customers - resources :users - + resources :users do + member do + post :accept_terms_of_services + end + end constraints FeatureToggleConstraint.new(:admin_style_v3, negate: true) do # Show old bulk products screen diff --git a/spec/controllers/spree/admin/users_controller_spec.rb b/spec/controllers/spree/admin/users_controller_spec.rb index 96e7cc4df4..bc2d825e8b 100644 --- a/spec/controllers/spree/admin/users_controller_spec.rb +++ b/spec/controllers/spree/admin/users_controller_spec.rb @@ -38,4 +38,31 @@ describe Spree::Admin::UsersController do expect(response).to redirect_to('/unauthorized') end end + + describe "#accept_terms_of_services" do + let(:user) { create(:user) } + + before do + allow(controller).to receive_messages spree_current_user: user + user.spree_roles << Spree::Role.find_or_create_by(name: 'admin') + end + + it "updates terms_of_service_accepted_at" do + spree_post :accept_terms_of_services, id: user.id + + expect(response).to have_http_status(:ok) + end + + context "when something goes wrong" do + it "returns unprocessable entity" do + # mock update to make it fails + allow(user).to receive(:update).and_return(false) + allow(Spree::User).to receive(:find).and_return(user) + + spree_post :accept_terms_of_services, id: user.id + + expect(response).to have_http_status(:unprocessable_entity) + end + end + end end