Merge branch 'dev'

This commit is contained in:
gregoirenovel 2018-12-26 18:19:16 +01:00
commit a2366caa2a
17 changed files with 125 additions and 36 deletions

View file

@ -10,6 +10,7 @@ class Pipedrive::PersonAdapter
nom: datum['name'], nom: datum['name'],
poste: datum[PIPEDRIVE_POSTE_ATTRIBUTE_ID], poste: datum[PIPEDRIVE_POSTE_ATTRIBUTE_ID],
email: datum.dig('email', 0, 'value'), email: datum.dig('email', 0, 'value'),
tel: datum.dig('phone', 0, 'value'),
organisation: datum['org_name'] organisation: datum['org_name']
} }
end end

View file

@ -140,7 +140,7 @@ class Gestionnaire < ApplicationRecord
end end
def login_token_valid?(login_token) def login_token_valid?(login_token)
BCrypt::Password.new(encrypted_login_token) == login_token BCrypt::Password.new(encrypted_login_token) == login_token &&
30.minutes.ago < login_token_created_at 30.minutes.ago < login_token_created_at
rescue BCrypt::Errors::InvalidHash rescue BCrypt::Errors::InvalidHash
false false

View file

@ -1,7 +1,7 @@
- content_for(:title, 'Expiration du délai de conservation des dossiers') - content_for(:title, 'Expiration du délai de conservation des dossiers')
- if @expired_dossiers.present? - if @expired_dossiers.present?
%h1= t('mail.administration.dossier_expiration_summary.expired_dossiers', count: @expired_dossiers.count) %h2= t('mail.administration.dossier_expiration_summary.expired_dossiers', count: @expired_dossiers.count)
- @expired_dossiers.group_by(&:procedure).each do |procedure, dossiers| - @expired_dossiers.group_by(&:procedure).each do |procedure, dossiers|
%dl %dl
%dt %dt
@ -10,7 +10,7 @@
= dossiers.map { |d| link_to(d.id, manager_dossier_url(d)) }.join(', ').html_safe = dossiers.map { |d| link_to(d.id, manager_dossier_url(d)) }.join(', ').html_safe
- if @expiring_dossiers.present? - if @expiring_dossiers.present?
%h1= t('mail.administration.dossier_expiration_summary.expiring_dossiers', count: @expiring_dossiers.count) %h2= t('mail.administration.dossier_expiration_summary.expiring_dossiers', count: @expiring_dossiers.count)
- @expiring_dossiers.group_by(&:procedure).each do |procedure, dossiers| - @expiring_dossiers.group_by(&:procedure).each do |procedure, dossiers|
%dl %dl
%dt %dt

View file

@ -1,5 +1,4 @@
- content_for(:title, 'Vous avez été invité à donner votre avis') - content_for(:title, 'Invitation à donner votre avis')
- avis_link = @avis.gestionnaire.present? ? gestionnaire_avis_url(@avis) : sign_up_gestionnaire_avis_url(@avis.id, @avis.email) - avis_link = @avis.gestionnaire.present? ? gestionnaire_avis_url(@avis) : sign_up_gestionnaire_avis_url(@avis.id, @avis.email)
- content_for(:footer) do - content_for(:footer) do
@ -21,7 +20,7 @@
%p %p
= "#{@avis.claimant.email} vous a écrit :" = "#{@avis.claimant.email} vous a écrit :"
%br %br
%p{ style: "padding: 8px; color: #333333; background-color: #EEEEEE; font-size: 16px;" } %p{ style: "padding: 8px; color: #333333; background-color: #EEEEEE; font-size: 14px;" }
= @avis.introduction = @avis.introduction
- if @avis.gestionnaire.present? - if @avis.gestionnaire.present?

View file

@ -1,8 +1,14 @@
- content_for(:title, @subject) - content_for(:title, @subject)
%p
Bonjour,
%p
Voici le résumé de votre activité hebdomadaire :
- @overview[:procedure_overviews].each_with_index do |procedure_overview, index| - @overview[:procedure_overviews].each_with_index do |procedure_overview, index|
%h2{ style: 'font-size: 20px; font-weight: 300; margin: 25px 0 5px;' } %h2{ style: 'font-size: 16px; font-weight: 300; margin: 25px 0 5px;' }
#{procedure_overview.procedure.libelle} #{procedure_overview.procedure.libelle}
= link_to 'voir', gestionnaire_procedure_url(procedure_overview.procedure), style: 'color: #0069CC; font-size: 14px;' = link_to 'voir', gestionnaire_procedure_url(procedure_overview.procedure), style: 'color: #0069CC; font-size: 14px;'
%table{ cellpadding: '0', cellspacing: '0', style: 'width: 100%; padding-bottom: 20px;' } %table{ cellpadding: '0', cellspacing: '0', style: 'width: 100%; padding-bottom: 20px;' }

View file

@ -4,7 +4,9 @@
%p %p
L'utilisateur L'utilisateur
= @invite.email_sender = @invite.email_sender
souhaite que vous participiez à l'élaboration d'un dossier sur demarches-simplifiees.fr. souhaite que vous participiez à l'élaboration d'un dossier pour la démarche
%strong= @invite.dossier.procedure.libelle
sur demarches-simplifiees.fr.
%p %p
Cette plateforme permet à ses utilisateurs d'établir des dossiers 100 % en ligne et de dialoguer avec plusieurs interlocuteurs privilégiés avant d'instruire un dépot. Cette plateforme permet à ses utilisateurs d'établir des dossiers 100 % en ligne et de dialoguer avec plusieurs interlocuteurs privilégiés avant d'instruire un dépot.

View file

@ -10,7 +10,7 @@
#navbar-body #navbar-body
.row .row
%div{ style: "vertical-align: middle;float:left;position:absolute;line-height: 60px;z-index:2;" } %div{ style: "vertical-align: middle;float:left;position:absolute;line-height: 60px;z-index:2;" }
Besoin d'aide ? <a href="tel:#{CONTACT_PHONE}">#{CONTACT_PHONE}</a> ou <a href="mailto:#{CONTACT_EMAIL}">#{CONTACT_EMAIL}</a> Besoin d'aide ? <a href="tel:#{CONTACT_PHONE}">#{CONTACT_PHONE}</a> ou <a href="#{contact_admin_path}" target="_blank">par email</a>
-# BEST WTF EVER -# BEST WTF EVER
-# this begin rescue hides potentials bugs by displaying another navbar -# this begin rescue hides potentials bugs by displaying another navbar
- begin - begin

View file

@ -34,13 +34,14 @@
<%= form_tag(manager_demandes_create_administrateur_path) do -%> <%= form_tag(manager_demandes_create_administrateur_path) do -%>
<%= select_tag "stage_id", <%= select_tag "stage_id",
options_for_select({ options_for_select({
"suspect" => Pipedrive::DealAdapter::PIPEDRIVE_SUSPECTS_COMPTE_CREE_STAGE_ID,
"administration centrale" => Pipedrive::DealAdapter::PIPEDRIVE_ADMIN_CENTRAL_STOCK_STAGE_ID, "administration centrale" => Pipedrive::DealAdapter::PIPEDRIVE_ADMIN_CENTRAL_STOCK_STAGE_ID,
"service déco. régional" => Pipedrive::DealAdapter::PIPEDRIVE_SERVICE_DECO_REGIONAL_STOCK_STAGE_ID, "service déco. régional" => Pipedrive::DealAdapter::PIPEDRIVE_SERVICE_DECO_REGIONAL_STOCK_STAGE_ID,
"service déco. départemental" => Pipedrive::DealAdapter::PIPEDRIVE_SERVICE_DECO_DEPARTEMENTAL_STOCK_STAGE_ID, "service déco. départemental" => Pipedrive::DealAdapter::PIPEDRIVE_SERVICE_DECO_DEPARTEMENTAL_STOCK_STAGE_ID,
"collectivité dép. ou rég." =>Pipedrive::DealAdapter::PIPEDRIVE_COLLECTIVITE_DEP_OU_REG_STOCK_STAGE_ID, "collectivité dép. ou rég." =>Pipedrive::DealAdapter::PIPEDRIVE_COLLECTIVITE_DEP_OU_REG_STOCK_STAGE_ID,
"collectivité locale" => Pipedrive::DealAdapter::PIPEDRIVE_COLLECTIVITE_LOCALE_STOCK_STAGE_ID, "collectivité locale" => Pipedrive::DealAdapter::PIPEDRIVE_COLLECTIVITE_LOCALE_STOCK_STAGE_ID,
"organisme" => Pipedrive::DealAdapter::PIPEDRIVE_ORGANISMES_STOCK_STAGE_ID, "organisme" => Pipedrive::DealAdapter::PIPEDRIVE_ORGANISMES_STOCK_STAGE_ID
"suspect" => Pipedrive::DealAdapter::PIPEDRIVE_SUSPECTS_COMPTE_CREE_STAGE_ID
}), }),
style: 'margin-bottom: 20px; width: inherit;' %> style: 'margin-bottom: 20px; width: inherit;' %>

View file

@ -255,11 +255,11 @@ describe Users::SessionsController, type: :controller do
let(:gestionnaire) { create(:gestionnaire) } let(:gestionnaire) { create(:gestionnaire) }
before do before do
allow(controller).to receive(:trust_device) allow(controller).to receive(:trust_device)
post :sign_in_by_link, params: { id: gestionnaire.id, login_token: login_token } post :sign_in_by_link, params: { id: gestionnaire.id, jeton: jeton }
end end
context 'when the token is valid' do context 'when the token is valid' do
let(:login_token) { gestionnaire.login_token! } let(:jeton) { gestionnaire.login_token! }
# TODO when the gestionnaire has no other account, and the token is valid, and the user signing in was not starting a demarche, # TODO when the gestionnaire has no other account, and the token is valid, and the user signing in was not starting a demarche,
# redirect to root_path, then redirect to gestionnaire_procedures_path (see root_controller) # redirect to root_path, then redirect to gestionnaire_procedures_path (see root_controller)
@ -269,7 +269,7 @@ describe Users::SessionsController, type: :controller do
end end
context 'when the token is invalid' do context 'when the token is invalid' do
let(:login_token) { 'invalid_token' } let(:jeton) { 'invalid_token' }
it { is_expected.to redirect_to new_user_session_path } it { is_expected.to redirect_to new_user_session_path }
it { expect(controller.current_gestionnaire).to be_nil } it { expect(controller.current_gestionnaire).to be_nil }
@ -286,11 +286,11 @@ describe Users::SessionsController, type: :controller do
let!(:administrateur) { create(:administrateur, email: email, password: password) } let!(:administrateur) { create(:administrateur, email: email, password: password) }
before do before do
post :sign_in_by_link, params: { id: gestionnaire.id, login_token: login_token } post :sign_in_by_link, params: { id: gestionnaire.id, jeton: jeton }
end end
context 'when the token is valid' do context 'when the token is valid' do
let(:login_token) { gestionnaire.login_token! } let(:jeton) { gestionnaire.login_token! }
it { expect(controller.current_gestionnaire).to eq(gestionnaire) } it { expect(controller.current_gestionnaire).to eq(gestionnaire) }
it { expect(controller.current_administrateur).to eq(administrateur) } it { expect(controller.current_administrateur).to eq(administrateur) }

View file

@ -1,5 +1,7 @@
class AdministrateurMailerPreview < ActionMailer::Preview class AdministrateurMailerPreview < ActionMailer::Preview
def activate_before_expiration def activate_before_expiration
AdministrateurMailer.activate_before_expiration(Administrateur.inactive.where.not(reset_password_token: nil).last) administrateur = Administrateur.new(reset_password_sent_at: Time.now.utc)
AdministrateurMailer.activate_before_expiration(administrateur, "a4d4e4f4b4d445")
end end
end end

View file

@ -1,17 +1,42 @@
class AdministrationMailerPreview < ActionMailer::Preview class AdministrationMailerPreview < ActionMailer::Preview
def dubious_procedures def dubious_procedures
procedures_and_champs = [ procedures_and_champs = [
[Procedure.first, [TypeDeChamp.new(libelle: 'iban'), TypeDeChamp.new(libelle: 'religion')]], [procedure_1, [TypeDeChamp.new(libelle: 'iban'), TypeDeChamp.new(libelle: 'religion')]],
[Procedure.last, [TypeDeChamp.new(libelle: 'iban'), TypeDeChamp.new(libelle: 'numéro de carte bleu')]] [procedure_2, [TypeDeChamp.new(libelle: 'iban'), TypeDeChamp.new(libelle: 'numéro de carte bleu')]]
] ]
AdministrationMailer.dubious_procedures(procedures_and_champs) AdministrationMailer.dubious_procedures(procedures_and_champs)
end end
def invite_admin def invite_admin
AdministrationMailer.invite_admin(Administrateur.last, "12345678", 0) AdministrationMailer.invite_admin(administrateur, "12345678", 0)
end end
def refuse_admin def refuse_admin
AdministrationMailer.refuse_admin('bad_admin@pipo.com') AdministrationMailer.refuse_admin('bad_admin@pipo.com')
end end
def new_admin
administration = Administration.new(email: 'superadmin@demarches-simplifiees.fr')
AdministrationMailer.new_admin_email(administrateur, administration)
end
def dossier_expiration_summary
expiring_dossiers = [Dossier.new(id: 100, procedure: procedure_1)]
expired_dossiers = [Dossier.new(id: 100, procedure: procedure_2)]
AdministrationMailer.dossier_expiration_summary(expiring_dossiers, expired_dossiers)
end
private
def procedure_1
Procedure.new(id: 10, libelle: "Démarche des marches", administrateur: administrateur)
end
def procedure_2
Procedure.new(id: 20, libelle: "Démarche pieds", administrateur: administrateur)
end
def administrateur
Administrateur.new(id: 111, email: "chef.de.service@administration.gouv.fr")
end
end end

View file

@ -1,6 +1,11 @@
# Preview all emails at http://localhost:3000/rails/mailers/avis_mailer # Preview all emails at http://localhost:3000/rails/mailers/avis_mailer
class AvisMailerPreview < ActionMailer::Preview class AvisMailerPreview < ActionMailer::Preview
def avis_invitation def avis_invitation
AvisMailer.avis_invitation(Avis.last) gestionaire = Gestionnaire.new(id: 1, email: 'jeanmichel.de-chauvigny@exemple.fr')
avis = Avis.new(id: 1, email: 'test@exemple.fr', claimant: gestionaire)
avis.dossier = Dossier.new(id: 1)
avis.dossier.procedure = Procedure.new(libelle: 'Démarche pour faire des marches')
avis.introduction = 'Il faudrait vérifier le certificat de conformité.'
AvisMailer.avis_invitation(avis)
end end
end end

View file

@ -1,9 +1,15 @@
class DeviseUserMailerPreview < ActionMailer::Preview class DeviseUserMailerPreview < ActionMailer::Preview
def confirmation_instructions def confirmation_instructions
DeviseUserMailer.confirmation_instructions(User.first, "faketoken", {}) DeviseUserMailer.confirmation_instructions(user, "faketoken", {})
end end
def reset_password_instructions def reset_password_instructions
DeviseUserMailer.reset_password_instructions(User.first, "faketoken", {}) DeviseUserMailer.reset_password_instructions(user, "faketoken", {})
end
private
def user
User.new(id: 10, email: "usager@example.com")
end end
end end

View file

@ -1,18 +1,32 @@
# Preview all emails at http://localhost:3000/rails/mailers/dossier_mailer # Preview all emails at http://localhost:3000/rails/mailers/dossier_mailer
class DossierMailerPreview < ActionMailer::Preview class DossierMailerPreview < ActionMailer::Preview
def notify_new_draft def notify_new_draft
DossierMailer.notify_new_draft(Dossier.last) DossierMailer.notify_new_draft(dossier)
end end
def notify_new_answer def notify_new_answer
DossierMailer.notify_new_answer(Dossier.last) DossierMailer.notify_new_answer(dossier)
end end
def notify_deletion_to_user def notify_deletion_to_user
DossierMailer.notify_deletion_to_user(DeletedDossier.last, "user@ds.fr") DossierMailer.notify_deletion_to_user(deleted_dossier, "user@ds.fr")
end end
def notify_deletion_to_administration def notify_deletion_to_administration
DossierMailer.notify_deletion_to_administration(DeletedDossier.last, "admin@ds.fr") DossierMailer.notify_deletion_to_administration(deleted_dossier, "admin@ds.fr")
end
private
def deleted_dossier
DeletedDossier.new(dossier_id: 1, procedure: procedure)
end
def dossier
Dossier.new(id: 1, procedure: procedure, user: User.new(email: "usager@example.com"))
end
def procedure
Procedure.new(libelle: 'Démarche pour des marches')
end end
end end

View file

@ -1,14 +1,35 @@
class GestionnaireMailerPreview < ActionMailer::Preview class GestionnaireMailerPreview < ActionMailer::Preview
def last_week_overview def last_week_overview
gestionnaire = Gestionnaire.first GestionnaireMailer.last_week_overview(Gestionnaire.first)
GestionnaireMailer.last_week_overview(gestionnaire)
end end
def send_dossier def send_dossier
GestionnaireMailer.send_dossier(Gestionnaire.first, Dossier.first, Gestionnaire.last) GestionnaireMailer.send_dossier(gestionnaire, Dossier.new(id: 10, procedure: procedure), target_gestionnaire)
end end
def send_login_token def send_login_token
GestionnaireMailer.send_login_token(Gestionnaire.first, "token") GestionnaireMailer.send_login_token(gestionnaire, "token")
end
def invite_gestionnaire
GestionnaireMailer.invite_gestionnaire(gestionnaire, 'aedfa0d0')
end
def user_to_gestionnaire
GestionnaireMailer.user_to_gestionnaire(gestionnaire.email)
end
private
def gestionnaire
Gestionnaire.new(id: 10, email: 'instructeur@administration.gouv.fr')
end
def target_gestionnaire
Gestionnaire.new(id: 12, email: 'collegue@administration.gouv.fr')
end
def procedure
Procedure.new(id: 15)
end end
end end

View file

@ -1,5 +1,11 @@
class UserMailerPreview < ActionMailer::Preview class UserMailerPreview < ActionMailer::Preview
def new_account_warning def new_account_warning
UserMailer.new_account_warning(User.first) UserMailer.new_account_warning(user)
end
private
def user
User.new(id: 10, email: 'test@exemple.fr')
end end
end end

View file

@ -27,10 +27,11 @@ module FeatureHelpers
if sign_in_by_link if sign_in_by_link
mail = ActionMailer::Base.deliveries.last mail = ActionMailer::Base.deliveries.last
message = mail.body.parts.join(&:to_s) message = mail.html_part.body.raw_source
login_token = message[/connexion-par-jeton\/(.*)/, 1] gestionnaire_id = message[/\".+\/connexion-par-jeton\/(.+)\?jeton=(.*)\"/, 1]
jeton = message[/\".+\/connexion-par-jeton\/(.+)\?jeton=(.*)\"/, 2]
visit sign_in_by_link_path(login_token) visit sign_in_by_link_path(gestionnaire_id, jeton: jeton)
end end
end end