refacto: rename administration to super_admin
This commit is contained in:
parent
a88172eb01
commit
5562e65bf3
39 changed files with 180 additions and 175 deletions
|
@ -1,28 +0,0 @@
|
||||||
class AdministrationsController < ApplicationController
|
|
||||||
before_action :authenticate_administration!
|
|
||||||
|
|
||||||
def edit_otp
|
|
||||||
end
|
|
||||||
|
|
||||||
def enable_otp
|
|
||||||
current_administration.enable_otp!
|
|
||||||
@qrcode = generate_qr_code
|
|
||||||
sign_out :administration
|
|
||||||
end
|
|
||||||
|
|
||||||
protected
|
|
||||||
|
|
||||||
def authenticate_administration!
|
|
||||||
if !administration_signed_in?
|
|
||||||
redirect_to root_path
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def generate_qr_code
|
|
||||||
issuer = 'DSManager'
|
|
||||||
label = "#{issuer}:#{current_administration.email}"
|
|
||||||
RQRCode::QRCode.new(current_administration.otp_provisioning_uri(label, issuer: issuer))
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -142,7 +142,7 @@ class ApplicationController < ActionController::Base
|
||||||
current_user,
|
current_user,
|
||||||
current_instructeur,
|
current_instructeur,
|
||||||
current_administrateur,
|
current_administrateur,
|
||||||
current_administration
|
current_super_admin
|
||||||
].compact.map { |role| role.class.name }
|
].compact.map { |role| role.class.name }
|
||||||
|
|
||||||
roles.any? ? roles.join(', ') : 'Guest'
|
roles.any? ? roles.join(', ') : 'Guest'
|
||||||
|
@ -180,11 +180,11 @@ class ApplicationController < ActionController::Base
|
||||||
authorized_request =
|
authorized_request =
|
||||||
request.path_info == '/' ||
|
request.path_info == '/' ||
|
||||||
request.path_info.start_with?('/manager') ||
|
request.path_info.start_with?('/manager') ||
|
||||||
request.path_info.start_with?('/administrations')
|
request.path_info.start_with?('/super_admins')
|
||||||
|
|
||||||
api_request = request.path_info.start_with?('/api/')
|
api_request = request.path_info.start_with?('/api/')
|
||||||
|
|
||||||
if administration_signed_in? || authorized_request
|
if super_admin_signed_in? || authorized_request
|
||||||
flash.now.alert = MAINTENANCE_MESSAGE
|
flash.now.alert = MAINTENANCE_MESSAGE
|
||||||
elsif api_request
|
elsif api_request
|
||||||
render json: { error: MAINTENANCE_MESSAGE }.to_json, status: :service_unavailable
|
render json: { error: MAINTENANCE_MESSAGE }.to_json, status: :service_unavailable
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
module Manager
|
module Manager
|
||||||
class AdministrateursController < Manager::ApplicationController
|
class AdministrateursController < Manager::ApplicationController
|
||||||
def create
|
def create
|
||||||
administrateur = current_administration.invite_admin(create_administrateur_params[:email])
|
administrateur = current_super_admin.invite_admin(create_administrateur_params[:email])
|
||||||
|
|
||||||
if administrateur.errors.empty?
|
if administrateur.errors.empty?
|
||||||
flash.notice = "Administrateur créé"
|
flash.notice = "Administrateur créé"
|
||||||
|
@ -14,7 +14,7 @@ module Manager
|
||||||
end
|
end
|
||||||
|
|
||||||
def reinvite
|
def reinvite
|
||||||
Administrateur.find_inactive_by_id(params[:id]).user.invite_administrateur!(current_administration.id)
|
Administrateur.find_inactive_by_id(params[:id]).user.invite_administrateur!(current_super_admin.id)
|
||||||
flash.notice = "Invitation renvoyée"
|
flash.notice = "Invitation renvoyée"
|
||||||
redirect_to manager_administrateur_path(params[:id])
|
redirect_to manager_administrateur_path(params[:id])
|
||||||
end
|
end
|
||||||
|
@ -24,7 +24,7 @@ module Manager
|
||||||
|
|
||||||
administrateur.delete_and_transfer_services
|
administrateur.delete_and_transfer_services
|
||||||
|
|
||||||
logger.info("L'administrateur #{administrateur.id} est supprimé par #{current_administration.id}")
|
logger.info("L'administrateur #{administrateur.id} est supprimé par #{current_super_admin.id}")
|
||||||
flash[:notice] = "L'administrateur #{administrateur.id} est supprimé"
|
flash[:notice] = "L'administrateur #{administrateur.id} est supprimé"
|
||||||
|
|
||||||
redirect_to manager_administrateurs_path
|
redirect_to manager_administrateurs_path
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
module Manager
|
module Manager
|
||||||
class ApplicationController < Administrate::ApplicationController
|
class ApplicationController < Administrate::ApplicationController
|
||||||
before_action :authenticate_administration!
|
before_action :authenticate_super_admin!
|
||||||
before_action :default_params
|
before_action :default_params
|
||||||
|
|
||||||
def default_params
|
def default_params
|
||||||
|
@ -12,13 +12,13 @@ module Manager
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
|
||||||
def authenticate_administration!
|
def authenticate_super_admin!
|
||||||
if administration_signed_in? && current_administration.otp_required_for_login?
|
if super_admin_signed_in? && current_super_admin.otp_required_for_login?
|
||||||
super
|
super
|
||||||
elsif administration_signed_in?
|
elsif super_admin_signed_in?
|
||||||
redirect_to edit_administration_otp_path
|
redirect_to edit_super_admin_otp_path
|
||||||
else
|
else
|
||||||
redirect_to new_administration_session_path
|
redirect_to new_super_admin_session_path
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -5,12 +5,12 @@ module Manager
|
||||||
end
|
end
|
||||||
|
|
||||||
def create_administrateur
|
def create_administrateur
|
||||||
administrateur = current_administration.invite_admin(create_administrateur_params[:email])
|
administrateur = current_super_admin.invite_admin(create_administrateur_params[:email])
|
||||||
|
|
||||||
if administrateur.errors.empty?
|
if administrateur.errors.empty?
|
||||||
PipedriveAcceptsDealsJob.perform_later(
|
PipedriveAcceptsDealsJob.perform_later(
|
||||||
create_administrateur_params[:person_id],
|
create_administrateur_params[:person_id],
|
||||||
current_administration.id,
|
current_super_admin.id,
|
||||||
create_administrateur_params[:stage_id]
|
create_administrateur_params[:stage_id]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ module Manager
|
||||||
def refuse_administrateur
|
def refuse_administrateur
|
||||||
PipedriveRefusesDealsJob.perform_later(
|
PipedriveRefusesDealsJob.perform_later(
|
||||||
refuse_administrateur_params[:person_id],
|
refuse_administrateur_params[:person_id],
|
||||||
current_administration.id
|
current_super_admin.id
|
||||||
)
|
)
|
||||||
|
|
||||||
AdministrationMailer
|
AdministrationMailer
|
||||||
|
|
|
@ -22,9 +22,9 @@ module Manager
|
||||||
|
|
||||||
def discard
|
def discard
|
||||||
dossier = Dossier.find(params[:id])
|
dossier = Dossier.find(params[:id])
|
||||||
dossier.discard_and_keep_track!(current_administration, :manager_request)
|
dossier.discard_and_keep_track!(current_super_admin, :manager_request)
|
||||||
|
|
||||||
logger.info("Le dossier #{dossier.id} est supprimé par #{current_administration.email}")
|
logger.info("Le dossier #{dossier.id} est supprimé par #{current_super_admin.email}")
|
||||||
flash[:notice] = "Le dossier #{dossier.id} a été supprimé."
|
flash[:notice] = "Le dossier #{dossier.id} a été supprimé."
|
||||||
|
|
||||||
redirect_to manager_dossier_path(dossier)
|
redirect_to manager_dossier_path(dossier)
|
||||||
|
@ -32,7 +32,7 @@ module Manager
|
||||||
|
|
||||||
def restore
|
def restore
|
||||||
dossier = Dossier.with_discarded.find(params[:id])
|
dossier = Dossier.with_discarded.find(params[:id])
|
||||||
dossier.restore(current_administration)
|
dossier.restore(current_super_admin)
|
||||||
|
|
||||||
flash[:notice] = "Le dossier #{dossier.id} a été restauré."
|
flash[:notice] = "Le dossier #{dossier.id} a été restauré."
|
||||||
|
|
||||||
|
@ -41,9 +41,9 @@ module Manager
|
||||||
|
|
||||||
def repasser_en_instruction
|
def repasser_en_instruction
|
||||||
dossier = Dossier.find(params[:id])
|
dossier = Dossier.find(params[:id])
|
||||||
dossier.repasser_en_instruction(current_administration)
|
dossier.repasser_en_instruction(current_super_admin)
|
||||||
|
|
||||||
logger.info("Le dossier #{dossier.id} est repassé en instruction par #{current_administration.email}")
|
logger.info("Le dossier #{dossier.id} est repassé en instruction par #{current_super_admin.email}")
|
||||||
flash[:notice] = "Le dossier #{dossier.id} est repassé en instruction."
|
flash[:notice] = "Le dossier #{dossier.id} est repassé en instruction."
|
||||||
|
|
||||||
redirect_to manager_dossier_path(dossier)
|
redirect_to manager_dossier_path(dossier)
|
||||||
|
|
|
@ -15,7 +15,7 @@ module Manager
|
||||||
end
|
end
|
||||||
instructeur.destroy!
|
instructeur.destroy!
|
||||||
|
|
||||||
logger.info("L'instructeur #{instructeur.id} est supprimé par #{current_administration.id}")
|
logger.info("L'instructeur #{instructeur.id} est supprimé par #{current_super_admin.id}")
|
||||||
flash[:notice] = "L'instructeur #{instructeur.id} est supprimé"
|
flash[:notice] = "L'instructeur #{instructeur.id} est supprimé"
|
||||||
|
|
||||||
redirect_to manager_instructeurs_path
|
redirect_to manager_instructeurs_path
|
||||||
|
|
|
@ -23,16 +23,16 @@ module Manager
|
||||||
end
|
end
|
||||||
|
|
||||||
def discard
|
def discard
|
||||||
procedure.discard_and_keep_track!(current_administration)
|
procedure.discard_and_keep_track!(current_super_admin)
|
||||||
|
|
||||||
logger.info("La démarche #{procedure.id} est supprimée par #{current_administration.email}")
|
logger.info("La démarche #{procedure.id} est supprimée par #{current_super_admin.email}")
|
||||||
flash[:notice] = "La démarche #{procedure.id} a été supprimée."
|
flash[:notice] = "La démarche #{procedure.id} a été supprimée."
|
||||||
|
|
||||||
redirect_to manager_procedure_path(procedure)
|
redirect_to manager_procedure_path(procedure)
|
||||||
end
|
end
|
||||||
|
|
||||||
def restore
|
def restore
|
||||||
procedure.restore(current_administration)
|
procedure.restore(current_super_admin)
|
||||||
|
|
||||||
flash[:notice] = "La démarche #{procedure.id} a été restauré."
|
flash[:notice] = "La démarche #{procedure.id} a été restauré."
|
||||||
|
|
||||||
|
|
|
@ -39,9 +39,9 @@ module Manager
|
||||||
if !user.can_be_deleted?
|
if !user.can_be_deleted?
|
||||||
fail "Impossible de supprimer cet utilisateur. Il a des dossiers en instruction ou il est administrateur."
|
fail "Impossible de supprimer cet utilisateur. Il a des dossiers en instruction ou il est administrateur."
|
||||||
end
|
end
|
||||||
user.delete_and_keep_track_dossiers(current_administration)
|
user.delete_and_keep_track_dossiers(current_super_admin)
|
||||||
|
|
||||||
logger.info("L'utilisateur #{user.id} est supprimé par #{current_administration.id}")
|
logger.info("L'utilisateur #{user.id} est supprimé par #{current_super_admin.id}")
|
||||||
flash[:notice] = "L'utilisateur #{user.id} est supprimé"
|
flash[:notice] = "L'utilisateur #{user.id} est supprimé"
|
||||||
|
|
||||||
redirect_to manager_users_path
|
redirect_to manager_users_path
|
||||||
|
|
|
@ -8,7 +8,7 @@ class RootController < ApplicationController
|
||||||
return redirect_to instructeur_procedures_path
|
return redirect_to instructeur_procedures_path
|
||||||
elsif user_signed_in?
|
elsif user_signed_in?
|
||||||
return redirect_to dossiers_path
|
return redirect_to dossiers_path
|
||||||
elsif administration_signed_in?
|
elsif super_admin_signed_in?
|
||||||
return redirect_to manager_root_path
|
return redirect_to manager_root_path
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
class StatsController < ApplicationController
|
class StatsController < ApplicationController
|
||||||
before_action :authenticate_administration!, only: [:download]
|
before_action :authenticate_super_admin!, only: [:download]
|
||||||
|
|
||||||
MEAN_NUMBER_OF_CHAMPS_IN_A_FORM = 24.0
|
MEAN_NUMBER_OF_CHAMPS_IN_A_FORM = 24.0
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@ class StatsController < ApplicationController
|
||||||
@dossiers_cumulative = stat.dossiers_cumulative
|
@dossiers_cumulative = stat.dossiers_cumulative
|
||||||
@dossiers_in_the_last_4_months = stat.dossiers_in_the_last_4_months
|
@dossiers_in_the_last_4_months = stat.dossiers_in_the_last_4_months
|
||||||
|
|
||||||
if administration_signed_in?
|
if super_admin_signed_in?
|
||||||
@dossier_instruction_mean_time = Rails.cache.fetch("dossier_instruction_mean_time", expires_in: 1.day) do
|
@dossier_instruction_mean_time = Rails.cache.fetch("dossier_instruction_mean_time", expires_in: 1.day) do
|
||||||
dossier_instruction_mean_time(dossiers)
|
dossier_instruction_mean_time(dossiers)
|
||||||
end
|
end
|
||||||
|
@ -201,7 +201,7 @@ class StatsController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def max_date
|
def max_date
|
||||||
if administration_signed_in?
|
if super_admin_signed_in?
|
||||||
Time.zone.now
|
Time.zone.now
|
||||||
else
|
else
|
||||||
Time.zone.now.beginning_of_month - 1.second
|
Time.zone.now.beginning_of_month - 1.second
|
||||||
|
|
28
app/controllers/super_admins_controller.rb
Normal file
28
app/controllers/super_admins_controller.rb
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
class SuperAdminsController < ApplicationController
|
||||||
|
before_action :authenticate_super_admin!
|
||||||
|
|
||||||
|
def edit_otp
|
||||||
|
end
|
||||||
|
|
||||||
|
def enable_otp
|
||||||
|
current_super_admin.enable_otp!
|
||||||
|
@qrcode = generate_qr_code
|
||||||
|
sign_out :super_admin
|
||||||
|
end
|
||||||
|
|
||||||
|
protected
|
||||||
|
|
||||||
|
def authenticate_super_admin!
|
||||||
|
if !super_admin_signed_in?
|
||||||
|
redirect_to root_path
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def generate_qr_code
|
||||||
|
issuer = 'DSManager'
|
||||||
|
label = "#{issuer}:#{current_super_admin.email}"
|
||||||
|
RQRCode::QRCode.new(current_super_admin.otp_provisioning_uri(label, issuer: issuer))
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,6 +1,6 @@
|
||||||
# == Schema Information
|
# == Schema Information
|
||||||
#
|
#
|
||||||
# Table name: administrations
|
# Table name: super_admins
|
||||||
#
|
#
|
||||||
# id :integer not null, primary key
|
# id :integer not null, primary key
|
||||||
# consumed_timestep :integer
|
# consumed_timestep :integer
|
||||||
|
@ -24,12 +24,12 @@
|
||||||
# created_at :datetime
|
# created_at :datetime
|
||||||
# updated_at :datetime
|
# updated_at :datetime
|
||||||
#
|
#
|
||||||
class Administration < ApplicationRecord
|
class SuperAdmin < ApplicationRecord
|
||||||
devise :rememberable, :trackable, :validatable, :lockable, :async, :recoverable,
|
devise :rememberable, :trackable, :validatable, :lockable, :async, :recoverable,
|
||||||
:two_factor_authenticatable, :otp_secret_encryption_key => Rails.application.secrets.otp_secret_key
|
:two_factor_authenticatable, :otp_secret_encryption_key => Rails.application.secrets.otp_secret_key
|
||||||
|
|
||||||
def enable_otp!
|
def enable_otp!
|
||||||
self.otp_secret = Administration.generate_otp_secret
|
self.otp_secret = SuperAdmin.generate_otp_secret
|
||||||
self.otp_required_for_login = true
|
self.otp_required_for_login = true
|
||||||
save!
|
save!
|
||||||
end
|
end
|
|
@ -9,7 +9,7 @@ class OperationAuthorSerializer < ActiveModel::Serializer
|
||||||
"Instructeur##{object.id}"
|
"Instructeur##{object.id}"
|
||||||
when Administrateur
|
when Administrateur
|
||||||
"Administrateur##{object.id}"
|
"Administrateur##{object.id}"
|
||||||
when Administration
|
when SuperAdmin
|
||||||
"Manager##{object.id}"
|
"Manager##{object.id}"
|
||||||
else
|
else
|
||||||
nil
|
nil
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
%li
|
%li
|
||||||
.menu-item{ title: current_email }
|
.menu-item{ title: current_email }
|
||||||
= current_email
|
= current_email
|
||||||
- if administration_signed_in?
|
- if super_admin_signed_in?
|
||||||
%li
|
%li
|
||||||
= link_to manager_root_path, class: "menu-item menu-link" do
|
= link_to manager_root_path, class: "menu-item menu-link" do
|
||||||
= image_tag "icons/super-admin.svg", alt: ''
|
= image_tag "icons/super-admin.svg", alt: ''
|
||||||
|
|
|
@ -8,7 +8,7 @@ as defined by the routes in the `admin/` namespace
|
||||||
%>
|
%>
|
||||||
|
|
||||||
<nav class="navigation" role="navigation">
|
<nav class="navigation" role="navigation">
|
||||||
<%= link_to "Se déconnecter", destroy_administration_session_path, method: :delete, class: "navigation__link" %>
|
<%= link_to "Se déconnecter", destroy_super_admin_session_path, method: :delete, class: "navigation__link" %>
|
||||||
|
|
||||||
<hr />
|
<hr />
|
||||||
|
|
||||||
|
|
|
@ -88,7 +88,7 @@
|
||||||
.chart.cumulative-dossiers-chart.hidden
|
.chart.cumulative-dossiers-chart.hidden
|
||||||
= area_chart @dossiers_cumulative
|
= area_chart @dossiers_cumulative
|
||||||
|
|
||||||
- if administration_signed_in?
|
- if super_admin_signed_in?
|
||||||
.stat-card.stat-card-half.pull-left
|
.stat-card.stat-card-half.pull-left
|
||||||
%span.stat-card-title Temps de traitement moyen d'un dossier
|
%span.stat-card-title Temps de traitement moyen d'un dossier
|
||||||
|
|
||||||
|
@ -107,7 +107,7 @@
|
||||||
|
|
||||||
.clearfix
|
.clearfix
|
||||||
|
|
||||||
- if administration_signed_in?
|
- if super_admin_signed_in?
|
||||||
%h2.new-h2 Téléchargement
|
%h2.new-h2 Téléchargement
|
||||||
|
|
||||||
= link_to "Télécharger les statistiques (CSV)", stats_download_path(format: :csv), class: 'button secondary'
|
= link_to "Télécharger les statistiques (CSV)", stats_download_path(format: :csv), class: 'button secondary'
|
||||||
|
|
|
@ -75,13 +75,13 @@ Rails.application.routes.draw do
|
||||||
# Authentication
|
# Authentication
|
||||||
#
|
#
|
||||||
|
|
||||||
devise_for :administrations, skip: [:registrations], controllers: {
|
devise_for :super_admins, skip: [:registrations], controllers: {
|
||||||
sessions: 'administrations/sessions',
|
sessions: 'super_admins/sessions',
|
||||||
passwords: 'administrations/passwords'
|
passwords: 'super_admins/passwords'
|
||||||
}
|
}
|
||||||
|
|
||||||
get 'administrations/edit_otp', to: 'administrations#edit_otp', as: 'edit_administration_otp'
|
get 'super_admins/edit_otp', to: 'super_admins#edit_otp', as: 'edit_super_admin_otp'
|
||||||
put 'administrations/enable_otp', to: 'administrations#enable_otp', as: 'enable_administration_otp'
|
put 'super_admins/enable_otp', to: 'super_admins#enable_otp', as: 'enable_super_admin_otp'
|
||||||
|
|
||||||
devise_for :users, controllers: {
|
devise_for :users, controllers: {
|
||||||
sessions: 'users/sessions',
|
sessions: 'users/sessions',
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
class RenameAdministrationsToSuperAdmins < ActiveRecord::Migration[6.0]
|
||||||
|
def change
|
||||||
|
rename_table :administrations, :super_admins
|
||||||
|
end
|
||||||
|
end
|
54
db/schema.rb
54
db/schema.rb
|
@ -10,7 +10,7 @@
|
||||||
#
|
#
|
||||||
# It's strongly recommended that you check this file into your version control system.
|
# It's strongly recommended that you check this file into your version control system.
|
||||||
|
|
||||||
ActiveRecord::Schema.define(version: 2020_11_03_165913) do
|
ActiveRecord::Schema.define(version: 2020_11_05_131443) do
|
||||||
|
|
||||||
# These are extensions that must be enabled in order to support this database
|
# These are extensions that must be enabled in order to support this database
|
||||||
enable_extension "plpgsql"
|
enable_extension "plpgsql"
|
||||||
|
@ -74,32 +74,6 @@ ActiveRecord::Schema.define(version: 2020_11_03_165913) do
|
||||||
t.index ["procedure_id"], name: "index_administrateurs_procedures_on_procedure_id"
|
t.index ["procedure_id"], name: "index_administrateurs_procedures_on_procedure_id"
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "administrations", id: :serial, force: :cascade do |t|
|
|
||||||
t.string "email", default: "", null: false
|
|
||||||
t.string "encrypted_password", default: "", null: false
|
|
||||||
t.string "reset_password_token"
|
|
||||||
t.datetime "reset_password_sent_at"
|
|
||||||
t.datetime "remember_created_at"
|
|
||||||
t.integer "sign_in_count", default: 0, null: false
|
|
||||||
t.datetime "current_sign_in_at"
|
|
||||||
t.datetime "last_sign_in_at"
|
|
||||||
t.string "current_sign_in_ip"
|
|
||||||
t.string "last_sign_in_ip"
|
|
||||||
t.datetime "created_at"
|
|
||||||
t.datetime "updated_at"
|
|
||||||
t.integer "failed_attempts", default: 0, null: false
|
|
||||||
t.string "unlock_token"
|
|
||||||
t.datetime "locked_at"
|
|
||||||
t.string "encrypted_otp_secret"
|
|
||||||
t.string "encrypted_otp_secret_iv"
|
|
||||||
t.string "encrypted_otp_secret_salt"
|
|
||||||
t.integer "consumed_timestep"
|
|
||||||
t.boolean "otp_required_for_login"
|
|
||||||
t.index ["email"], name: "index_administrations_on_email", unique: true
|
|
||||||
t.index ["reset_password_token"], name: "index_administrations_on_reset_password_token", unique: true
|
|
||||||
t.index ["unlock_token"], name: "index_administrations_on_unlock_token", unique: true
|
|
||||||
end
|
|
||||||
|
|
||||||
create_table "assign_tos", id: :serial, force: :cascade do |t|
|
create_table "assign_tos", id: :serial, force: :cascade do |t|
|
||||||
t.integer "instructeur_id"
|
t.integer "instructeur_id"
|
||||||
t.integer "procedure_id"
|
t.integer "procedure_id"
|
||||||
|
@ -606,6 +580,32 @@ ActiveRecord::Schema.define(version: 2020_11_03_165913) do
|
||||||
t.datetime "updated_at", precision: 6, null: false
|
t.datetime "updated_at", precision: 6, null: false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
create_table "super_admins", id: :serial, force: :cascade do |t|
|
||||||
|
t.string "email", default: "", null: false
|
||||||
|
t.string "encrypted_password", default: "", null: false
|
||||||
|
t.string "reset_password_token"
|
||||||
|
t.datetime "reset_password_sent_at"
|
||||||
|
t.datetime "remember_created_at"
|
||||||
|
t.integer "sign_in_count", default: 0, null: false
|
||||||
|
t.datetime "current_sign_in_at"
|
||||||
|
t.datetime "last_sign_in_at"
|
||||||
|
t.string "current_sign_in_ip"
|
||||||
|
t.string "last_sign_in_ip"
|
||||||
|
t.datetime "created_at"
|
||||||
|
t.datetime "updated_at"
|
||||||
|
t.integer "failed_attempts", default: 0, null: false
|
||||||
|
t.string "unlock_token"
|
||||||
|
t.datetime "locked_at"
|
||||||
|
t.string "encrypted_otp_secret"
|
||||||
|
t.string "encrypted_otp_secret_iv"
|
||||||
|
t.string "encrypted_otp_secret_salt"
|
||||||
|
t.integer "consumed_timestep"
|
||||||
|
t.boolean "otp_required_for_login"
|
||||||
|
t.index ["email"], name: "index_super_admins_on_email", unique: true
|
||||||
|
t.index ["reset_password_token"], name: "index_super_admins_on_reset_password_token", unique: true
|
||||||
|
t.index ["unlock_token"], name: "index_super_admins_on_unlock_token", unique: true
|
||||||
|
end
|
||||||
|
|
||||||
create_table "task_records", id: false, force: :cascade do |t|
|
create_table "task_records", id: false, force: :cascade do |t|
|
||||||
t.string "version", null: false
|
t.string "version", null: false
|
||||||
end
|
end
|
||||||
|
|
|
@ -15,7 +15,7 @@ describe ApplicationController, type: :controller do
|
||||||
let(:current_user) { nil }
|
let(:current_user) { nil }
|
||||||
let(:current_instructeur) { nil }
|
let(:current_instructeur) { nil }
|
||||||
let(:current_administrateur) { nil }
|
let(:current_administrateur) { nil }
|
||||||
let(:current_administration) { nil }
|
let(:current_super_admin) { nil }
|
||||||
let(:payload) { {} }
|
let(:payload) { {} }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
|
@ -23,7 +23,7 @@ describe ApplicationController, type: :controller do
|
||||||
allow(@controller).to receive(:current_user).and_return(current_user)
|
allow(@controller).to receive(:current_user).and_return(current_user)
|
||||||
expect(@controller).to receive(:current_instructeur).and_return(current_instructeur)
|
expect(@controller).to receive(:current_instructeur).and_return(current_instructeur)
|
||||||
expect(@controller).to receive(:current_administrateur).and_return(current_administrateur)
|
expect(@controller).to receive(:current_administrateur).and_return(current_administrateur)
|
||||||
expect(@controller).to receive(:current_administration).and_return(current_administration)
|
expect(@controller).to receive(:current_super_admin).and_return(current_super_admin)
|
||||||
allow(Raven).to receive(:user_context)
|
allow(Raven).to receive(:user_context)
|
||||||
|
|
||||||
@controller.send(:set_raven_context)
|
@controller.send(:set_raven_context)
|
||||||
|
@ -72,11 +72,11 @@ describe ApplicationController, type: :controller do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when someone is logged as a user, instructeur, administrateur and administration' do
|
context 'when someone is logged as a user, instructeur, administrateur and super_admin' do
|
||||||
let(:current_user) { create(:user) }
|
let(:current_user) { create(:user) }
|
||||||
let(:current_instructeur) { create(:instructeur) }
|
let(:current_instructeur) { create(:instructeur) }
|
||||||
let(:current_administrateur) { create(:administrateur) }
|
let(:current_administrateur) { create(:administrateur) }
|
||||||
let(:current_administration) { create(:administration) }
|
let(:current_super_admin) { create(:super_admin) }
|
||||||
|
|
||||||
it do
|
it do
|
||||||
expect(Raven).to have_received(:user_context)
|
expect(Raven).to have_received(:user_context)
|
||||||
|
@ -93,7 +93,7 @@ describe ApplicationController, type: :controller do
|
||||||
user_agent: 'Rails Testing',
|
user_agent: 'Rails Testing',
|
||||||
user_id: current_user.id,
|
user_id: current_user.id,
|
||||||
user_email: current_user.email,
|
user_email: current_user.email,
|
||||||
user_roles: 'User, Instructeur, Administrateur, Administration'
|
user_roles: 'User, Instructeur, Administrateur, SuperAdmin'
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -109,7 +109,7 @@ describe ApplicationController, type: :controller do
|
||||||
@request.path_info = path_info
|
@request.path_info = path_info
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when no administration is logged in' do
|
context 'when no super_admin is logged in' do
|
||||||
before { @controller.send(:reject) }
|
before { @controller.send(:reject) }
|
||||||
|
|
||||||
it { expect(@controller).to have_received(:sign_out).with(:user) }
|
it { expect(@controller).to have_received(:sign_out).with(:user) }
|
||||||
|
@ -119,7 +119,7 @@ describe ApplicationController, type: :controller do
|
||||||
it { expect(@controller).to have_received(:redirect_to).with(root_path) }
|
it { expect(@controller).to have_received(:redirect_to).with(root_path) }
|
||||||
|
|
||||||
context 'when the path is safe' do
|
context 'when the path is safe' do
|
||||||
['/', '/manager', '/administrations'].each do |path|
|
['/', '/manager', '/super_admins'].each do |path|
|
||||||
let(:path_info) { path }
|
let(:path_info) { path }
|
||||||
|
|
||||||
it { expect(@controller).not_to have_received(:sign_out) }
|
it { expect(@controller).not_to have_received(:sign_out) }
|
||||||
|
@ -138,11 +138,11 @@ describe ApplicationController, type: :controller do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when a administration is logged in' do
|
context 'when a super_admin is logged in' do
|
||||||
let(:current_administration) { create(:administration) }
|
let(:current_super_admin) { create(:super_admin) }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
sign_in(current_administration)
|
sign_in(current_super_admin)
|
||||||
@controller.send(:reject)
|
@controller.send(:reject)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,22 +1,22 @@
|
||||||
describe Manager::AdministrateursController, type: :controller do
|
describe Manager::AdministrateursController, type: :controller do
|
||||||
let(:administration) { create(:administration) }
|
let(:super_admin) { create(:super_admin) }
|
||||||
let(:administrateur) { create(:administrateur) }
|
let(:administrateur) { create(:administrateur) }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
sign_in administration
|
sign_in super_admin
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#show' do
|
describe '#show' do
|
||||||
let(:subject) { get :show, params: { id: administrateur.id } }
|
let(:subject) { get :show, params: { id: administrateur.id } }
|
||||||
|
|
||||||
context 'with 2FA not enabled' do
|
context 'with 2FA not enabled' do
|
||||||
let(:administration) { create(:administration, otp_required_for_login: false) }
|
let(:super_admin) { create(:super_admin, otp_required_for_login: false) }
|
||||||
it { expect(subject).to redirect_to(edit_administration_otp_path) }
|
it { expect(subject).to redirect_to(edit_super_admin_otp_path) }
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'with 2FA enabled' do
|
context 'with 2FA enabled' do
|
||||||
render_views
|
render_views
|
||||||
let(:administration) { create(:administration, otp_required_for_login: true) }
|
let(:super_admin) { create(:super_admin, otp_required_for_login: true) }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
subject
|
subject
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
describe Manager::ApplicationController, type: :controller do
|
describe Manager::ApplicationController, type: :controller do
|
||||||
describe 'append_info_to_payload' do
|
describe 'append_info_to_payload' do
|
||||||
let(:current_user) { create(:administration) }
|
let(:current_user) { create(:super_admin) }
|
||||||
let(:payload) { {} }
|
let(:payload) { {} }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
describe Manager::DemandesController, type: :controller do
|
describe Manager::DemandesController, type: :controller do
|
||||||
let(:administration) { create(:administration) }
|
let(:super_admin) { create(:super_admin) }
|
||||||
|
|
||||||
describe 'GET #index' do
|
describe 'GET #index' do
|
||||||
before do
|
before do
|
||||||
sign_in administration
|
sign_in super_admin
|
||||||
end
|
end
|
||||||
|
|
||||||
it "display pending demandes" do
|
it "display pending demandes" do
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
describe Manager::DossiersController, type: :controller do
|
describe Manager::DossiersController, type: :controller do
|
||||||
let(:administration) { create :administration }
|
let(:super_admin) { create :super_admin }
|
||||||
let(:deleted_dossier) { DeletedDossier.find_by(dossier_id: dossier) }
|
let(:deleted_dossier) { DeletedDossier.find_by(dossier_id: dossier) }
|
||||||
let(:operations) { dossier.dossier_operation_logs.map(&:operation).map(&:to_sym) }
|
let(:operations) { dossier.dossier_operation_logs.map(&:operation).map(&:to_sym) }
|
||||||
|
|
||||||
before { sign_in administration }
|
before { sign_in super_admin }
|
||||||
|
|
||||||
describe '#discard' do
|
describe '#discard' do
|
||||||
let(:dossier) { create(:dossier, :en_construction) }
|
let(:dossier) { create(:dossier, :en_construction) }
|
||||||
|
@ -23,7 +23,7 @@ describe Manager::DossiersController, type: :controller do
|
||||||
let(:dossier) { create(:dossier, :en_construction) }
|
let(:dossier) { create(:dossier, :en_construction) }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
dossier.discard_and_keep_track!(administration, :manager_request)
|
dossier.discard_and_keep_track!(super_admin, :manager_request)
|
||||||
|
|
||||||
post :restore, params: { id: dossier.id }
|
post :restore, params: { id: dossier.id }
|
||||||
dossier.reload
|
dossier.reload
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
describe Manager::InstructeursController, type: :controller do
|
describe Manager::InstructeursController, type: :controller do
|
||||||
let(:administration) { create(:administration) }
|
let(:super_admin) { create(:super_admin) }
|
||||||
let(:instructeur) { create(:instructeur) }
|
let(:instructeur) { create(:instructeur) }
|
||||||
|
|
||||||
describe '#show' do
|
describe '#show' do
|
||||||
render_views
|
render_views
|
||||||
|
|
||||||
before do
|
before do
|
||||||
sign_in(administration)
|
sign_in(super_admin)
|
||||||
get :show, params: { id: instructeur.id }
|
get :show, params: { id: instructeur.id }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@ describe Manager::InstructeursController, type: :controller do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#delete' do
|
describe '#delete' do
|
||||||
before { sign_in administration }
|
before { sign_in super_admin }
|
||||||
|
|
||||||
subject { delete :delete, params: { id: instructeur.id } }
|
subject { delete :delete, params: { id: instructeur.id } }
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
describe Manager::ProceduresController, type: :controller do
|
describe Manager::ProceduresController, type: :controller do
|
||||||
let(:administration) { create :administration }
|
let(:super_admin) { create :super_admin }
|
||||||
|
|
||||||
before { sign_in administration }
|
before { sign_in super_admin }
|
||||||
|
|
||||||
describe '#whitelist' do
|
describe '#whitelist' do
|
||||||
let(:procedure) { create(:procedure) }
|
let(:procedure) { create(:procedure) }
|
||||||
|
@ -52,7 +52,7 @@ describe Manager::ProceduresController, type: :controller do
|
||||||
let(:operations) { dossier.dossier_operation_logs.map(&:operation).map(&:to_sym) }
|
let(:operations) { dossier.dossier_operation_logs.map(&:operation).map(&:to_sym) }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
procedure.discard_and_keep_track!(administration)
|
procedure.discard_and_keep_track!(super_admin)
|
||||||
|
|
||||||
post :restore, params: { id: procedure.id }
|
post :restore, params: { id: procedure.id }
|
||||||
procedure.reload
|
procedure.reload
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
describe Manager::UsersController, type: :controller do
|
describe Manager::UsersController, type: :controller do
|
||||||
let(:administration) { create(:administration) }
|
let(:super_admin) { create(:super_admin) }
|
||||||
|
|
||||||
describe '#show' do
|
describe '#show' do
|
||||||
render_views
|
render_views
|
||||||
|
|
||||||
let(:administration) { create(:administration) }
|
let(:super_admin) { create(:super_admin) }
|
||||||
let(:user) { create(:user) }
|
let(:user) { create(:user) }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
sign_in(administration)
|
sign_in(super_admin)
|
||||||
get :show, params: { id: user.id }
|
get :show, params: { id: user.id }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ describe Manager::UsersController, type: :controller do
|
||||||
let!(:user) { create(:user, email: 'ancien.email@domaine.fr') }
|
let!(:user) { create(:user, email: 'ancien.email@domaine.fr') }
|
||||||
|
|
||||||
before {
|
before {
|
||||||
sign_in administration
|
sign_in super_admin
|
||||||
}
|
}
|
||||||
subject { patch :update, params: { id: user.id, user: { email: nouvel_email } } }
|
subject { patch :update, params: { id: user.id, user: { email: nouvel_email } } }
|
||||||
|
|
||||||
|
@ -48,7 +48,7 @@ describe Manager::UsersController, type: :controller do
|
||||||
describe '#delete' do
|
describe '#delete' do
|
||||||
let!(:user) { create(:user) }
|
let!(:user) { create(:user) }
|
||||||
|
|
||||||
before { sign_in administration }
|
before { sign_in super_admin }
|
||||||
|
|
||||||
subject { delete :delete, params: { id: user.id } }
|
subject { delete :delete, params: { id: user.id } }
|
||||||
|
|
||||||
|
|
|
@ -32,7 +32,7 @@ describe RootController, type: :controller do
|
||||||
|
|
||||||
context 'when Administration is connected' do
|
context 'when Administration is connected' do
|
||||||
before do
|
before do
|
||||||
sign_in create(:administration)
|
sign_in create(:super_admin)
|
||||||
end
|
end
|
||||||
|
|
||||||
it { expect(subject).to redirect_to(manager_root_path) }
|
it { expect(subject).to redirect_to(manager_root_path) }
|
||||||
|
|
|
@ -9,7 +9,7 @@ describe StatsController, type: :controller do
|
||||||
create(:procedure, created_at: 2.months.ago, updated_at: Time.zone.now)
|
create(:procedure, created_at: 2.months.ago, updated_at: Time.zone.now)
|
||||||
@controller = StatsController.new
|
@controller = StatsController.new
|
||||||
|
|
||||||
allow(@controller).to receive(:administration_signed_in?).and_return(false)
|
allow(@controller).to receive(:super_admin_signed_in?).and_return(false)
|
||||||
end
|
end
|
||||||
|
|
||||||
let(:association) { Procedure.all }
|
let(:association) { Procedure.all }
|
||||||
|
@ -33,7 +33,7 @@ describe StatsController, type: :controller do
|
||||||
|
|
||||||
@controller = StatsController.new
|
@controller = StatsController.new
|
||||||
|
|
||||||
allow(@controller).to receive(:administration_signed_in?).and_return(true)
|
allow(@controller).to receive(:super_admin_signed_in?).and_return(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
let (:association) { Procedure.all }
|
let (:association) { Procedure.all }
|
||||||
|
@ -64,7 +64,7 @@ describe StatsController, type: :controller do
|
||||||
let (:association) { Procedure.all }
|
let (:association) { Procedure.all }
|
||||||
|
|
||||||
context "while a super admin is logged in" do
|
context "while a super admin is logged in" do
|
||||||
before { allow(@controller).to receive(:administration_signed_in?).and_return(true) }
|
before { allow(@controller).to receive(:super_admin_signed_in?).and_return(true) }
|
||||||
|
|
||||||
subject { @controller.send(:cumulative_hash, association, :updated_at) }
|
subject { @controller.send(:cumulative_hash, association, :updated_at) }
|
||||||
|
|
||||||
|
@ -78,7 +78,7 @@ describe StatsController, type: :controller do
|
||||||
end
|
end
|
||||||
|
|
||||||
context "while a super admin is not logged in" do
|
context "while a super admin is not logged in" do
|
||||||
before { allow(@controller).to receive(:administration_signed_in?).and_return(false) }
|
before { allow(@controller).to receive(:super_admin_signed_in?).and_return(false) }
|
||||||
|
|
||||||
subject { @controller.send(:cumulative_hash, association, :updated_at) }
|
subject { @controller.send(:cumulative_hash, association, :updated_at) }
|
||||||
|
|
||||||
|
|
|
@ -1,8 +0,0 @@
|
||||||
FactoryBot.define do
|
|
||||||
sequence(:administration_email) { |n| "plop#{n}@plop.com" }
|
|
||||||
factory :administration do
|
|
||||||
email { generate(:administration_email) }
|
|
||||||
password { 'my-s3cure-p4ssword' }
|
|
||||||
otp_required_for_login { true }
|
|
||||||
end
|
|
||||||
end
|
|
8
spec/factories/super_admin.rb
Normal file
8
spec/factories/super_admin.rb
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
FactoryBot.define do
|
||||||
|
sequence(:super_admin_email) { |n| "plop#{n}@plop.com" }
|
||||||
|
factory :super_admin do
|
||||||
|
email { generate(:super_admin_email) }
|
||||||
|
password { 'my-s3cure-p4ssword' }
|
||||||
|
otp_required_for_login { true }
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,11 +1,11 @@
|
||||||
feature 'As an administrateur', js: true do
|
feature 'As an administrateur', js: true do
|
||||||
let(:administration) { create(:administration) }
|
let(:super_admin) { create(:super_admin) }
|
||||||
let(:admin_email) { 'new_admin@gouv.fr' }
|
let(:admin_email) { 'new_admin@gouv.fr' }
|
||||||
let(:new_admin) { Administrateur.by_email(admin_email) }
|
let(:new_admin) { Administrateur.by_email(admin_email) }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
perform_enqueued_jobs do
|
perform_enqueued_jobs do
|
||||||
administration.invite_admin(admin_email)
|
super_admin.invite_admin(admin_email)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1247,7 +1247,7 @@ describe Dossier do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'discarded_brouillon_expired and discarded_en_construction_expired' do
|
describe 'discarded_brouillon_expired and discarded_en_construction_expired' do
|
||||||
let(:administration) { create(:administration) }
|
let(:super_admin) { create(:super_admin) }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
create(:dossier)
|
create(:dossier)
|
||||||
|
@ -1259,8 +1259,8 @@ describe Dossier do
|
||||||
create(:dossier).discard!
|
create(:dossier).discard!
|
||||||
create(:dossier, :en_construction).discard!
|
create(:dossier, :en_construction).discard!
|
||||||
|
|
||||||
create(:dossier).procedure.discard_and_keep_track!(administration)
|
create(:dossier).procedure.discard_and_keep_track!(super_admin)
|
||||||
create(:dossier, :en_construction).procedure.discard_and_keep_track!(administration)
|
create(:dossier, :en_construction).procedure.discard_and_keep_track!(super_admin)
|
||||||
end
|
end
|
||||||
Timecop.travel(1.week.ago) do
|
Timecop.travel(1.week.ago) do
|
||||||
create(:dossier).discard!
|
create(:dossier).discard!
|
||||||
|
|
|
@ -845,7 +845,7 @@ describe Procedure do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "#discard_and_keep_track!" do
|
describe "#discard_and_keep_track!" do
|
||||||
let(:administration) { create(:administration) }
|
let(:super_admin) { create(:super_admin) }
|
||||||
let(:procedure) { create(:procedure) }
|
let(:procedure) { create(:procedure) }
|
||||||
let!(:dossier) { create(:dossier, procedure: procedure) }
|
let!(:dossier) { create(:dossier, procedure: procedure) }
|
||||||
let!(:dossier2) { create(:dossier, procedure: procedure) }
|
let!(:dossier2) { create(:dossier, procedure: procedure) }
|
||||||
|
@ -857,7 +857,7 @@ describe Procedure do
|
||||||
context "when discarding procedure" do
|
context "when discarding procedure" do
|
||||||
before do
|
before do
|
||||||
instructeur.followed_dossiers << dossier
|
instructeur.followed_dossiers << dossier
|
||||||
procedure.discard_and_keep_track!(administration)
|
procedure.discard_and_keep_track!(super_admin)
|
||||||
instructeur.reload
|
instructeur.reload
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
describe Administration, type: :model do
|
describe SuperAdmin, type: :model do
|
||||||
describe '#invite_admin' do
|
describe '#invite_admin' do
|
||||||
let(:administration) { create :administration }
|
let(:super_admin) { create :super_admin }
|
||||||
let(:valid_email) { 'paul@tps.fr' }
|
let(:valid_email) { 'paul@tps.fr' }
|
||||||
|
|
||||||
subject { administration.invite_admin(valid_email) }
|
subject { super_admin.invite_admin(valid_email) }
|
||||||
|
|
||||||
it {
|
it {
|
||||||
user = subject
|
user = subject
|
||||||
|
@ -11,8 +11,8 @@ describe Administration, type: :model do
|
||||||
expect(user).to be_persisted
|
expect(user).to be_persisted
|
||||||
}
|
}
|
||||||
|
|
||||||
it { expect(administration.invite_admin(nil).errors).not_to be_empty }
|
it { expect(super_admin.invite_admin(nil).errors).not_to be_empty }
|
||||||
it { expect(administration.invite_admin('toto').errors).not_to be_empty }
|
it { expect(super_admin.invite_admin('toto').errors).not_to be_empty }
|
||||||
|
|
||||||
it 'creates a corresponding user account for the email' do
|
it 'creates a corresponding user account for the email' do
|
||||||
subject
|
subject
|
||||||
|
@ -36,29 +36,29 @@ describe Administration, type: :model do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'enable_otp!' do
|
describe 'enable_otp!' do
|
||||||
let(:administration) { create(:administration, otp_required_for_login: false) }
|
let(:super_admin) { create(:super_admin, otp_required_for_login: false) }
|
||||||
let(:subject) { administration.enable_otp! }
|
let(:subject) { super_admin.enable_otp! }
|
||||||
|
|
||||||
it 'updates otp_required_for_login' do
|
it 'updates otp_required_for_login' do
|
||||||
expect { subject }.to change { administration.otp_required_for_login? }.from(false).to(true)
|
expect { subject }.to change { super_admin.otp_required_for_login? }.from(false).to(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'updates otp_secret' do
|
it 'updates otp_secret' do
|
||||||
expect { subject }.to change { administration.otp_secret }
|
expect { subject }.to change { super_admin.otp_secret }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'disable_otp!' do
|
describe 'disable_otp!' do
|
||||||
let(:administration) { create(:administration, otp_required_for_login: true) }
|
let(:super_admin) { create(:super_admin, otp_required_for_login: true) }
|
||||||
let(:subject) { administration.disable_otp! }
|
let(:subject) { super_admin.disable_otp! }
|
||||||
|
|
||||||
it 'updates otp_required_for_login' do
|
it 'updates otp_required_for_login' do
|
||||||
expect { subject }.to change { administration.otp_required_for_login? }.from(true).to(false)
|
expect { subject }.to change { super_admin.otp_required_for_login? }.from(true).to(false)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'nullifies otp_secret' do
|
it 'nullifies otp_secret' do
|
||||||
administration.enable_otp!
|
super_admin.enable_otp!
|
||||||
expect { subject }.to change { administration.reload.otp_secret }.to(nil)
|
expect { subject }.to change { super_admin.reload.otp_secret }.to(nil)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
|
@ -164,7 +164,7 @@ describe User, type: :model do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'invite_administrateur!' do
|
describe 'invite_administrateur!' do
|
||||||
let(:administration) { create(:administration) }
|
let(:super_admin) { create(:super_admin) }
|
||||||
let(:administrateur) { create(:administrateur) }
|
let(:administrateur) { create(:administrateur) }
|
||||||
let(:user) { administrateur.user }
|
let(:user) { administrateur.user }
|
||||||
|
|
||||||
|
@ -172,12 +172,12 @@ describe User, type: :model do
|
||||||
|
|
||||||
before { allow(AdministrationMailer).to receive(:invite_admin).and_return(mailer_double) }
|
before { allow(AdministrationMailer).to receive(:invite_admin).and_return(mailer_double) }
|
||||||
|
|
||||||
subject { user.invite_administrateur!(administration.id) }
|
subject { user.invite_administrateur!(super_admin.id) }
|
||||||
|
|
||||||
context 'when the user is inactif' do
|
context 'when the user is inactif' do
|
||||||
before { subject }
|
before { subject }
|
||||||
|
|
||||||
it { expect(AdministrationMailer).to have_received(:invite_admin).with(user, kind_of(String), administration.id) }
|
it { expect(AdministrationMailer).to have_received(:invite_admin).with(user, kind_of(String), super_admin.id) }
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when the user is actif' do
|
context 'when the user is actif' do
|
||||||
|
@ -187,7 +187,7 @@ describe User, type: :model do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'receives an invitation to update its password' do
|
it 'receives an invitation to update its password' do
|
||||||
expect(AdministrationMailer).to have_received(:invite_admin).with(user, kind_of(String), administration.id)
|
expect(AdministrationMailer).to have_received(:invite_admin).with(user, kind_of(String), super_admin.id)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -245,13 +245,13 @@ describe User, type: :model do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#delete_and_keep_track_dossiers' do
|
describe '#delete_and_keep_track_dossiers' do
|
||||||
let(:administration) { create(:administration) }
|
let(:super_admin) { create(:super_admin) }
|
||||||
let(:user) { create(:user) }
|
let(:user) { create(:user) }
|
||||||
|
|
||||||
context 'with a dossier in instruction' do
|
context 'with a dossier in instruction' do
|
||||||
let!(:dossier_en_instruction) { create(:dossier, :en_instruction, user: user) }
|
let!(:dossier_en_instruction) { create(:dossier, :en_instruction, user: user) }
|
||||||
it 'raises' do
|
it 'raises' do
|
||||||
expect { user.delete_and_keep_track_dossiers(administration) }.to raise_error(RuntimeError)
|
expect { user.delete_and_keep_track_dossiers(super_admin) }.to raise_error(RuntimeError)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -261,7 +261,7 @@ describe User, type: :model do
|
||||||
|
|
||||||
context 'without a discarded dossier' do
|
context 'without a discarded dossier' do
|
||||||
it "keep track of dossiers and delete user" do
|
it "keep track of dossiers and delete user" do
|
||||||
user.delete_and_keep_track_dossiers(administration)
|
user.delete_and_keep_track_dossiers(super_admin)
|
||||||
|
|
||||||
expect(DeletedDossier.find_by(dossier_id: dossier_en_construction)).to be_present
|
expect(DeletedDossier.find_by(dossier_id: dossier_en_construction)).to be_present
|
||||||
expect(DeletedDossier.find_by(dossier_id: dossier_brouillon)).to be_nil
|
expect(DeletedDossier.find_by(dossier_id: dossier_brouillon)).to be_nil
|
||||||
|
@ -278,8 +278,8 @@ describe User, type: :model do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "keep track of dossiers and delete user" do
|
it "keep track of dossiers and delete user" do
|
||||||
dossier_cache.discard_and_keep_track!(administration, :user_request)
|
dossier_cache.discard_and_keep_track!(super_admin, :user_request)
|
||||||
user.delete_and_keep_track_dossiers(administration)
|
user.delete_and_keep_track_dossiers(super_admin)
|
||||||
|
|
||||||
expect(DeletedDossier.find_by(dossier_id: dossier_en_construction)).to be_present
|
expect(DeletedDossier.find_by(dossier_id: dossier_en_construction)).to be_present
|
||||||
expect(DeletedDossier.find_by(dossier_id: dossier_brouillon)).to be_nil
|
expect(DeletedDossier.find_by(dossier_id: dossier_brouillon)).to be_nil
|
||||||
|
@ -287,8 +287,8 @@ describe User, type: :model do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "doesn't destroy dossiers of another user" do
|
it "doesn't destroy dossiers of another user" do
|
||||||
dossier_cache.discard_and_keep_track!(administration, :user_request)
|
dossier_cache.discard_and_keep_track!(super_admin, :user_request)
|
||||||
user.delete_and_keep_track_dossiers(administration)
|
user.delete_and_keep_track_dossiers(super_admin)
|
||||||
|
|
||||||
expect(Dossier.find_by(id: dossier_from_another_user.id)).to be_present
|
expect(Dossier.find_by(id: dossier_from_another_user.id)).to be_present
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue