mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-03-01 02:03:22 +00:00
Refactor to use new REST resource
This commit is contained in:
@@ -56,7 +56,7 @@ angular.module("admin.enterprises")
|
||||
$scope.invite_errors = $scope.invite_success = null
|
||||
email = $scope.newUser
|
||||
|
||||
$http.post('/admin/enterprises/invite_manager', {email: email, enterprise: $scope.Enterprise.id}).success (data)->
|
||||
$http.post("/admin/manager_invitations", {email: email, enterprise_id: $scope.Enterprise.id}).success (data)->
|
||||
$scope.addManager({id: data.user, email: email})
|
||||
$scope.invite_success = t('user_invited', email: email)
|
||||
.error (data) ->
|
||||
|
||||
@@ -114,36 +114,8 @@ module Admin
|
||||
end
|
||||
end
|
||||
|
||||
def invite_manager
|
||||
existing_user = Spree::User.where("email = :email OR unconfirmed_email = :email", email: params[:email]).first
|
||||
|
||||
if existing_user
|
||||
render json: { errors: t('admin.enterprises.invite_manager.user_already_exists') }, status: :unprocessable_entity
|
||||
return
|
||||
end
|
||||
|
||||
new_user = create_new_manager(params[:email], params[:enterprise])
|
||||
|
||||
if new_user
|
||||
render json: { user: new_user.id }, status: :ok
|
||||
else
|
||||
render json: { errors: t('admin.enterprises.invite_manager.error') }, status: 500
|
||||
end
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def create_new_manager(email, enterprise_id)
|
||||
enterprise = Enterprise.find(enterprise_id)
|
||||
password = Devise.friendly_token.first(8)
|
||||
new_user = Spree::User.create(email: email, unconfirmed_email: email, password: password, password_confirmation: password)
|
||||
|
||||
enterprise.send_manager_invitation(new_user)
|
||||
enterprise.users << new_user
|
||||
|
||||
new_user
|
||||
end
|
||||
|
||||
def build_resource_with_address
|
||||
enterprise = build_resource_without_address
|
||||
enterprise.address ||= Spree::Address.new
|
||||
|
||||
37
app/controllers/admin/manager_invitations_controller.rb
Normal file
37
app/controllers/admin/manager_invitations_controller.rb
Normal file
@@ -0,0 +1,37 @@
|
||||
module Admin
|
||||
class ManagerInvitationsController < Spree::Admin::BaseController
|
||||
def create
|
||||
@email = params[:email]
|
||||
@enterprise = Enterprise.find(params[:enterprise_id])
|
||||
|
||||
authorize! :edit, @enterprise
|
||||
|
||||
existing_user = Spree::User.find_by_email(@email)
|
||||
|
||||
if existing_user
|
||||
render json: { errors: t('admin.enterprises.invite_manager.user_already_exists') }, status: :unprocessable_entity
|
||||
return
|
||||
end
|
||||
|
||||
new_user = create_new_manager
|
||||
|
||||
if new_user
|
||||
render json: { user: new_user.id }, status: :ok
|
||||
else
|
||||
render json: { errors: t('admin.enterprises.invite_manager.error') }, status: 500
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def create_new_manager
|
||||
password = Devise.friendly_token.first(8)
|
||||
new_user = Spree::User.create(email: @email, unconfirmed_email: @email, password: password)
|
||||
|
||||
@enterprise.users << new_user
|
||||
Delayed::Job.enqueue ManagerInvitationJob.new(@enterprise.id, new_user.id)
|
||||
|
||||
new_user
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -348,10 +348,6 @@ class Enterprise < ActiveRecord::Base
|
||||
abn.present?
|
||||
end
|
||||
|
||||
def send_manager_invitation(user)
|
||||
Delayed::Job.enqueue ManagerInvitationJob.new(self.id, user.id)
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def devise_mailer
|
||||
|
||||
@@ -99,7 +99,6 @@ Openfoodnetwork::Application.routes.draw do
|
||||
get :for_order_cycle
|
||||
get :visible
|
||||
post :bulk_update, as: :bulk_update
|
||||
post :invite_manager
|
||||
end
|
||||
|
||||
member do
|
||||
@@ -114,6 +113,8 @@ Openfoodnetwork::Application.routes.draw do
|
||||
resources :tag_rules, only: [:destroy]
|
||||
end
|
||||
|
||||
resources :manager_invitations, only: [:create]
|
||||
|
||||
resources :enterprise_relationships
|
||||
resources :enterprise_roles
|
||||
|
||||
|
||||
@@ -634,41 +634,5 @@ module Admin
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "#invite_manager" do
|
||||
context "when given email matches an existing user" do
|
||||
let!(:existing_user) { create(:user) }
|
||||
let!(:enterprise) { create(:enterprise) }
|
||||
let(:admin) { create(:admin_user) }
|
||||
|
||||
before do
|
||||
controller.stub spree_current_user: admin
|
||||
end
|
||||
|
||||
it "returns an error" do
|
||||
spree_post :invite_manager, {email: user.email, enterprise: enterprise.id}
|
||||
|
||||
expect(response.status).to eq 422
|
||||
expect(json_response['errors']).to eq I18n.t('admin.enterprises.invite_manager.user_already_exists')
|
||||
end
|
||||
end
|
||||
|
||||
context "signing up a new user" do
|
||||
let!(:enterprise) { create(:enterprise) }
|
||||
let(:admin) { create(:admin_user) }
|
||||
|
||||
before do
|
||||
controller.stub spree_current_user: admin
|
||||
end
|
||||
|
||||
it "creates a new user, sends an invitation email, and returns the user id" do
|
||||
spree_post :invite_manager, {email: 'un.registered@email.com', enterprise: enterprise.id}
|
||||
|
||||
expect(Delayed::Job.last.payload_object.class.to_s).to eq('ManagerInvitationJob')
|
||||
expect(response.status).to eq 200
|
||||
expect(json_response['user']).to eq Spree::User.find_by_email('un.registered@email.com').id
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
require 'spec_helper'
|
||||
|
||||
module Admin
|
||||
describe ManagerInvitationsController, type: :controller do
|
||||
let!(:existing_user) { create(:user) }
|
||||
let!(:enterprise) { create(:enterprise) }
|
||||
let(:admin) { create(:admin_user) }
|
||||
|
||||
describe "#create" do
|
||||
context "when given email matches an existing user" do
|
||||
before do
|
||||
controller.stub spree_current_user: admin
|
||||
end
|
||||
|
||||
it "returns an error" do
|
||||
spree_post :create, {email: existing_user.email, enterprise_id: enterprise.id}
|
||||
|
||||
expect(response.status).to eq 422
|
||||
expect(json_response['errors']).to eq I18n.t('admin.enterprises.invite_manager.user_already_exists')
|
||||
end
|
||||
end
|
||||
|
||||
context "signing up a new user" do
|
||||
before do
|
||||
controller.stub spree_current_user: admin
|
||||
end
|
||||
|
||||
it "creates a new user, sends an invitation email, and returns the user id" do
|
||||
expect do
|
||||
spree_post :create, {email: 'un.registered@email.com', enterprise_id: enterprise.id}
|
||||
end.to enqueue_job Delayed::PerformableMethod
|
||||
|
||||
new_user = Spree::User.find_by_email('un.registered@email.com')
|
||||
|
||||
expect(new_user.reset_password_token).to_not be_nil
|
||||
expect(response.status).to eq 200
|
||||
expect(json_response['user']).to eq new_user.id
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -83,6 +83,7 @@ feature %q{
|
||||
let!(:user1) { create(:user, email: 'user1@example.com') }
|
||||
let!(:user2) { create(:user, email: 'user2@example.com') }
|
||||
let!(:user3) { create(:user, email: 'user3@example.com', confirmed_at: nil) }
|
||||
let(:new_email) { 'new@manager.com' }
|
||||
|
||||
let!(:enterprise) { create(:enterprise, name: 'Test Enterprise', owner: user1) }
|
||||
let!(:enterprise_role) { create(:enterprise_role, user_id: user2.id, enterprise_id: enterprise.id) }
|
||||
@@ -137,8 +138,6 @@ feature %q{
|
||||
end
|
||||
|
||||
it "can invite unregistered users to be managers" do
|
||||
new_email = 'new@manager.com'
|
||||
|
||||
find('a.button.help-modal').click
|
||||
expect(page).to have_css '#invite-manager-modal'
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ describe EnterpriseMailer do
|
||||
describe "#welcome" do
|
||||
it "should send a welcome email when given an enterprise" do
|
||||
EnterpriseMailer.welcome(enterprise).deliver
|
||||
ActionMailer::Base.deliveries.count.should == 1
|
||||
expect(ActionMailer::Base.deliveries.count).to eq 1
|
||||
mail = ActionMailer::Base.deliveries.first
|
||||
expect(mail.subject).to eq "#{enterprise.name} is now on #{Spree::Config[:site_name]}"
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user