From 804ebb455f766ea7bee652c80ffe8d89ba982aef Mon Sep 17 00:00:00 2001 From: Rahul Date: Mon, 22 Jul 2019 14:11:46 +0530 Subject: [PATCH] invite user with roles --- app/controllers/admin/roles_controller.rb | 7 +++--- app/controllers/concerns/invitation.rb | 4 ++++ .../admin/roles_controller_spec.rb | 22 +++++++++++++++++++ 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/app/controllers/admin/roles_controller.rb b/app/controllers/admin/roles_controller.rb index 98e2e13c..e07edc4f 100644 --- a/app/controllers/admin/roles_controller.rb +++ b/app/controllers/admin/roles_controller.rb @@ -7,6 +7,7 @@ module Admin authorize_resource :role, except: :index # Show flash message with ajax calls after_action :prepare_unobtrusive_flash, only: :toggle_user + include Invitation def index @roles = Role.where(resource: @conference) @@ -61,13 +62,11 @@ module Admin else admin_conference_role_path(@conference.short_title, @role.name) end - + user ||= invite_via_email unless user - redirect_to url, - error: 'Could not find user. Please provide a valid email!' + redirect_to url, error: 'Could not find user. Please provide a valid email!' return end - # The conference must have at least 1 organizer if @role.name == 'organizer' && state == 'false' && @role.users.count == 1 redirect_to admin_conference_role_path(@conference.short_title, @role.name), diff --git a/app/controllers/concerns/invitation.rb b/app/controllers/concerns/invitation.rb index 2d1d84c1..3f4ee036 100644 --- a/app/controllers/concerns/invitation.rb +++ b/app/controllers/concerns/invitation.rb @@ -18,4 +18,8 @@ module Invitation end end end + + def invite_via_email + User.invite!({ email: user_params[:email] }, current_user) + end end diff --git a/spec/controllers/admin/roles_controller_spec.rb b/spec/controllers/admin/roles_controller_spec.rb index 6a0d7754..86a07d38 100644 --- a/spec/controllers/admin/roles_controller_spec.rb +++ b/spec/controllers/admin/roles_controller_spec.rb @@ -95,6 +95,28 @@ describe Admin::RolesController do end end + context 'adds role to unregistered user' do + it 'adds a new unregistered user' do + post :toggle_user, params: { conference_id: conference.short_title, + user: { email: 'example@osem.io' }, + id: 'cfp' } + + expect(User.find_by(email: 'example@osem.io').roles).to eq [cfp_role] + end + + it 'assigns two role to an unregsitered user' do + post :toggle_user, params: { conference_id: conference.short_title, + user: { email: 'example@osem.io' }, + id: 'cfp' } + + post :toggle_user, params: { conference_id: conference.short_title, + user: { email: 'example@osem.io' }, + id: 'organizer' } + + expect(User.find_by(email: 'example@osem.io').roles).to eq [organizer_role, cfp_role] + end + end + context 'removes role from user' do it 'removes role from user' do post :toggle_user, params: { conference_id: conference.short_title,