Avis: add claimant gestionnaire to track who asks for an avis

This commit is contained in:
Simon Lehericey 2017-05-23 13:28:17 +02:00
parent 23e57f5cc4
commit 64f7cab3cf
9 changed files with 33 additions and 11 deletions

View file

@ -5,7 +5,7 @@ class Backoffice::AvisController < ApplicationController
before_action :check_avis_exists_and_email_belongs_to_avis, only: [:sign_up, :create_gestionnaire] before_action :check_avis_exists_and_email_belongs_to_avis, only: [:sign_up, :create_gestionnaire]
def create def create
avis = Avis.new(create_params) avis = Avis.new(create_params.merge(claimant: current_gestionnaire))
avis.dossier = dossier avis.dossier = dossier
email = create_params[:email] email = create_params[:email]

View file

@ -1,6 +1,7 @@
class Avis < ApplicationRecord class Avis < ApplicationRecord
belongs_to :dossier belongs_to :dossier
belongs_to :gestionnaire belongs_to :gestionnaire
belongs_to :claimant, class_name: 'Gestionnaire'
after_create :notify_gestionnaire after_create :notify_gestionnaire

View file

@ -3,7 +3,7 @@
%p %p
Bonjour, Bonjour,
%br %br
= "Vous avez été invité à donner votre avis sur le dossier nº #{@avis.dossier.id} de la procédure : #{@avis.dossier.procedure.libelle}." = "Vous avez été invité par #{@avis.claimant.email} à donner votre avis sur le dossier nº #{@avis.dossier.id} de la procédure : #{@avis.dossier.procedure.libelle}."
%br %br
Message de votre interlocuteur : Message de votre interlocuteur :

View file

@ -0,0 +1,5 @@
class AddClaimantToAvis < ActiveRecord::Migration[5.0]
def change
add_reference :avis, :claimant, foreign_key: { to_table: :gestionnaires }, null: false
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: 20170425100757) do ActiveRecord::Schema.define(version: 20170523092900) 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"
@ -79,6 +79,8 @@ ActiveRecord::Schema.define(version: 20170425100757) do
t.integer "dossier_id" t.integer "dossier_id"
t.datetime "created_at", null: false t.datetime "created_at", null: false
t.datetime "updated_at", null: false t.datetime "updated_at", null: false
t.integer "claimant_id", null: false
t.index ["claimant_id"], name: "index_avis_on_claimant_id", using: :btree
t.index ["dossier_id"], name: "index_avis_on_dossier_id", using: :btree t.index ["dossier_id"], name: "index_avis_on_dossier_id", using: :btree
t.index ["gestionnaire_id"], name: "index_avis_on_gestionnaire_id", using: :btree t.index ["gestionnaire_id"], name: "index_avis_on_gestionnaire_id", using: :btree
end end
@ -446,6 +448,7 @@ ActiveRecord::Schema.define(version: 20170425100757) do
t.index ["procedure_id"], name: "index_without_continuation_mails_on_procedure_id", using: :btree t.index ["procedure_id"], name: "index_without_continuation_mails_on_procedure_id", using: :btree
end end
add_foreign_key "avis", "gestionnaires", column: "claimant_id"
add_foreign_key "cerfas", "dossiers" add_foreign_key "cerfas", "dossiers"
add_foreign_key "closed_mails", "procedures" add_foreign_key "closed_mails", "procedures"
add_foreign_key "commentaires", "dossiers" add_foreign_key "commentaires", "dossiers"

View file

@ -75,7 +75,7 @@ describe Backoffice::AvisController, type: :controller do
describe '.sign_up' do describe '.sign_up' do
let(:invited_email) { 'invited@avis.com' } let(:invited_email) { 'invited@avis.com' }
let(:dossier) { create(:dossier) } let(:dossier) { create(:dossier) }
let!(:avis) { Avis.create(email: invited_email, dossier: dossier) } let!(:avis) { create(:avis, email: invited_email, dossier: dossier) }
let(:invitations_email) { true } let(:invitations_email) { true }
context 'when the new gestionnaire has never signed up' do context 'when the new gestionnaire has never signed up' do
@ -101,7 +101,7 @@ describe Backoffice::AvisController, type: :controller do
context 'when the gestionnaire has already signed up and belongs to the invitation' do context 'when the gestionnaire has already signed up and belongs to the invitation' do
let(:gestionnaire) { create(:gestionnaire, email: invited_email) } let(:gestionnaire) { create(:gestionnaire, email: invited_email) }
let!(:avis) { Avis.create(dossier: dossier, gestionnaire: gestionnaire) } let!(:avis) { create(:avis, dossier: dossier, gestionnaire: gestionnaire) }
context 'when the gestionnaire is authenticated' do context 'when the gestionnaire is authenticated' do
before do before do
@ -123,7 +123,7 @@ describe Backoffice::AvisController, type: :controller do
context 'when the gestionnaire has already signed up / is authenticated and does not belong to the invitation' do context 'when the gestionnaire has already signed up / is authenticated and does not belong to the invitation' do
let(:gestionnaire) { create(:gestionnaire, email: 'other@gmail.com') } let(:gestionnaire) { create(:gestionnaire, email: 'other@gmail.com') }
let!(:avis) { Avis.create(email: invited_email, dossier: dossier) } let!(:avis) { create(:avis, email: invited_email, dossier: dossier) }
before do before do
sign_in gestionnaire sign_in gestionnaire
@ -138,7 +138,7 @@ describe Backoffice::AvisController, type: :controller do
describe '.create_gestionnaire' do describe '.create_gestionnaire' do
let(:invited_email) { 'invited@avis.com' } let(:invited_email) { 'invited@avis.com' }
let(:dossier) { create(:dossier) } let(:dossier) { create(:dossier) }
let!(:avis) { Avis.create(email: invited_email, dossier: dossier) } let!(:avis) { create(:avis, email: invited_email, dossier: dossier) }
let(:avis_id) { avis.id } let(:avis_id) { avis.id }
let(:password) { '12345678' } let(:password) { '12345678' }
let(:created_gestionnaire) { Gestionnaire.find_by(email: invited_email) } let(:created_gestionnaire) { Gestionnaire.find_by(email: invited_email) }

View file

@ -13,5 +13,11 @@ FactoryGirl.define do
avis.dossier = create :dossier avis.dossier = create :dossier
end end
end end
before(:create) do |avis, _evaluator|
unless avis.claimant
avis.claimant = create :gestionnaire
end
end
end end
end end

View file

@ -7,7 +7,8 @@ RSpec.describe AvisMailer, type: :mailer do
subject { described_class.you_are_invited_on_dossier(avis) } subject { described_class.you_are_invited_on_dossier(avis) }
it { expect(subject.subject).to eq("Donnez votre avis sur le dossier nº #{avis.dossier.id} (#{avis.dossier.procedure.libelle})") } it { expect(subject.subject).to eq("Donnez votre avis sur le dossier nº #{avis.dossier.id} (#{avis.dossier.procedure.libelle})") }
it { expect(subject.body).to include("Vous avez été invité à donner votre avis sur le dossier nº #{avis.dossier.id} de la procédure : #{avis.dossier.procedure.libelle}.") } it { expect(subject.body).to include("Vous avez été invité par #{avis.claimant.email} à donner votre avis sur le dossier nº #{avis.dossier.id} de la procédure : #{avis.dossier.procedure.libelle}.") }
it { expect(subject.body).to include(avis.introduction) } it { expect(subject.body).to include(avis.introduction) }
end end
end end

View file

@ -1,9 +1,15 @@
require 'rails_helper' require 'rails_helper'
RSpec.describe Avis, type: :model do RSpec.describe Avis, type: :model do
let(:claimant) { create(:gestionnaire) }
describe '.email_to_display' do describe '.email_to_display' do
let(:invited_email) { 'invited@avis.com' } let(:invited_email) { 'invited@avis.com' }
let!(:avis) { Avis.create(email: invited_email, dossier: create(:dossier)) } let!(:avis) do
avis = create(:avis, email: invited_email, dossier: create(:dossier))
avis.gestionnaire = nil
avis
end
subject { avis.email_to_display } subject { avis.email_to_display }
@ -12,7 +18,7 @@ RSpec.describe Avis, type: :model do
end end
context 'when gestionnaire is known' do context 'when gestionnaire is known' do
let!(:avis) { Avis.create(email: nil, gestionnaire: create(:gestionnaire), dossier: create(:dossier)) } let!(:avis) { create(:avis, email: nil, gestionnaire: create(:gestionnaire), dossier: create(:dossier)) }
it{ is_expected.to eq(avis.gestionnaire.email) } it{ is_expected.to eq(avis.gestionnaire.email) }
end end
@ -55,7 +61,7 @@ RSpec.describe Avis, type: :model do
describe '.avis_exists_and_email_belongs_to_avis' do describe '.avis_exists_and_email_belongs_to_avis' do
let(:dossier) { create(:dossier) } let(:dossier) { create(:dossier) }
let(:invited_email) { 'invited@avis.com' } let(:invited_email) { 'invited@avis.com' }
let!(:avis) { Avis.create(email: invited_email, dossier: dossier) } let!(:avis) { create(:avis, email: invited_email, dossier: dossier) }
subject { Avis.avis_exists_and_email_belongs_to_avis?(avis_id, email) } subject { Avis.avis_exists_and_email_belongs_to_avis?(avis_id, email) }