commit
3100b065db
7 changed files with 52 additions and 32 deletions
|
@ -4,8 +4,8 @@
|
|||
#
|
||||
# created_at :datetime
|
||||
# updated_at :datetime
|
||||
# administrateur_id :integer
|
||||
# instructeur_id :integer
|
||||
# administrateur_id :integer not null
|
||||
# instructeur_id :integer not null
|
||||
#
|
||||
class AdministrateursInstructeur < ApplicationRecord
|
||||
belongs_to :administrateur
|
||||
|
|
|
@ -148,7 +148,7 @@ Devise.setup do |config|
|
|||
# Email regex used to validate email formats. It simply asserts that
|
||||
# one (and only one) @ exists in the given string. This is mainly
|
||||
# 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
|
||||
# The time you want to timeout the user session without activity. After this
|
||||
|
|
|
@ -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
|
|
@ -10,7 +10,7 @@
|
|||
#
|
||||
# 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
|
||||
enable_extension "plpgsql"
|
||||
|
@ -64,9 +64,9 @@ ActiveRecord::Schema.define(version: 2022_03_15_113510) do
|
|||
end
|
||||
|
||||
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.integer "instructeur_id"
|
||||
t.integer "instructeur_id", null: false
|
||||
t.datetime "updated_at"
|
||||
t.index ["administrateur_id"], name: "index_administrateurs_instructeurs_on_administrateur_id"
|
||||
t.index ["instructeur_id", "administrateur_id"], name: "unique_couple_administrateur_instructeur", unique: true
|
||||
|
|
|
@ -5,6 +5,7 @@ namespace :after_party do
|
|||
|
||||
Procedure.with_discarded.where(aasm_state: :brouillon).where.not(published_revision_id: nil).update_all(published_revision_id: nil)
|
||||
|
||||
begin
|
||||
types_de_champ = TypeDeChamp.joins(:revision).where('types_de_champ.procedure_id != procedure_revisions.procedure_id')
|
||||
progress = ProgressReport.new(types_de_champ.count)
|
||||
|
||||
|
@ -16,10 +17,14 @@ namespace :after_party do
|
|||
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
|
||||
end
|
||||
|
|
|
@ -34,17 +34,17 @@ describe Administrateurs::GroupeInstructeursController, type: :controller 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!(: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_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_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_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] }
|
||||
subject! { get :show, params: { procedure_id: procedure.id, id: gi_1_1.id } }
|
||||
|
||||
it { expect(response.status).to eq(200) }
|
||||
|
||||
it 'sets the assigned and not assigned instructeurs' do
|
||||
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
|
||||
|
@ -324,9 +324,9 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do
|
|||
|
||||
describe '#remove_instructeur_procedure_non_routee' do
|
||||
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_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_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_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 } }
|
||||
it 'sets the assigned instructeurs' do
|
||||
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
|
||||
let(:procedure) { create(:procedure, :published) }
|
||||
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_2) { create :instructeur, email: 'instructeur_2@ministere_b.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] }
|
||||
|
||||
subject do
|
||||
get :export_groupe_instructeurs, params: { procedure_id: procedure.id, format: :csv }
|
||||
|
|
|
@ -234,9 +234,14 @@ describe Users::SessionsController, type: :controller do
|
|||
end
|
||||
|
||||
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) }
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue