From 13a7fb79cf84cbd3441cb2f615d2c0ed968b510e Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Fri, 21 Jan 2022 14:33:32 +0000 Subject: [PATCH] Move more login handling out of Angular --- .../checkout/checkout_controller.js.coffee | 15 +++++---------- .../checkout/details_controller.js.coffee | 2 +- app/controllers/spree/users_controller.rb | 14 ++++++++++++-- app/webpacker/packs/application.js | 1 + spec/controllers/spree/users_controller_spec.rb | 8 ++++---- 5 files changed, 23 insertions(+), 17 deletions(-) diff --git a/app/assets/javascripts/darkswarm/controllers/checkout/checkout_controller.js.coffee b/app/assets/javascripts/darkswarm/controllers/checkout/checkout_controller.js.coffee index c3e07f8c68..294a0c4d10 100644 --- a/app/assets/javascripts/darkswarm/controllers/checkout/checkout_controller.js.coffee +++ b/app/assets/javascripts/darkswarm/controllers/checkout/checkout_controller.js.coffee @@ -1,4 +1,4 @@ -angular.module('Darkswarm').controller "CheckoutCtrl", ($scope, localStorageService, Checkout, CurrentUser, CurrentHub, AuthenticationService, SpreeUser, $http) -> +angular.module('Darkswarm').controller "CheckoutCtrl", ($scope, localStorageService, Checkout, CurrentUser, CurrentHub, $http) -> $scope.Checkout = Checkout $scope.submitted = false @@ -35,14 +35,9 @@ angular.module('Darkswarm').controller "CheckoutCtrl", ($scope, localStorageServ $scope.$broadcast 'purchaseFormInvalid', $scope.formdata $scope.ensureUserIsGuest = (callback = null) -> - $http.post("/user/registered_email", {email: $scope.order.email}).then (response)-> - if response.data.registered == true - $scope.promptLogin() - else + $http.post("/user/registered_email", {email: $scope.order.email}) + .then (response)-> + window.CableReady.perform(response.data) + .catch -> $scope.validateForm() if $scope.submitted callback() if callback - - $scope.promptLogin = -> - SpreeUser.spree_user.email = $scope.order.email - AuthenticationService.pushMessage t('devise.failure.already_registered') - AuthenticationService.open '/login' diff --git a/app/assets/javascripts/darkswarm/controllers/checkout/details_controller.js.coffee b/app/assets/javascripts/darkswarm/controllers/checkout/details_controller.js.coffee index a163923597..26bc783743 100644 --- a/app/assets/javascripts/darkswarm/controllers/checkout/details_controller.js.coffee +++ b/app/assets/javascripts/darkswarm/controllers/checkout/details_controller.js.coffee @@ -1,4 +1,4 @@ -angular.module('Darkswarm').controller "DetailsCtrl", ($scope, $timeout, $http, CurrentUser, AuthenticationService, SpreeUser, $controller) -> +angular.module('Darkswarm').controller "DetailsCtrl", ($scope, $timeout, $http, CurrentUser, SpreeUser, $controller) -> angular.extend this, $controller('FieldsetMixin', {$scope: $scope}) $scope.name = "details" diff --git a/app/controllers/spree/users_controller.rb b/app/controllers/spree/users_controller.rb index 70189a3815..cf87ba49da 100644 --- a/app/controllers/spree/users_controller.rb +++ b/app/controllers/spree/users_controller.rb @@ -27,8 +27,18 @@ module Spree # Endpoint for queries to check if a user is already registered def registered_email - user = Spree::User.find_by email: params[:email] - render json: { registered: user.present? } + registered = Spree::User.find_by(email: params[:email]).present? + + if registered + render status: :ok, operations: cable_car. + inner_html( + "#login-feedback", + partial("layouts/alert", locals: { type: "alert", message: t('devise.failure.already_registered') }) + ). + dispatch_event(name: "login:modal:open") + else + head :not_found + end end def create diff --git a/app/webpacker/packs/application.js b/app/webpacker/packs/application.js index 2610d9bee3..2d04d92039 100644 --- a/app/webpacker/packs/application.js +++ b/app/webpacker/packs/application.js @@ -14,6 +14,7 @@ import { CableCar } from "mrujs/plugins" import * as Turbo from "@hotwired/turbo" window.Turbo = Turbo +window.CableReady = CableReady mrujs.start({ plugins: [ new CableCar(CableReady) diff --git a/spec/controllers/spree/users_controller_spec.rb b/spec/controllers/spree/users_controller_spec.rb index a1855cea11..9a0e4298fa 100644 --- a/spec/controllers/spree/users_controller_spec.rb +++ b/spec/controllers/spree/users_controller_spec.rb @@ -60,14 +60,14 @@ describe Spree::UsersController, type: :controller do let!(:user) { create(:user) } - it "returns true if email corresponds to a registered user" do + it "returns ok (200) if email corresponds to a registered user" do post :registered_email, params: { email: user.email } - expect(json_response['registered']).to eq true + expect(response).to have_http_status(:ok) end - it "returns false if email does not correspond to a registered user" do + it "returns not_found (404) if email does not correspond to a registered user" do post :registered_email, params: { email: 'nonregistereduser@example.com' } - expect(json_response['registered']).to eq false + expect(response).to have_http_status(:not_found) end end