gestionnaire invited on dossier for avis, can update Avis

This commit is contained in:
Simon Lehericey 2017-05-24 18:45:31 +02:00
parent f24e4a77d3
commit f6359cb7aa
7 changed files with 86 additions and 1 deletions

View file

@ -17,14 +17,30 @@ class Backoffice::AvisController < ApplicationController
redirect_to backoffice_dossier_path(dossier)
end
def update
if avis.update(update_params)
flash[:notice] = 'Merci, votre avis a été enregistré.'
end
redirect_to backoffice_dossier_path(avis.dossier_id)
end
private
def dossier
current_gestionnaire.dossiers.find(params[:dossier_id])
end
def avis
current_gestionnaire.avis.find(params[:id])
end
def create_params
params.require(:avis).permit(:email, :introduction)
end
def update_params
params.require(:avis).permit(:answer)
end
end

View file

@ -4,6 +4,7 @@ class Avis < ApplicationRecord
scope :with_answer, -> { where.not(answer: nil) }
scope :without_answer, -> { where(answer: nil) }
scope :for_dossier, ->(dossier_id) { where(dossier_id: dossier_id) }
scope :by_latest, -> { order(updated_at: :desc) }
def email_to_display

View file

@ -1,3 +1,5 @@
= render partial: 'dossiers/edit_avis', locals: { dossier_facade: @facade }
= render partial: 'dossiers/messagerie', locals: { dossier_facade: @facade }
- if @facade.procedure.individual_with_siret

View file

@ -0,0 +1,13 @@
- if current_gestionnaire
- avis_for_dossier = current_gestionnaire.avis.for_dossier(dossier_facade.dossier.id).by_latest
- if avis_for_dossier.any?
.panel.panel-default
.panel-body
%h4 Votre avis est sollicité sur le dossier :
- avis_for_dossier.each do |avis|
%hr
%p= avis.introduction
= simple_form_for avis, url: backoffice_dossier_avis_path(dossier_facade.dossier, avis) do |f|
= f.input 'answer', label: "Votre avis"
- submit_label = if avis.answer then "Modifier votre avis" else "Enregistrer votre avis" end
= f.submit submit_label, class: 'btn btn-default'

View file

@ -181,7 +181,7 @@ Rails.application.routes.draw do
post 'reopen' => 'dossiers#reopen'
put 'follow' => 'dossiers#follow'
resources :commentaires, only: [:index]
resources :avis, only: [:create]
resources :avis, only: [:create, :update]
end
namespace :dossiers do

View file

@ -32,4 +32,38 @@ describe Backoffice::AvisController, type: :controller do
end
end
describe '#POST update' do
let(:gestionnaire){ create(:gestionnaire) }
let(:dossier){ create(:dossier, state: 'received') }
let(:avis){ create(:avis, dossier: dossier, gestionnaire: gestionnaire )}
subject { post :update, params: { dossier_id: dossier.id, id: avis.id, avis: { answer: "Ok ce dossier est valide." } } }
context 'when gestionnaire is not authenticated' do
it { is_expected.to redirect_to new_user_session_path }
it { expect(avis.answer).to be_nil }
end
context 'when gestionnaire is authenticated' do
before do
sign_in gestionnaire
end
context 'and is invited on dossier' do
it { is_expected.to redirect_to backoffice_dossier_path(dossier.id) }
it do
subject
expect(avis.reload.answer).to eq("Ok ce dossier est valide.")
end
end
context 'but is not invited on dossier' do
let(:gestionnaire2) { create(:gestionnaire) }
let(:avis){ create(:avis, dossier: dossier, gestionnaire: gestionnaire2 )}
it { expect{ subject }.to raise_error(ActiveRecord::RecordNotFound) }
end
end
end
end

View file

@ -109,6 +109,25 @@ describe Backoffice::DossiersController, type: :controller do
it { expect(subject).to redirect_to('/backoffice') }
end
describe 'he can invite somebody for avis' do
render_views
it { expect(subject.body).to include("Invitez une personne externe à consulter le dossier et à vous donner un avis sur celui ci.") }
end
context 'and is invited on a dossier' do
let(:dossier_invited){ create(:dossier, procedure: create(:procedure)) }
let!(:avis){ create(:avis, dossier: dossier_invited, gestionnaire: gestionnaire) }
subject { get :show, params: { id: dossier_invited.id } }
render_views
it { expect(subject.status).to eq(200) }
it { expect(subject.body).to include("Votre avis est sollicité sur le dossier") }
it { expect(subject.body).to_not include("Invitez une personne externe à consulter le dossier et à vous donner un avis sur celui ci.") }
end
end
context 'gestionnaire does not connected but dossier id is correct' do