Merge pull request #7079 from betagouv/main

2022-03-24-01
This commit is contained in:
LeSim 2022-03-24 16:06:04 +01:00 committed by GitHub
commit 3100b065db
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 52 additions and 32 deletions

View file

@ -4,8 +4,8 @@
# #
# created_at :datetime # created_at :datetime
# updated_at :datetime # updated_at :datetime
# administrateur_id :integer # administrateur_id :integer not null
# instructeur_id :integer # instructeur_id :integer not null
# #
class AdministrateursInstructeur < ApplicationRecord class AdministrateursInstructeur < ApplicationRecord
belongs_to :administrateur belongs_to :administrateur

View file

@ -148,7 +148,7 @@ Devise.setup do |config|
# Email regex used to validate email formats. It simply asserts that # Email regex used to validate email formats. It simply asserts that
# one (and only one) @ exists in the given string. This is mainly # one (and only one) @ exists in the given string. This is mainly
# to give user feedback and not to assert the e-mail validity. # to give user feedback and not to assert the e-mail validity.
# config.email_regexp = /\A[^@]+@[^@]+\z/ config.email_regexp = URI::MailTo::EMAIL_REGEXP
# ==> Configuration for :timeoutable # ==> Configuration for :timeoutable
# The time you want to timeout the user session without activity. After this # The time you want to timeout the user session without activity. After this

View file

@ -0,0 +1,10 @@
class AddNotNullConstraintsToAdministrateursInstructeur < ActiveRecord::Migration[6.1]
def change
# We ignore strong_migrations safety warnings, because those tables are relatively small, and the null check
# will be very fast.
safety_assured do
change_column_null :administrateurs_instructeurs, :administrateur_id, false
change_column_null :administrateurs_instructeurs, :instructeur_id, false
end
end
end

View file

@ -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: 2022_03_15_113510) do ActiveRecord::Schema.define(version: 2022_03_22_110900) 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"
@ -64,9 +64,9 @@ ActiveRecord::Schema.define(version: 2022_03_15_113510) do
end end
create_table "administrateurs_instructeurs", id: false, force: :cascade do |t| create_table "administrateurs_instructeurs", id: false, force: :cascade do |t|
t.integer "administrateur_id" t.integer "administrateur_id", null: false
t.datetime "created_at" t.datetime "created_at"
t.integer "instructeur_id" t.integer "instructeur_id", null: false
t.datetime "updated_at" t.datetime "updated_at"
t.index ["administrateur_id"], name: "index_administrateurs_instructeurs_on_administrateur_id" t.index ["administrateur_id"], name: "index_administrateurs_instructeurs_on_administrateur_id"
t.index ["instructeur_id", "administrateur_id"], name: "unique_couple_administrateur_instructeur", unique: true t.index ["instructeur_id", "administrateur_id"], name: "unique_couple_administrateur_instructeur", unique: true

View file

@ -5,21 +5,26 @@ namespace :after_party do
Procedure.with_discarded.where(aasm_state: :brouillon).where.not(published_revision_id: nil).update_all(published_revision_id: nil) Procedure.with_discarded.where(aasm_state: :brouillon).where.not(published_revision_id: nil).update_all(published_revision_id: nil)
types_de_champ = TypeDeChamp.joins(:revision).where('types_de_champ.procedure_id != procedure_revisions.procedure_id') begin
progress = ProgressReport.new(types_de_champ.count) types_de_champ = TypeDeChamp.joins(:revision).where('types_de_champ.procedure_id != procedure_revisions.procedure_id')
progress = ProgressReport.new(types_de_champ.count)
types_de_champ.find_each do |type_de_champ| types_de_champ.find_each do |type_de_champ|
procedure = type_de_champ.procedure ? type_de_champ.procedure : Procedure.with_discarded.find(type_de_champ.procedure_id) procedure = type_de_champ.procedure ? type_de_champ.procedure : Procedure.with_discarded.find(type_de_champ.procedure_id)
revision_id = procedure.published_revision_id || procedure.draft_revision_id revision_id = procedure.published_revision_id || procedure.draft_revision_id
type_de_champ.update_column(:revision_id, revision_id) type_de_champ.update_column(:revision_id, revision_id)
progress.inc progress.inc
end
progress.finish
rescue ActiveRecord::StatementInvalid, PG::UndefinedColumn => e
warn e.message
puts "Skip deploy task."
ensure
# Update task as completed. If you remove the line below, the task will
# run with every deploy (or every time you call after_party:run).
AfterParty::TaskRecord
.create version: AfterParty::TaskRecorder.new(__FILE__).timestamp
end end
progress.finish
# Update task as completed. If you remove the line below, the task will
# run with every deploy (or every time you call after_party:run).
AfterParty::TaskRecord
.create version: AfterParty::TaskRecorder.new(__FILE__).timestamp
end end
end end

View file

@ -34,17 +34,17 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do
context 'when the routage is not activated on the procedure' do context 'when the routage is not activated on the procedure' do
let(:procedure) { create :procedure, administrateur: admin, instructeurs: [instructeur_assigned_1, instructeur_assigned_2] } let(:procedure) { create :procedure, administrateur: admin, instructeurs: [instructeur_assigned_1, instructeur_assigned_2] }
let!(:instructeur_assigned_1) { create :instructeur, email: 'instructeur_1@ministere_a.gouv.fr', administrateurs: [admin] } let!(:instructeur_assigned_1) { create :instructeur, email: 'instructeur_1@ministere-a.gouv.fr', administrateurs: [admin] }
let!(:instructeur_assigned_2) { create :instructeur, email: 'instructeur_2@ministere_b.gouv.fr', administrateurs: [admin] } let!(:instructeur_assigned_2) { create :instructeur, email: 'instructeur_2@ministere-b.gouv.fr', administrateurs: [admin] }
let!(:instructeur_not_assigned_1) { create :instructeur, email: 'instructeur_3@ministere_a.gouv.fr', administrateurs: [admin] } let!(:instructeur_not_assigned_1) { create :instructeur, email: 'instructeur_3@ministere-a.gouv.fr', administrateurs: [admin] }
let!(:instructeur_not_assigned_2) { create :instructeur, email: 'instructeur_4@ministere_b.gouv.fr', administrateurs: [admin] } let!(:instructeur_not_assigned_2) { create :instructeur, email: 'instructeur_4@ministere-b.gouv.fr', administrateurs: [admin] }
subject! { get :show, params: { procedure_id: procedure.id, id: gi_1_1.id } } subject! { get :show, params: { procedure_id: procedure.id, id: gi_1_1.id } }
it { expect(response.status).to eq(200) } it { expect(response.status).to eq(200) }
it 'sets the assigned and not assigned instructeurs' do it 'sets the assigned and not assigned instructeurs' do
expect(assigns(:instructeurs)).to match_array([instructeur_assigned_1, instructeur_assigned_2]) expect(assigns(:instructeurs)).to match_array([instructeur_assigned_1, instructeur_assigned_2])
expect(assigns(:available_instructeur_emails)).to match_array(['instructeur_3@ministere_a.gouv.fr', 'instructeur_4@ministere_b.gouv.fr']) expect(assigns(:available_instructeur_emails)).to match_array(['instructeur_3@ministere-a.gouv.fr', 'instructeur_4@ministere-b.gouv.fr'])
end end
end end
end end
@ -324,9 +324,9 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do
describe '#remove_instructeur_procedure_non_routee' do describe '#remove_instructeur_procedure_non_routee' do
let(:procedure) { create :procedure, administrateur: admin, instructeurs: [instructeur_assigned_1, instructeur_assigned_2] } let(:procedure) { create :procedure, administrateur: admin, instructeurs: [instructeur_assigned_1, instructeur_assigned_2] }
let!(:instructeur_assigned_1) { create :instructeur, email: 'instructeur_1@ministere_a.gouv.fr', administrateurs: [admin] } let!(:instructeur_assigned_1) { create :instructeur, email: 'instructeur_1@ministere-a.gouv.fr', administrateurs: [admin] }
let!(:instructeur_assigned_2) { create :instructeur, email: 'instructeur_2@ministere_b.gouv.fr', administrateurs: [admin] } let!(:instructeur_assigned_2) { create :instructeur, email: 'instructeur_2@ministere-b.gouv.fr', administrateurs: [admin] }
let!(:instructeur_assigned_3) { create :instructeur, email: 'instructeur_3@ministere_a.gouv.fr', administrateurs: [admin] } let!(:instructeur_assigned_3) { create :instructeur, email: 'instructeur_3@ministere-a.gouv.fr', administrateurs: [admin] }
subject! { get :show, params: { procedure_id: procedure.id, id: gi_1_1.id } } subject! { get :show, params: { procedure_id: procedure.id, id: gi_1_1.id } }
it 'sets the assigned instructeurs' do it 'sets the assigned instructeurs' do
expect(assigns(:instructeurs)).to match_array([instructeur_assigned_1, instructeur_assigned_2]) expect(assigns(:instructeurs)).to match_array([instructeur_assigned_1, instructeur_assigned_2])
@ -418,8 +418,8 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do
describe '#export_groupe_instructeurs' do describe '#export_groupe_instructeurs' do
let(:procedure) { create(:procedure, :published) } let(:procedure) { create(:procedure, :published) }
let(:gi_1_2) { procedure.groupe_instructeurs.create(label: 'groupe instructeur 1 2') } let(:gi_1_2) { procedure.groupe_instructeurs.create(label: 'groupe instructeur 1 2') }
let(:instructeur_assigned_1) { create :instructeur, email: 'instructeur_1@ministere_a.gouv.fr', administrateurs: [admin] } let(:instructeur_assigned_1) { create :instructeur, email: 'instructeur_1@ministere-a.gouv.fr', administrateurs: [admin] }
let(:instructeur_assigned_2) { create :instructeur, email: 'instructeur_2@ministere_b.gouv.fr', administrateurs: [admin] } let(:instructeur_assigned_2) { create :instructeur, email: 'instructeur_2@ministere-b.gouv.fr', administrateurs: [admin] }
subject do subject do
get :export_groupe_instructeurs, params: { procedure_id: procedure.id, format: :csv } get :export_groupe_instructeurs, params: { procedure_id: procedure.id, format: :csv }

View file

@ -234,9 +234,14 @@ describe Users::SessionsController, type: :controller do
end end
context 'when the email is evil' do context 'when the email is evil' do
let(:link_email) { 'Hello, I am an evil email' } [
'Hello, I am an evil email',
'a@a%C2%A0evil%C2%A0text%C2%A0with%C2%A0spaces'
].each do |evil_attempt|
let(:link_email) { evil_attempt }
it { expect(response).to redirect_to(root_path) } it { expect(response).to redirect_to(root_path) }
end
end end
end end
end end