diff --git a/app/controllers/admins_group_managers/admins_group_manager_controller.rb b/app/controllers/admins_group_managers/admins_group_manager_controller.rb
deleted file mode 100644
index fad6629e3..000000000
--- a/app/controllers/admins_group_managers/admins_group_manager_controller.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-module AdminsGroupManagers
- class AdminsGroupManagerController < ApplicationController
- before_action :authenticate_admins_group_manager!
-
- def nav_bar_profile
- :admins_group_manager
- end
- end
-end
diff --git a/app/controllers/admins_group_managers/admins_groups_controller.rb b/app/controllers/admins_group_managers/admins_groups_controller.rb
deleted file mode 100644
index 3e599883a..000000000
--- a/app/controllers/admins_group_managers/admins_groups_controller.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-module AdminsGroupManagers
- class AdminsGroupsController < AdminsGroupManagerController
- def index
- @admins_groups = admins_groups
- end
-
- private
-
- def admins_groups
- admins_group_ids = current_admins_group_manager.admins_group_ids
- AdminsGroup.where(id: admins_group_ids.compact.uniq)
- end
- end
-end
diff --git a/app/controllers/manager/admins_group_managers_controller.rb b/app/controllers/manager/admins_group_managers_controller.rb
deleted file mode 100644
index f580748e1..000000000
--- a/app/controllers/manager/admins_group_managers_controller.rb
+++ /dev/null
@@ -1,4 +0,0 @@
-module Manager
- class AdminsGroupManagersController < Manager::ApplicationController
- end
-end
diff --git a/app/controllers/manager/admins_groups_controller.rb b/app/controllers/manager/admins_groups_controller.rb
deleted file mode 100644
index ebb92784c..000000000
--- a/app/controllers/manager/admins_groups_controller.rb
+++ /dev/null
@@ -1,32 +0,0 @@
-module Manager
- class AdminsGroupsController < Manager::ApplicationController
- def add_admins_group_manager
- emails = (params['emails'].presence || '').split(',').to_json
- emails = JSON.parse(emails).map { EmailSanitizableConcern::EmailSanitizer.sanitize(_1) }
-
- admins_group_managers, invalid_emails = admins_group.add_admins_group_managers(emails:)
-
- if invalid_emails.present?
- flash[:alert] = t('.wrong_address',
- count: invalid_emails.size,
- emails: invalid_emails)
- end
-
- if admins_group_managers.present?
- flash[:notice] = "Les gestionnaires ont bien été affectés au groupe d'administrateurs"
-
- AdminsGroupMailer
- .notify_added_admins_group_managers(admins_group, admins_group_managers, current_super_admin.email)
- .deliver_later
- end
-
- redirect_to manager_admins_groups_path(admins_group)
- end
-
- private
-
- def admins_group
- @admins_group ||= AdminsGroup.find(params[:id])
- end
- end
-end
diff --git a/app/controllers/manager/groupe_gestionnaires_controller.rb b/app/controllers/manager/groupe_gestionnaires_controller.rb
index 612f5e66a..68a03603c 100644
--- a/app/controllers/manager/groupe_gestionnaires_controller.rb
+++ b/app/controllers/manager/groupe_gestionnaires_controller.rb
@@ -20,7 +20,25 @@ module Manager
.deliver_later
end
- redirect_to manager_groupe_gestionnaires_path(groupe_gestionnaire)
+ redirect_to manager_groupe_gestionnaire_path(groupe_gestionnaire)
+ end
+
+ def remove_gestionnaire
+ if !groupe_gestionnaire.root_groupe_gestionnaire? || groupe_gestionnaire.gestionnaires.one?
+ flash[:alert] = "Suppression impossible : il doit y avoir au moins un gestionnaire dans le groupe racine"
+ else
+ gestionnaire = Gestionnaire.find(gestionnaire_id)
+ if groupe_gestionnaire.remove(gestionnaire)
+ flash[:notice] = "Le gestionnaire « #{gestionnaire.email} » a été retiré du groupe."
+ GroupeGestionnaireMailer
+ .notify_removed_gestionnaire(groupe_gestionnaire, gestionnaire, current_super_admin.email)
+ .deliver_later
+ else
+ flash[:alert] = "Le gestionnaire « #{gestionnaire.email} » n’est pas dans le groupe."
+ end
+ end
+
+ redirect_to manager_groupe_gestionnaire_path(groupe_gestionnaire)
end
private
@@ -28,5 +46,9 @@ module Manager
def groupe_gestionnaire
@groupe_gestionnaire ||= GroupeGestionnaire.find(params[:id])
end
+
+ def gestionnaire_id
+ params[:gestionnaire][:id]
+ end
end
end
diff --git a/app/dashboards/admins_group_dashboard.rb b/app/dashboards/admins_group_dashboard.rb
deleted file mode 100644
index 223d15a43..000000000
--- a/app/dashboards/admins_group_dashboard.rb
+++ /dev/null
@@ -1,54 +0,0 @@
-require "administrate/base_dashboard"
-
-class AdminsGroupDashboard < Administrate::BaseDashboard
- # ATTRIBUTE_TYPES
- # a hash that describes the type of each of the model's fields.
- #
- # Each different type represents an Administrate::Field object,
- # which determines how the attribute is displayed
- # on pages throughout the dashboard.
- ATTRIBUTE_TYPES = {
- id: Field::Number,
- name: Field::String,
- created_at: Field::DateTime,
- updated_at: Field::DateTime,
- admins_group_managers: Field::HasMany,
- administrateurs: Field::HasMany
- }.freeze
-
- # COLLECTION_ATTRIBUTES
- # an array of attributes that will be displayed on the model's index page.
- #
- # By default, it's limited to four items to reduce clutter on index pages.
- # Feel free to add, remove, or rearrange items.
- COLLECTION_ATTRIBUTES = [
- :id,
- :created_at,
- :name,
- :admins_group_managers,
- :administrateurs
- ].freeze
-
- # SHOW_PAGE_ATTRIBUTES
- # an array of attributes that will be displayed on the model's show page.
- SHOW_PAGE_ATTRIBUTES = [
- :admins_group_managers,
- :administrateurs,
- :id,
- :created_at
- ].freeze
-
- # FORM_ATTRIBUTES
- # an array of attributes that will be displayed
- # on the model's form (`new` and `edit`) pages.
- FORM_ATTRIBUTES = [
- :name
- ].freeze
-
- # Overwrite this method to customize how users are displayed
- # across all pages of the admin dashboard.
- #
- def display_resource(admins_group)
- admins_group.name
- end
-end
diff --git a/app/dashboards/admins_group_manager_dashboard.rb b/app/dashboards/admins_group_manager_dashboard.rb
deleted file mode 100644
index 09a8c8c20..000000000
--- a/app/dashboards/admins_group_manager_dashboard.rb
+++ /dev/null
@@ -1,57 +0,0 @@
-require "administrate/base_dashboard"
-
-class AdminsGroupManagerDashboard < Administrate::BaseDashboard
- # ATTRIBUTE_TYPES
- # a hash that describes the type of each of the model's fields.
- #
- # Each different type represents an Administrate::Field object,
- # which determines how the attribute is displayed
- # on pages throughout the dashboard.
- ATTRIBUTE_TYPES = {
- id: Field::Number,
- user: Field::HasOne.with_options(searchable: true, searchable_field: 'email'),
- created_at: Field::DateTime,
- updated_at: Field::DateTime,
- admins_groups: Field::HasMany.with_options(limit: 20),
- registration_state: Field::String.with_options(searchable: false),
- email: Field::Email.with_options(searchable: false)
- }.freeze
-
- # COLLECTION_ATTRIBUTES
- # an array of attributes that will be displayed on the model's index page.
- #
- # By default, it's limited to four items to reduce clutter on index pages.
- # Feel free to add, remove, or rearrange items.
- COLLECTION_ATTRIBUTES = [
- :id,
- :user,
- :created_at,
- :admins_groups,
- :registration_state
- ].freeze
-
- # SHOW_PAGE_ATTRIBUTES
- # an array of attributes that will be displayed on the model's show page.
- SHOW_PAGE_ATTRIBUTES = [
- :id,
- :user,
- :created_at,
- :updated_at,
- :registration_state,
- :admins_groups
- ].freeze
-
- # FORM_ATTRIBUTES
- # an array of attributes that will be displayed
- # on the model's form (`new` and `edit`) pages.
- FORM_ATTRIBUTES = [
- :email
- ].freeze
-
- # Overwrite this method to customize how users are displayed
- # across all pages of the admin dashboard.
- #
- def display_resource(admins_group_manager)
- admins_group_manager.email
- end
-end
diff --git a/app/mailers/admins_group_mailer.rb b/app/mailers/admins_group_mailer.rb
deleted file mode 100644
index 03e552a1b..000000000
--- a/app/mailers/admins_group_mailer.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-class AdminsGroupMailer < ApplicationMailer
- layout 'mailers/layout'
-
- def notify_added_admins_group_managers(admins_group, added_admins_group_managers, current_super_admin_email)
- added_admins_group_manager_emails = added_admins_group_managers.map(&:email)
- @admins_group = admins_group
- @current_super_admin_email = current_super_admin_email
-
- subject = "Vous avez été ajouté(e) en tant que gestionnaire du groupe d'administrateur \"#{admins_group.name}\""
-
- mail(bcc: added_admins_group_manager_emails, subject: subject)
- end
-end
diff --git a/app/mailers/groupe_gestionnaire_mailer.rb b/app/mailers/groupe_gestionnaire_mailer.rb
index 1ec583139..b5c4debac 100644
--- a/app/mailers/groupe_gestionnaire_mailer.rb
+++ b/app/mailers/groupe_gestionnaire_mailer.rb
@@ -1,6 +1,14 @@
class GroupeGestionnaireMailer < ApplicationMailer
layout 'mailers/layout'
+ def notify_removed_gestionnaire(groupe_gestionnaire, removed_gestionnaire, current_super_admin_email)
+ @groupe_gestionnaire = groupe_gestionnaire
+ @current_super_admin_email = current_super_admin_email
+ subject = "Vous avez été retiré(e) du groupe d'administrateur \"#{groupe_gestionnaire.name}\""
+
+ mail(to: removed_gestionnaire.email, subject: subject)
+ end
+
def notify_added_gestionnaires(groupe_gestionnaire, added_gestionnaires, current_super_admin_email)
added_gestionnaire_emails = added_gestionnaires.map(&:email)
@groupe_gestionnaire = groupe_gestionnaire
diff --git a/app/models/admins_group.rb b/app/models/admins_group.rb
deleted file mode 100644
index e828e419b..000000000
--- a/app/models/admins_group.rb
+++ /dev/null
@@ -1,30 +0,0 @@
-class AdminsGroup < ApplicationRecord
- belongs_to :admins_group, optional: true # parent
- has_many :children, class_name: "AdminsGroup", inverse_of: :admins_group
- has_many :administrateurs
- has_and_belongs_to_many :admins_group_managers
-
- def add(admins_group_manager)
- admins_group_managers << admins_group_manager
- end
-
- def add_admins_group_managers(ids: [], emails: [])
- admins_group_managers_to_add, valid_emails, invalid_emails = AdminsGroupManager.find_all_by_identifier_with_emails(ids:, emails:)
- not_found_emails = valid_emails - admins_group_managers_to_add.map(&:email)
-
- # Send invitations to users without account
- if not_found_emails.present?
- admins_group_managers_to_add += not_found_emails.map do |email|
- user = User.create_or_promote_to_admins_group_manager(email, SecureRandom.hex)
- user.invite_admins_group_manager!(self)
- user.admins_group_manager
- end
- end
-
- # We dont't want to assign a user to an admins_group if they are already assigned to it
- admins_group_managers_to_add -= admins_group_managers
- admins_group_managers_to_add.each { add(_1) }
-
- [admins_group_managers_to_add, invalid_emails]
- end
-end
diff --git a/app/models/admins_group_manager.rb b/app/models/admins_group_manager.rb
deleted file mode 100644
index cb11b1bd3..000000000
--- a/app/models/admins_group_manager.rb
+++ /dev/null
@@ -1,41 +0,0 @@
-class AdminsGroupManager < ApplicationRecord
- has_and_belongs_to_many :admins_groups
-
- belongs_to :user
-
- delegate :email, to: :user
-
- default_scope { eager_load(:user) }
-
- def self.by_email(email)
- find_by(users: { email: email })
- end
-
- def self.find_all_by_identifier(ids: [], emails: [])
- find_all_by_identifier_with_emails(ids:, emails:).first
- end
-
- def self.find_all_by_identifier_with_emails(ids: [], emails: [])
- valid_emails, invalid_emails = emails.partition { URI::MailTo::EMAIL_REGEXP.match?(_1) }
-
- [
- where(id: ids).or(where(users: { email: valid_emails })).distinct(:id),
- valid_emails,
- invalid_emails
- ]
- end
-
- def can_be_deleted?
- !(root_admins_group = admins_groups.where(admins_group: nil).first) || root_admins_group.admins_group_managers.size > 1
- end
-
- def registration_state
- if user.active?
- 'Actif'
- elsif user.reset_password_period_valid?
- 'En attente'
- else
- 'Expiré'
- end
- end
-end
diff --git a/app/models/groupe_gestionnaire.rb b/app/models/groupe_gestionnaire.rb
index 526418d37..aca1491d7 100644
--- a/app/models/groupe_gestionnaire.rb
+++ b/app/models/groupe_gestionnaire.rb
@@ -4,10 +4,24 @@ class GroupeGestionnaire < ApplicationRecord
has_many :administrateurs
has_and_belongs_to_many :gestionnaires
+ def root_groupe_gestionnaire?
+ groupe_gestionnaire.nil?
+ end
+
def add(gestionnaire)
+ return if gestionnaire.nil?
+ return if in?(gestionnaire.groupe_gestionnaires)
+
gestionnaires << gestionnaire
end
+ def remove(gestionnaire)
+ return if gestionnaire.nil?
+ return if !in?(gestionnaire.groupe_gestionnaires)
+
+ gestionnaire.groupe_gestionnaires.destroy(self)
+ end
+
def add_gestionnaires(ids: [], emails: [])
gestionnaires_to_add, valid_emails, invalid_emails = Gestionnaire.find_all_by_identifier_with_emails(ids:, emails:)
not_found_emails = valid_emails - gestionnaires_to_add.map(&:email)
diff --git a/app/views/admins_group_mailer/notify_added_admins_group_managers.html.haml b/app/views/admins_group_mailer/notify_added_admins_group_managers.html.haml
deleted file mode 100644
index 40c1190a3..000000000
--- a/app/views/admins_group_mailer/notify_added_admins_group_managers.html.haml
+++ /dev/null
@@ -1,6 +0,0 @@
-%p= t(:hello, scope: [:views, :shared, :greetings])
-
-%p
- = t(".email_body", admins_group_name: @admins_group.name, email: @current_super_admin_email, application_name: APPLICATION_NAME)
-
-= render partial: "layouts/mailers/signature"
diff --git a/app/views/admins_group_managers/admins_groups/index.html.haml b/app/views/admins_group_managers/admins_groups/index.html.haml
deleted file mode 100644
index fc9fb0924..000000000
--- a/app/views/admins_group_managers/admins_groups/index.html.haml
+++ /dev/null
@@ -1,17 +0,0 @@
-= render partial: 'admins_group_managers/breadcrumbs',
- locals: { steps: [['Groupes d\'administrateurs', admins_group_manager_admins_groups_path]] }
-
-#admins_groups-index.container
- %h1.fr-h1 Liste des groupes d'administrateurs
-
- %table.fr-table.width-100.mt-3
- %thead
- %tr
- %th{ scope: "col" }
- Nom
-
- %tbody
- - @admins_groups.each do |admins_group|
- %tr
- %td
- = admins_group.name
diff --git a/app/views/admins_group_managers/_breadcrumbs.html.haml b/app/views/gestionnaires/_breadcrumbs.html.haml
similarity index 100%
rename from app/views/admins_group_managers/_breadcrumbs.html.haml
rename to app/views/gestionnaires/_breadcrumbs.html.haml
diff --git a/app/views/gestionnaires/groupe_gestionnaires/index.html.haml b/app/views/gestionnaires/groupe_gestionnaires/index.html.haml
new file mode 100644
index 000000000..aa56538b9
--- /dev/null
+++ b/app/views/gestionnaires/groupe_gestionnaires/index.html.haml
@@ -0,0 +1,17 @@
+= render partial: 'gestionnaires/breadcrumbs',
+ locals: { steps: [['Groupes d\'administrateurs', gestionnaire_groupe_gestionnaires_path]] }
+
+#groupe_gestionnaires-index.container
+ %h1.fr-h1 Liste des groupes d'administrateurs
+
+ %table.fr-table.width-100.mt-3
+ %thead
+ %tr
+ %th{ scope: "col" }
+ Nom
+
+ %tbody
+ - @groupe_gestionnaires.each do |groupe_gestionnaire|
+ %tr
+ %td
+ = groupe_gestionnaire.name
diff --git a/app/views/groupe_gestionnaire_mailer/notify_removed_gestionnaire.html.haml b/app/views/groupe_gestionnaire_mailer/notify_removed_gestionnaire.html.haml
new file mode 100644
index 000000000..94f82e361
--- /dev/null
+++ b/app/views/groupe_gestionnaire_mailer/notify_removed_gestionnaire.html.haml
@@ -0,0 +1,6 @@
+%p= t(:hello, scope: [:views, :shared, :greetings])
+
+%p
+ = t(".email_body", groupe_gestionnaire_name: @groupe_gestionnaire.name, email: @current_super_admin_email, application_name: APPLICATION_NAME)
+
+= render partial: "layouts/mailers/signature"
diff --git a/app/views/manager/gestionnaires/_collection_item_actions.html.erb b/app/views/manager/gestionnaires/_collection_item_actions.html.erb
new file mode 100644
index 000000000..eca420c77
--- /dev/null
+++ b/app/views/manager/gestionnaires/_collection_item_actions.html.erb
@@ -0,0 +1,17 @@
+<% if existing_action?(collection_presenter.resource_name, :edit) %>
+
<%= link_to(
+ t("administrate.actions.edit"),
+ [:edit, namespace, resource],
+ class: "action-edit",
+ ) if accessible_action?(resource, :edit) %>
+<% end %>
+
+<% if existing_action?(collection_presenter.resource_name, :destroy) %>
+ <%= link_to(
+ t("administrate.actions.destroy"),
+ [namespace, resource],
+ class: "text-color-red",
+ method: :delete,
+ data: { confirm: t("administrate.actions.confirm") }
+ ) if accessible_action?(resource, :destroy) %>
+<% end %>
\ No newline at end of file
diff --git a/app/views/manager/gestionnaires/_index_header.erb b/app/views/manager/gestionnaires/_index_header.erb
new file mode 100644
index 000000000..a14a3ba93
--- /dev/null
+++ b/app/views/manager/gestionnaires/_index_header.erb
@@ -0,0 +1,27 @@
+<% content_for(:title) do %>
+ <%= display_resource_name(page.resource_name) %>
+<% end %>
+
+
+
+ <%= content_for(:title) %>
+
+
+ <% if show_search_bar %>
+ <%= render(
+ "search",
+ search_term: search_term,
+ resource_name: display_resource_name(page.resource_name)
+ ) %>
+ <% end %>
+
+
+ <%= link_to(
+ t(
+ "manager.gestionnaires.manage_root_groupe_gestionnaire"
+ ),
+ manager_groupe_gestionnaires_path,
+ class: "button",
+ ) %>
+
+
\ No newline at end of file
diff --git a/app/views/manager/groupe_gestionnaires/_collection_gestionnaires.html.erb b/app/views/manager/groupe_gestionnaires/_collection_gestionnaires.html.erb
new file mode 100644
index 000000000..60a646331
--- /dev/null
+++ b/app/views/manager/groupe_gestionnaires/_collection_gestionnaires.html.erb
@@ -0,0 +1,81 @@
+
+<% if attribute.resources.any? %>
+<% order = attribute.order_from_params(params.fetch(attribute.name, {})) %>
+<% page_number = params.fetch(attribute.name, {}).fetch(:page, nil) %>
+
+
+
+
+ <% attribute.associated_collection(order).attribute_types.select{ |attr_name, attr_type| [:id, :user].include?(attr_name) }.each do |attr_name, attr_type| %>
+ "
+ scope="col"
+ aria-sort="<%= sort_order(attribute.associated_collection(order).ordered_html_class(attr_name)) %>">
+ <%= link_to(sanitized_order_params(page, attribute.name).merge(
+ attribute.associated_collection(order).order_params_for(attr_name, key: attribute.name)
+ )) do %>
+ <%= t(
+ "helpers.label.#{attribute.associated_collection(order).resource_name}.#{attr_name}",
+ default: attribute.associated_class.human_attribute_name(attr_name).titleize,
+ ) %>
+ <% if attribute.associated_collection(order).ordered_by?(attr_name) %>
+
+
+
+
+
+ <% end %>
+ <% end %>
+
+ <% end %>
+ <% [false && existing_action?(attribute.associated_collection(order).resource_name, :edit),
+ existing_action?(attribute.associated_collection(order).resource_name, :destroy)].count(true).times do %>
+
+ <% end %>
+
+
+
+
+ <% attribute.resources(page_number, order).each do |resource| %>
+
+ <% attribute.associated_collection(order).attributes_for(resource).select{ |field| ["id", "user"].include?(field.name) }.each do |field| %>
+
+ <%= render_field field %>
+
+ <% end %>
+ <% if false %>
+ <%= link_to(
+ t("administrate.actions.edit"),
+ [:edit, namespace, resource],
+ class: "action-edit",
+ ) if accessible_action?(resource, :edit) %>
+ <% end %>
+
+ <% if existing_action?(attribute.associated_collection(order).resource_name, :destroy) %>
+ <%= button_to 'Retirer',
+ { action: :remove_gestionnaire, id: page.resource.id },
+ { method: :delete,
+ data: { confirm: t("administrate.actions.confirm") },
+ params: { gestionnaire: { id: resource.id }},
+ class: 'fr-btn fr-btn--secondary' }
+ %>
+ <% end %>
+
+ <% end %>
+
+
+
+<% if attribute.more_than_limit? %>
+ <%= render("pagination", resources: attribute.resources(page_number), param_name: "#{attribute.name}[page]") %>
+<% end %>
+
+<% else %>
+<%= t("administrate.fields.has_many.none", default: "–") %>
+<% end %>
+
+<%= form_tag(add_gestionnaire_manager_groupe_gestionnaire_path(page.resource), style: 'margin-top: 1rem;') do %>
+ <%= email_field_tag(:emails, '', placeholder: 'Emails', autocapitalize: 'off', autocorrect: 'off', spellcheck: 'false', style: 'margin-bottom: 1rem;width:24rem;') %>
+ Ajouter un gestionnaire
+<% end %>
diff --git a/app/views/manager/admins_groups/show.html.erb b/app/views/manager/groupe_gestionnaires/show.html.erb
similarity index 65%
rename from app/views/manager/admins_groups/show.html.erb
rename to app/views/manager/groupe_gestionnaires/show.html.erb
index e7e777c31..659206d7d 100644
--- a/app/views/manager/admins_groups/show.html.erb
+++ b/app/views/manager/groupe_gestionnaires/show.html.erb
@@ -15,8 +15,8 @@ as well as a link to its edit page.
[1]: http://www.rubydoc.info/gems/administrate/Administrate/Page/Show
%>
+
<% content_for(:title) { t("administrate.actions.show_resource", name: page.page_title) } %>
-<% admins_group = page.resource %>
@@ -28,9 +28,16 @@ as well as a link to its edit page.
t("administrate.actions.edit_resource", name: page.page_title),
[:edit, namespace, page.resource],
class: "button",
- ) if valid_action? :edit %>
-
+ ) if accessible_action?(page.resource, :edit) %>
+ <%= link_to(
+ t("administrate.actions.destroy"),
+ [namespace, page.resource],
+ class: "button button--danger",
+ method: :delete,
+ data: { confirm: t("administrate.actions.confirm") }
+ ) if accessible_action?(page.resource, :destroy) %>
+
@@ -39,18 +46,21 @@ as well as a link to its edit page.
<%= t(
"helpers.label.#{resource_name}.#{attribute.name}",
- default: attribute.name.titleize,
+ default: page.resource.class.human_attribute_name(attribute.name),
) %>
- <%= render_field attribute, page: page %>
- <% if attribute.name == 'admins_group_managers' %>
- <%= form_tag(add_admins_group_manager_manager_admins_group_path(admins_group), style: 'margin-top: 1rem;') do %>
- <%= email_field_tag(:emails, '', placeholder: 'Emails', autocapitalize: 'off', autocorrect: 'off', spellcheck: 'false', style: 'margin-bottom: 1rem;width:24rem;') %>
- Ajouter un gestionnaire
+ <% if attribute.name == 'gestionnaires' %>
+
+ <%= render(
+ "collection_gestionnaires",
+ page: page,
+ attribute: attribute
+ ) %>
+ <% else %>
+ <%= render_field attribute, page: page %>
<% end %>
- <% end %>
<% end %>
diff --git a/app/views/user_mailer/invite_admins_group_manager.html.haml b/app/views/user_mailer/invite_admins_group_manager.html.haml
deleted file mode 100644
index 879f9898f..000000000
--- a/app/views/user_mailer/invite_admins_group_manager.html.haml
+++ /dev/null
@@ -1,13 +0,0 @@
-- content_for(:title, 'Activation de votre compte gestionnaire')
-
-%p
- Bonjour,
-
-%p
- Vous venez d’être nommé gestionnaire du groupe #{@admins_group.name} sur #{APPLICATION_NAME}.
-
-%p
- Votre compte a été créé pour l'adresse email #{@user.email}. Pour l’activer, nous vous invitons à cliquer sur le lien suivant :
- = link_to(users_activate_url(token: @reset_password_token), users_activate_url(token: @reset_password_token))
-
-= render partial: "layouts/mailers/signature"
diff --git a/config/env.example b/config/env.example
index 05277a328..a3624b572 100644
--- a/config/env.example
+++ b/config/env.example
@@ -155,6 +155,3 @@ CLAMAV_ENABLED="disabled"
# Siret number used for API Entreprise, by default we use SIRET from dinum
API_ENTREPRISE_DEFAULT_SIRET="put_your_own_siret"
-
-# Admins group usage (gestionnaire de groupes d'administrateurs)
-ADMINS_GROUP_ENABLED="disabled"
\ No newline at end of file
diff --git a/config/locales/models/admins_group_manager/fr.yml b/config/locales/models/admins_group_manager/fr.yml
deleted file mode 100644
index c6d9b2293..000000000
--- a/config/locales/models/admins_group_manager/fr.yml
+++ /dev/null
@@ -1,9 +0,0 @@
-fr:
- activerecord:
- attributes:
- admins_group_manager:
- admins_groups: Groupes
- models:
- admins_group_manager:
- one: Gestionnaire
- other: Gestionnaires
diff --git a/config/locales/models/admins_group/fr.yml b/config/locales/models/groupe_gestionnaire/fr.yml
similarity index 58%
rename from config/locales/models/admins_group/fr.yml
rename to config/locales/models/groupe_gestionnaire/fr.yml
index 4aeb8b4ba..ef29657cb 100644
--- a/config/locales/models/admins_group/fr.yml
+++ b/config/locales/models/groupe_gestionnaire/fr.yml
@@ -1,9 +1,9 @@
fr:
activerecord:
attributes:
- admins_group:
- admins_group_managers: Gestionnaires
+ groupe_gestionnaire:
+ gestionnaires: Gestionnaires
models:
- admins_group:
+ groupe_gestionnaire:
one: Groupe d'administrateurs
other: Groupes d'administrateurs
diff --git a/config/locales/views/admins_group_mailer/notify_added_admins_group_managers/en.yml b/config/locales/views/admins_group_mailer/notify_added_admins_group_managers/en.yml
deleted file mode 100644
index 95528051d..000000000
--- a/config/locales/views/admins_group_mailer/notify_added_admins_group_managers/en.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-en:
- admins_group_mailer:
- notify_added_admins_group_managers:
- email_body: "You were assigned as manager on the admins group %{admins_group_name} on %{application_name} by « %{email} »"
diff --git a/config/locales/views/admins_group_mailer/notify_added_admins_group_managers/fr.yml b/config/locales/views/admins_group_mailer/notify_added_admins_group_managers/fr.yml
deleted file mode 100644
index f63b8007c..000000000
--- a/config/locales/views/admins_group_mailer/notify_added_admins_group_managers/fr.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-fr:
- admins_group_mailer:
- notify_added_admins_group_managers:
- email_body: "Vous venez d’être nommé gestionnaire du groupe %{admins_group_name} sur %{application_name} par « %{email} »."
diff --git a/config/locales/views/groupe_gestionnaire_mailer/notify_removed_gestionnaire/en.yml b/config/locales/views/groupe_gestionnaire_mailer/notify_removed_gestionnaire/en.yml
new file mode 100644
index 000000000..836737fa6
--- /dev/null
+++ b/config/locales/views/groupe_gestionnaire_mailer/notify_removed_gestionnaire/en.yml
@@ -0,0 +1,4 @@
+en:
+ groupe_gestionnaire_mailer:
+ notify_removed_gestionnaire:
+ email_body: "You were removed from the admins group %{groupe_gestionnaire_name} on %{application_name} by « %{email} »"
diff --git a/config/locales/views/groupe_gestionnaire_mailer/notify_removed_gestionnaire/fr.yml b/config/locales/views/groupe_gestionnaire_mailer/notify_removed_gestionnaire/fr.yml
new file mode 100644
index 000000000..927149552
--- /dev/null
+++ b/config/locales/views/groupe_gestionnaire_mailer/notify_removed_gestionnaire/fr.yml
@@ -0,0 +1,4 @@
+fr:
+ groupe_gestionnaire_mailer:
+ notify_removed_gestionnaire:
+ email_body: "Vous venez d’être supprimé(e) du groupe %{groupe_gestionnaire_name} sur %{application_name} par « %{email} »."
diff --git a/config/locales/views/manager/en.yml b/config/locales/views/manager/en.yml
new file mode 100644
index 000000000..4ff35c232
--- /dev/null
+++ b/config/locales/views/manager/en.yml
@@ -0,0 +1,9 @@
+en:
+ manager:
+ groupe_gestionnaires:
+ add_gestionnaire:
+ wrong_address:
+ one: "%{emails} is not a valid email address"
+ other: "%{emails} are not valid email addresses"
+ gestionnaires:
+ manage_root_groupe_gestionnaire: Root group management
diff --git a/config/locales/views/manager/fr.yml b/config/locales/views/manager/fr.yml
index 108d954bd..aea601ee2 100644
--- a/config/locales/views/manager/fr.yml
+++ b/config/locales/views/manager/fr.yml
@@ -5,3 +5,5 @@ fr:
wrong_address:
one: "%{emails} n’est pas une adresse email valide"
other: "%{emails} ne sont pas des adresses emails valides"
+ gestionnaires:
+ manage_root_groupe_gestionnaire: Gestion du groupe racine
diff --git a/config/routes.rb b/config/routes.rb
index 8404179c1..31ec57ac7 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -57,10 +57,11 @@ Rails.application.routes.draw do
end
if ENV['ADMINS_GROUP_ENABLED'] == 'enabled' # can be removed if needed when EVERY PARTS of the feature will be merged / from env.example.optional
- resources :gestionnaires, only: [:index, :show, :edit, :update]
+ resources :gestionnaires, only: [:index, :show, :edit, :update, :destroy]
resources :groupe_gestionnaires, path: 'groupe_administrateurs', only: [:index, :show, :new, :create, :edit, :update] do
post 'add_gestionnaire', on: :member
+ delete 'remove_gestionnaire', on: :member
end
end
diff --git a/db/migrate/20230813091837_create_admins_group_managers.rb b/db/migrate/20230813091837_create_admins_group_managers.rb
deleted file mode 100644
index b8cb3780c..000000000
--- a/db/migrate/20230813091837_create_admins_group_managers.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-class CreateAdminsGroupManagers < ActiveRecord::Migration[7.0]
- def change
- create_table "admins_group_managers" do |t|
- t.bigint :user_id, null: false
- t.index [:user_id], name: :index_admins_group_managers_on_user_id
- t.timestamps
- end
- end
-end
diff --git a/db/migrate/20230813091838_create_admins_groups.rb b/db/migrate/20230813091838_create_admins_groups.rb
deleted file mode 100644
index 75a38013e..000000000
--- a/db/migrate/20230813091838_create_admins_groups.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-class CreateAdminsGroups < ActiveRecord::Migration[7.0]
- def change
- create_table "admins_groups" do |t|
- t.string :name, null: false
- t.references :admins_group
- t.index [:name], name: :index_admins_groups_on_name
- t.timestamps
- end
-
- create_join_table :admins_groups, :admins_group_managers do |t|
- t.index [:admins_group_id, :admins_group_manager_id], name: :index_on_admins_group_and_admins_group_manager
- t.index [:admins_group_manager_id, :admins_group_id], name: :index_on_admins_group_manager_and_admins_group
- end
- end
-end
diff --git a/db/migrate/20230813091846_add_admins_group_to_administrateurs.rb b/db/migrate/20230813091846_add_admins_group_to_administrateurs.rb
deleted file mode 100644
index 52c07d340..000000000
--- a/db/migrate/20230813091846_add_admins_group_to_administrateurs.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-class AddAdminsGroupToAdministrateurs < ActiveRecord::Migration[7.0]
- disable_ddl_transaction!
-
- def change
- add_reference :administrateurs, :admins_group, index: { algorithm: :concurrently }, null: true
- end
-end
diff --git a/db/migrate/20230813091847_add_foreign_key_admins_group_to_administrateurs.rb b/db/migrate/20230813091847_add_foreign_key_admins_group_to_administrateurs.rb
deleted file mode 100644
index e155c3a13..000000000
--- a/db/migrate/20230813091847_add_foreign_key_admins_group_to_administrateurs.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-class AddForeignKeyAdminsGroupToAdministrateurs < ActiveRecord::Migration[7.0]
- def change
- add_foreign_key :administrateurs, :admins_groups, validate: false
- end
-end
diff --git a/db/migrate/20230813091848_validate_foreign_key_admins_group_to_administrateurs.rb b/db/migrate/20230813091848_validate_foreign_key_admins_group_to_administrateurs.rb
deleted file mode 100644
index 6af848b01..000000000
--- a/db/migrate/20230813091848_validate_foreign_key_admins_group_to_administrateurs.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-class ValidateForeignKeyAdminsGroupToAdministrateurs < ActiveRecord::Migration[7.0]
- def change
- validate_foreign_key :administrateurs, :admins_groups
- end
-end
diff --git a/db/schema.rb b/db/schema.rb
index f5e445eeb..e9ba894e6 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -61,7 +61,6 @@ ActiveRecord::Schema[7.0].define(version: 2023_10_10_083144) do
end
create_table "administrateurs", id: :serial, force: :cascade do |t|
- t.bigint "admins_group_id"
t.datetime "created_at", precision: 6
t.bigint "groupe_gestionnaire_id"
t.datetime "updated_at", precision: 6
@@ -91,29 +90,6 @@ ActiveRecord::Schema[7.0].define(version: 2023_10_10_083144) do
t.index ["procedure_id"], name: "index_administrateurs_procedures_on_procedure_id"
end
- create_table "admins_group_managers", force: :cascade do |t|
- t.datetime "created_at", null: false
- t.datetime "updated_at", null: false
- t.bigint "user_id", null: false
- t.index ["user_id"], name: "index_admins_group_managers_on_user_id"
- end
-
- create_table "admins_group_managers_groups", id: false, force: :cascade do |t|
- t.bigint "admins_group_id", null: false
- t.bigint "admins_group_manager_id", null: false
- t.index ["admins_group_id", "admins_group_manager_id"], name: "index_on_admins_group_and_admins_group_manager"
- t.index ["admins_group_manager_id", "admins_group_id"], name: "index_on_admins_group_manager_and_admins_group"
- end
-
- create_table "admins_groups", force: :cascade do |t|
- t.bigint "admins_group_id"
- t.datetime "created_at", null: false
- t.string "name", null: false
- t.datetime "updated_at", null: false
- t.index ["admins_group_id"], name: "index_admins_groups_on_admins_group_id"
- t.index ["name"], name: "index_admins_groups_on_name"
- end
-
create_table "api_tokens", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
t.bigint "administrateur_id", null: false
t.bigint "allowed_procedure_ids", array: true
diff --git a/spec/controllers/admins_group_managers/admins_group_manager_controller_spec.rb b/spec/controllers/admins_group_managers/admins_group_manager_controller_spec.rb
deleted file mode 100644
index 721188fc1..000000000
--- a/spec/controllers/admins_group_managers/admins_group_manager_controller_spec.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-describe AdminsGroupManagers::AdminsGroupManagerController, type: :controller do
- describe 'before actions: authenticate_admins_group_manager!' do
- it 'is present' do
- before_actions = AdminsGroupManagers::AdminsGroupManagerController
- ._process_action_callbacks
- .filter { |process_action_callbacks| process_action_callbacks.kind == :before }
- .map(&:filter)
-
- expect(before_actions).to include(:authenticate_admins_group_manager!)
- end
- end
-end
diff --git a/spec/controllers/admins_group_managers/admins_groups_controller_spec.rb b/spec/controllers/admins_group_managers/admins_groups_controller_spec.rb
deleted file mode 100644
index 0feaecf17..000000000
--- a/spec/controllers/admins_group_managers/admins_groups_controller_spec.rb
+++ /dev/null
@@ -1,23 +0,0 @@
-describe AdminsGroupManagers::AdminsGroupsController, type: :controller do
- let(:admins_group_manager) { create(:admins_group_manager) }
-
- describe "#index" do
- subject { get :index }
-
- context "when not logged" do
- before { subject }
- it { expect(response).to redirect_to(new_user_session_path) }
- end
-
- context "when logged in" do
- let!(:admins_group) { create(:admins_group, admins_group_managers: [admins_group_manager]) }
- before do
- sign_in(admins_group_manager.user)
- subject
- end
-
- it { expect(response).to have_http_status(:ok) }
- it { expect(assigns(:admins_groups)).to include(admins_group) }
- end
- end
-end
diff --git a/spec/controllers/gestionnaires/gestionnaire_controller_spec.rb b/spec/controllers/gestionnaires/gestionnaire_controller_spec.rb
new file mode 100644
index 000000000..d00115cc8
--- /dev/null
+++ b/spec/controllers/gestionnaires/gestionnaire_controller_spec.rb
@@ -0,0 +1,12 @@
+describe Gestionnaires::GestionnaireController, type: :controller do
+ describe 'before actions: authenticate_gestionnaire!' do
+ it 'is present' do
+ before_actions = Gestionnaires::GestionnaireController
+ ._process_action_callbacks
+ .filter { |process_action_callbacks| process_action_callbacks.kind == :before }
+ .map(&:filter)
+
+ expect(before_actions).to include(:authenticate_gestionnaire!)
+ end
+ end
+end
diff --git a/spec/controllers/gestionnaires/groupe_gestionnaires_controller_spec.rb b/spec/controllers/gestionnaires/groupe_gestionnaires_controller_spec.rb
new file mode 100644
index 000000000..d47f467b0
--- /dev/null
+++ b/spec/controllers/gestionnaires/groupe_gestionnaires_controller_spec.rb
@@ -0,0 +1,23 @@
+describe Gestionnaires::GroupeGestionnairesController, type: :controller do
+ let(:gestionnaire) { create(:gestionnaire) }
+
+ describe "#index" do
+ subject { get :index }
+
+ context "when not logged" do
+ before { subject }
+ it { expect(response).to redirect_to(new_user_session_path) }
+ end
+
+ context "when logged in" do
+ let!(:groupe_gestionnaire) { create(:groupe_gestionnaire, gestionnaires: [gestionnaire]) }
+ before do
+ sign_in(gestionnaire.user)
+ subject
+ end
+
+ it { expect(response).to have_http_status(:ok) }
+ it { expect(assigns(:groupe_gestionnaires)).to include(groupe_gestionnaire) }
+ end
+ end
+end
diff --git a/spec/controllers/manager/admins_group_managers_controller_spec.rb b/spec/controllers/manager/admins_group_managers_controller_spec.rb
deleted file mode 100644
index a732bdee7..000000000
--- a/spec/controllers/manager/admins_group_managers_controller_spec.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-describe Manager::AdminsGroupManagersController, type: :controller do
- let(:super_admin) { create(:super_admin) }
- let(:admins_group_manager) { create(:admins_group_manager) }
-
- before { sign_in super_admin }
-
- describe '#index' do
- render_views
-
- it 'searches admin by email' do
- get :index, params: { search: admins_group_manager.email }
- expect(response).to have_http_status(:success)
- end
- end
-
- describe '#show' do
- render_views
-
- before do
- get :show, params: { id: admins_group_manager.id }
- end
-
- it { expect(response.body).to include(admins_group_manager.email) }
- end
-end
diff --git a/spec/controllers/manager/admins_groups_controller_spec.rb b/spec/controllers/manager/admins_groups_controller_spec.rb
deleted file mode 100644
index d556ec317..000000000
--- a/spec/controllers/manager/admins_groups_controller_spec.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-describe Manager::AdminsGroupsController, type: :controller do
- let(:super_admin) { create(:super_admin) }
- let(:admins_group) { create(:admins_group) }
-
- before { sign_in super_admin }
-
- describe '#index' do
- render_views
-
- before do
- admins_group
- get :index
- end
-
- it { expect(response.body).to include(admins_group.name) }
- end
-
- describe '#show' do
- render_views
-
- before do
- get :show, params: { id: admins_group.id }
- end
-
- it { expect(response.body).to include(admins_group.name) }
- end
-end
diff --git a/spec/controllers/manager/gestionnaires_controller_spec.rb b/spec/controllers/manager/gestionnaires_controller_spec.rb
new file mode 100644
index 000000000..5357b6def
--- /dev/null
+++ b/spec/controllers/manager/gestionnaires_controller_spec.rb
@@ -0,0 +1,25 @@
+describe Manager::GestionnairesController, type: :controller do
+ let(:super_admin) { create(:super_admin) }
+ let(:gestionnaire) { create(:gestionnaire) }
+
+ before { sign_in super_admin }
+
+ describe '#index' do
+ render_views
+
+ it 'searches admin by email' do
+ get :index, params: { search: gestionnaire.email }
+ expect(response).to have_http_status(:success)
+ end
+ end
+
+ describe '#show' do
+ render_views
+
+ before do
+ get :show, params: { id: gestionnaire.id }
+ end
+
+ it { expect(response.body).to include(gestionnaire.email) }
+ end
+end
diff --git a/spec/controllers/manager/groupe_gestionnaires_controller_spec.rb b/spec/controllers/manager/groupe_gestionnaires_controller_spec.rb
new file mode 100644
index 000000000..ae52bd02c
--- /dev/null
+++ b/spec/controllers/manager/groupe_gestionnaires_controller_spec.rb
@@ -0,0 +1,82 @@
+describe Manager::GroupeGestionnairesController, type: :controller do
+ let(:super_admin) { create(:super_admin) }
+ let(:groupe_gestionnaire) { create(:groupe_gestionnaire) }
+
+ before { sign_in super_admin }
+
+ describe '#index' do
+ render_views
+
+ before do
+ groupe_gestionnaire
+ get :index
+ end
+
+ it { expect(response.body).to include(groupe_gestionnaire.name) }
+ end
+
+ describe '#show' do
+ render_views
+
+ before do
+ get :show, params: { id: groupe_gestionnaire.id }
+ end
+
+ it { expect(response.body).to include(groupe_gestionnaire.name) }
+ end
+
+ describe '#add_gestionnaire' do
+ before do
+ post :add_gestionnaire,
+ params: {
+ id: groupe_gestionnaire.id,
+ emails: new_gestionnaire_email
+ }
+ end
+
+ context 'of a new gestionnaire' do
+ let(:new_gestionnaire_email) { 'new_gestionnaire@mail.com' }
+
+ it { expect(groupe_gestionnaire.gestionnaires.map(&:email)).to include(new_gestionnaire_email) }
+ it { expect(flash.notice).to be_present }
+ it { expect(response).to redirect_to(manager_groupe_gestionnaire_path(groupe_gestionnaire)) }
+ end
+ end
+
+ describe '#remove_gestionnaire' do
+ let(:gestionnaire) { create(:gestionnaire) }
+ let(:new_gestionnaire) { create(:gestionnaire) }
+
+ before do
+ groupe_gestionnaire.gestionnaires << gestionnaire << new_gestionnaire
+ end
+
+ def remove_gestionnaire(gestionnaire)
+ delete :remove_gestionnaire,
+ params: {
+ id: groupe_gestionnaire.id,
+ gestionnaire: { id: gestionnaire.id }
+ }
+ end
+
+ context 'when there are many gestionnaires' do
+ before { remove_gestionnaire(new_gestionnaire) }
+
+ it { expect(groupe_gestionnaire.gestionnaires).to include(gestionnaire) }
+ it { expect(groupe_gestionnaire.reload.gestionnaires.count).to eq(1) }
+ it { expect(response).to redirect_to(manager_groupe_gestionnaire_path(groupe_gestionnaire)) }
+ end
+
+ context 'when there is only one gestionnaire' do
+ before do
+ remove_gestionnaire(new_gestionnaire)
+ remove_gestionnaire(gestionnaire)
+ end
+
+ it { expect(groupe_gestionnaire.gestionnaires).to include(gestionnaire) }
+ it { expect(groupe_gestionnaire.gestionnaires.count).to eq(1) }
+ it { expect(flash.alert).to eq('Suppression impossible : il doit y avoir au moins un gestionnaire dans le groupe racine') }
+ it { expect(response).to redirect_to(manager_groupe_gestionnaire_path(groupe_gestionnaire)) }
+ end
+ end
+end
diff --git a/spec/factories/admins_group.rb b/spec/factories/admins_group.rb
deleted file mode 100644
index b85b14cd4..000000000
--- a/spec/factories/admins_group.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-FactoryBot.define do
- factory :admins_group do
- sequence(:name) { |n| "Group #{n}" }
- end
-end
diff --git a/spec/factories/admins_group_manager.rb b/spec/factories/admins_group_manager.rb
deleted file mode 100644
index b8bf34a83..000000000
--- a/spec/factories/admins_group_manager.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-FactoryBot.define do
- sequence(:admins_group_manager_email) { |n| "admins_group_manager#{n}@demarches-simplifiees.fr" }
-
- factory :admins_group_manager do
- user { association :user, email: email, password: password }
-
- transient do
- email { generate(:admins_group_manager_email) }
- password { 'somethingverycomplated!' }
- end
- end
-end
diff --git a/spec/mailers/admins_group_mailer_spec.rb b/spec/mailers/admins_group_mailer_spec.rb
deleted file mode 100644
index dfb507417..000000000
--- a/spec/mailers/admins_group_mailer_spec.rb
+++ /dev/null
@@ -1,16 +0,0 @@
-RSpec.describe AdminsGroupMailer, type: :mailer do
- describe '#notify_added_admins_group_managers' do
- let(:admins_group) { create(:admins_group) }
-
- let(:admins_group_managers_to_add) { [create(:admins_group_manager, email: 'int3@g'), create(:admins_group_manager, email: 'int4@g')] }
-
- let(:current_super_admin_email) { 'toto@email.com' }
-
- subject { described_class.notify_added_admins_group_managers(admins_group, admins_group_managers_to_add, current_super_admin_email) }
-
- before { admins_group_managers_to_add.each { admins_group.add(_1) } }
-
- it { expect(subject.body).to include('Vous venez d’être nommé gestionnaire du groupe') }
- it { expect(subject.bcc).to match_array(['int3@g', 'int4@g']) }
- end
-end
diff --git a/spec/mailers/groupe_gestionnaire_mailer_spec.rb b/spec/mailers/groupe_gestionnaire_mailer_spec.rb
index 0efbf4c4f..1ce585f54 100644
--- a/spec/mailers/groupe_gestionnaire_mailer_spec.rb
+++ b/spec/mailers/groupe_gestionnaire_mailer_spec.rb
@@ -1,4 +1,17 @@
RSpec.describe GroupeGestionnaireMailer, type: :mailer do
+ describe '#notify_removed_gestionnaire' do
+ let(:groupe_gestionnaire) { create(:groupe_gestionnaire) }
+
+ let(:gestionnaire_to_remove) { create(:gestionnaire, email: 'int3@g') }
+
+ let(:current_super_admin_email) { 'toto@email.com' }
+
+ subject { described_class.notify_removed_gestionnaire(groupe_gestionnaire, gestionnaire_to_remove, current_super_admin_email) }
+
+ it { expect(subject.body).to include('Vous venez d’être supprimé(e) du groupe') }
+ it { expect(subject.to).to match_array(['int3@g']) }
+ end
+
describe '#notify_added_gestionnaires' do
let(:groupe_gestionnaire) { create(:groupe_gestionnaire) }
diff --git a/spec/mailers/previews/admins_group_mailer_preview.rb b/spec/mailers/previews/admins_group_mailer_preview.rb
deleted file mode 100644
index 0c92760ef..000000000
--- a/spec/mailers/previews/admins_group_mailer_preview.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-class AdminsGroupMailerPreview < ActionMailer::Preview
- def notify_added_admins_group_managers
- admins_group = AdminsGroup.new(name: 'un groupe d\'admin')
- current_super_admin_email = 'admin@dgfip.com'
- admins_group_managers = [AdminsGroupManager.new(user: user)]
- AdminsGroupMailer.notify_added_admins_group_managers(admins_group, admins_group_managers, current_super_admin_email)
- end
-
- private
-
- def user
- User.new(id: 10, email: 'test@exemple.fr')
- end
-end
diff --git a/spec/mailers/previews/groupe_gestionnaire_mailer_preview.rb b/spec/mailers/previews/groupe_gestionnaire_mailer_preview.rb
index e522ee69d..53ce5f929 100644
--- a/spec/mailers/previews/groupe_gestionnaire_mailer_preview.rb
+++ b/spec/mailers/previews/groupe_gestionnaire_mailer_preview.rb
@@ -1,4 +1,11 @@
class GroupeGestionnaireMailerPreview < ActionMailer::Preview
+ def notify_removed_gestionnaire
+ groupe_gestionnaire = GroupeGestionnaire.new(name: 'un groupe d\'admin')
+ current_super_admin_email = 'admin@dgfip.com'
+ gestionnaire = Gestionnaire.new(user: user)
+ GroupeGestionnaireMailer.notify_removed_gestionnaire(groupe_gestionnaire, gestionnaire, current_super_admin_email)
+ end
+
def notify_added_gestionnaires
groupe_gestionnaire = GroupeGestionnaire.new(name: 'un groupe d\'admin')
current_super_admin_email = 'admin@dgfip.com'
diff --git a/spec/models/admins_group_manager_spec.rb b/spec/models/admins_group_manager_spec.rb
deleted file mode 100644
index 61ca156d0..000000000
--- a/spec/models/admins_group_manager_spec.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-describe AdminsGroupManager, type: :model do
- describe 'associations' do
- it { is_expected.to have_and_belong_to_many(:admins_groups) }
- end
-end
diff --git a/spec/models/admins_group_spec.rb b/spec/models/admins_group_spec.rb
deleted file mode 100644
index 30d227a4a..000000000
--- a/spec/models/admins_group_spec.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-describe AdminsGroup, type: :model do
- describe 'associations' do
- it { is_expected.to belong_to(:admins_group).optional }
- it { is_expected.to have_many(:children) }
- it { is_expected.to have_many(:administrateurs) }
- it { is_expected.to have_and_belong_to_many(:admins_group_managers) }
- end
-end
diff --git a/spring-0/6ee76a9c97d4224cf119ff2469a53122.pid b/spring-0/6ee76a9c97d4224cf119ff2469a53122.pid
new file mode 100644
index 000000000..45a4fb75d
--- /dev/null
+++ b/spring-0/6ee76a9c97d4224cf119ff2469a53122.pid
@@ -0,0 +1 @@
+8