Merge branch 'main' into 6649-etq-usager-instructeur-rendre-la-suppression-plus-visible
This commit is contained in:
commit
e7d9d047fe
59 changed files with 686 additions and 240 deletions
90
spec/controllers/agent_connect/agent_controller_spec.rb
Normal file
90
spec/controllers/agent_connect/agent_controller_spec.rb
Normal file
|
@ -0,0 +1,90 @@
|
|||
describe AgentConnect::AgentController, type: :controller do
|
||||
describe '#callback' do
|
||||
let(:email) { 'i@email.com' }
|
||||
subject { get :callback, params: { code: code } }
|
||||
|
||||
context 'when the callback code is correct' do
|
||||
let(:code) { 'correct' }
|
||||
let(:user_info) { { 'sub' => 'sub', 'email' => ' I@email.com' } }
|
||||
|
||||
context 'and user_info returns some info' do
|
||||
before do
|
||||
expect(AgentConnectService).to receive(:user_info).and_return(user_info)
|
||||
end
|
||||
|
||||
context 'and the instructeur does not have an account yet' do
|
||||
before do
|
||||
expect(controller).to receive(:sign_in)
|
||||
end
|
||||
|
||||
it 'creates the user, signs in and redirects to procedure_path' do
|
||||
expect { subject }.to change { User.count }.by(1).and change { Instructeur.count }.by(1)
|
||||
|
||||
last_user = User.last
|
||||
|
||||
expect(last_user.email).to eq(email)
|
||||
expect(last_user.confirmed_at).to be_present
|
||||
expect(last_user.instructeur.agent_connect_id).to eq('sub')
|
||||
expect(response).to redirect_to(instructeur_procedures_path)
|
||||
end
|
||||
end
|
||||
|
||||
context 'and the instructeur already has an account' do
|
||||
let!(:instructeur) { create(:instructeur, email: email) }
|
||||
|
||||
before do
|
||||
expect(controller).to receive(:sign_in)
|
||||
end
|
||||
|
||||
it 'reuses the account, signs in and redirects to procedure_path' do
|
||||
expect { subject }.to change { User.count }.by(0).and change { Instructeur.count }.by(0)
|
||||
|
||||
instructeur.reload
|
||||
|
||||
expect(instructeur.agent_connect_id).to eq('sub')
|
||||
expect(response).to redirect_to(instructeur_procedures_path)
|
||||
end
|
||||
end
|
||||
|
||||
context 'and the instructeur already has an account as a user' do
|
||||
let!(:user) { create(:user, email: email) }
|
||||
|
||||
before do
|
||||
expect(controller).to receive(:sign_in)
|
||||
end
|
||||
|
||||
it 'reuses the account, signs in and redirects to procedure_path' do
|
||||
expect { subject }.to change { User.count }.by(0).and change { Instructeur.count }.by(1)
|
||||
|
||||
instructeur = user.reload.instructeur
|
||||
|
||||
expect(instructeur.agent_connect_id).to eq('sub')
|
||||
expect(response).to redirect_to(instructeur_procedures_path)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'but user_info raises and error' do
|
||||
before do
|
||||
expect(AgentConnectService).to receive(:user_info).and_raise(Rack::OAuth2::Client::Error.new(500, error: 'Unknown'))
|
||||
end
|
||||
|
||||
it 'aborts the processus' do
|
||||
expect { subject }.to change { User.count }.by(0).and change { Instructeur.count }.by(0)
|
||||
|
||||
expect(response).to redirect_to(new_user_session_path)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'when the callback code is blank' do
|
||||
let(:code) { '' }
|
||||
|
||||
it 'aborts the processus' do
|
||||
expect { subject }.to change { User.count }.by(0).and change { Instructeur.count }.by(0)
|
||||
|
||||
expect(response).to redirect_to(new_user_session_path)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,59 @@
|
|||
RSpec.describe GraphqlOperationLogConcern, type: :controller do
|
||||
class TestController < ActionController::Base
|
||||
include GraphqlOperationLogConcern
|
||||
end
|
||||
|
||||
controller TestController do
|
||||
end
|
||||
|
||||
describe '#operation_log' do
|
||||
let(:query) { nil }
|
||||
let(:variables) { nil }
|
||||
let(:operation_name) { nil }
|
||||
|
||||
subject { controller.operation_log(query, operation_name, variables) }
|
||||
|
||||
context 'with no query' do
|
||||
it { expect(subject).to eq('NoQuery') }
|
||||
end
|
||||
|
||||
context 'with invalid query' do
|
||||
let(:query) { 'query { demarche {} }' }
|
||||
|
||||
it { expect(subject).to eq('InvalidQuery') }
|
||||
end
|
||||
|
||||
context 'with two queries' do
|
||||
let(:query) { 'query demarche { demarche } query dossier { dossier }' }
|
||||
let(:operation_name) { 'dossier' }
|
||||
|
||||
it { expect(subject).to eq('query: dossier { dossier }') }
|
||||
end
|
||||
|
||||
context 'with arguments' do
|
||||
let(:query) { 'query demarche { demarche(number: 123) { id } }' }
|
||||
|
||||
it { expect(subject).to eq('query: demarche { demarche } number: "123"') }
|
||||
end
|
||||
|
||||
context 'with variables' do
|
||||
let(:query) { 'query { demarche(number: 123) { id } }' }
|
||||
let(:variables) { { number: 124 } }
|
||||
|
||||
it { expect(subject).to eq('query: { demarche } number: "124"') }
|
||||
end
|
||||
|
||||
context 'with mutation and arguments' do
|
||||
let(:query) { 'mutation { passerDossierEnInstruction(input: { number: 123 }) { id } }' }
|
||||
|
||||
it { expect(subject).to eq('mutation: { passerDossierEnInstruction } number: "123"') }
|
||||
end
|
||||
|
||||
context 'with mutation and variables' do
|
||||
let(:query) { 'mutation { passerDossierEnInstruction(input: { number: 123 }) { id } }' }
|
||||
let(:variables) { { input: { number: 124 } } }
|
||||
|
||||
it { expect(subject).to eq('mutation: { passerDossierEnInstruction } number: "124"') }
|
||||
end
|
||||
end
|
||||
end
|
|
@ -131,7 +131,7 @@ describe NewAdministrateur::ServicesController, type: :controller do
|
|||
end
|
||||
|
||||
it { expect(service.reload).not_to be_nil }
|
||||
it { expect(flash.alert).to eq("la démarche #{procedure.libelle} utilise encore le service service. Veuillez l'affecter à un autre service avant de pouvoir le supprimer") }
|
||||
it { expect(flash.alert).to eq("la démarche #{procedure.libelle} utilise encore le service #{service.nom}. Veuillez l'affecter à un autre service avant de pouvoir le supprimer") }
|
||||
it { expect(flash.notice).to be_nil }
|
||||
it { expect(response).to redirect_to(admin_services_path(procedure_id: 12)) }
|
||||
end
|
||||
|
|
|
@ -1,15 +1,35 @@
|
|||
describe RechercheController, type: :controller do
|
||||
let(:dossier) { create(:dossier, :en_construction, :with_populated_annotations) }
|
||||
let(:dossier2) { create(:dossier, :en_construction, procedure: dossier.procedure) }
|
||||
let(:procedure) {
|
||||
create(:procedure,
|
||||
:published,
|
||||
:for_individual,
|
||||
:with_type_de_champ,
|
||||
:with_type_de_champ_private,
|
||||
types_de_champ_count: 2,
|
||||
types_de_champ_private_count: 2)
|
||||
}
|
||||
let(:dossier) { create(:dossier, :en_construction, :with_individual, procedure: procedure) }
|
||||
let(:instructeur) { create(:instructeur) }
|
||||
|
||||
let(:dossier_with_expert) { avis.dossier }
|
||||
let(:avis) { create(:avis, dossier: create(:dossier, :en_construction, :with_populated_annotations)) }
|
||||
let(:dossier_with_expert) { create(:dossier, :en_construction, :with_individual, procedure: procedure) }
|
||||
let(:avis) { create(:avis, dossier: dossier_with_expert) }
|
||||
|
||||
let(:user) { instructeur.user }
|
||||
|
||||
before do
|
||||
instructeur.assign_to_procedure(dossier.procedure)
|
||||
|
||||
dossier.champs[0].value = "Name of district A"
|
||||
dossier.champs[1].value = "Name of city A"
|
||||
dossier.champs_private[0].value = "Dossier A is complete"
|
||||
dossier.champs_private[1].value = "Dossier A is valid"
|
||||
dossier.save!
|
||||
|
||||
dossier_with_expert.champs[0].value = "Name of district B"
|
||||
dossier_with_expert.champs[1].value = "name of city B"
|
||||
dossier_with_expert.champs_private[0].value = "Dossier B is incomplete"
|
||||
dossier_with_expert.champs_private[1].value = "Dossier B is invalid"
|
||||
dossier_with_expert.save!
|
||||
end
|
||||
|
||||
describe 'GET #index' do
|
||||
|
@ -46,8 +66,8 @@ describe RechercheController, type: :controller do
|
|||
end
|
||||
|
||||
context 'when instructeur do not own the dossier' do
|
||||
let(:dossier3) { create(:dossier, :en_construction) }
|
||||
let(:query) { dossier3.id }
|
||||
let(:dossier2) { create(:dossier, :en_construction) }
|
||||
let(:query) { dossier2.id }
|
||||
|
||||
it { is_expected.to have_http_status(200) }
|
||||
|
||||
|
@ -69,29 +89,49 @@ describe RechercheController, type: :controller do
|
|||
end
|
||||
end
|
||||
|
||||
describe 'by private annotations' do
|
||||
context 'when instructeur search by private annotations' do
|
||||
let(:query) { dossier.private_search_terms }
|
||||
describe 'by champs' do
|
||||
let(:query) { 'district A' }
|
||||
|
||||
before { subject }
|
||||
before { subject }
|
||||
|
||||
it { is_expected.to have_http_status(200) }
|
||||
it { is_expected.to have_http_status(200) }
|
||||
|
||||
it 'returns the expected dossier' do
|
||||
expect(assigns(:projected_dossiers).count).to eq(1)
|
||||
expect(assigns(:projected_dossiers).first.dossier_id).to eq(dossier.id)
|
||||
end
|
||||
it 'returns the expected dossier' do
|
||||
expect(assigns(:projected_dossiers).count).to eq(1)
|
||||
expect(assigns(:projected_dossiers).first.dossier_id).to eq(dossier.id)
|
||||
end
|
||||
|
||||
context 'when expert search by private annotations' do
|
||||
context 'as an expert' do
|
||||
let(:user) { avis.experts_procedure.expert.user }
|
||||
let(:query) { dossier_with_expert.private_search_terms }
|
||||
|
||||
before { subject }
|
||||
let(:query) { 'district' }
|
||||
|
||||
it { is_expected.to have_http_status(200) }
|
||||
|
||||
it 'returns 0 dossiers' do
|
||||
it 'returns only the dossier available to the expert' do
|
||||
expect(assigns(:projected_dossiers).count).to eq(1)
|
||||
expect(assigns(:projected_dossiers).first.dossier_id).to eq(dossier_with_expert.id)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe 'by private annotations' do
|
||||
let(:query) { 'invalid' }
|
||||
|
||||
before { subject }
|
||||
|
||||
it { is_expected.to have_http_status(200) }
|
||||
|
||||
it 'returns the expected dossier' do
|
||||
expect(assigns(:projected_dossiers).count).to eq(1)
|
||||
expect(assigns(:projected_dossiers).first.dossier_id).to eq(dossier_with_expert.id)
|
||||
end
|
||||
|
||||
context 'as an expert' do
|
||||
let(:user) { avis.experts_procedure.expert.user }
|
||||
|
||||
it { is_expected.to have_http_status(200) }
|
||||
|
||||
it 'does not allow experts to search in private annotations' do
|
||||
expect(assigns(:projected_dossiers).count).to eq(0)
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue