167 lines
6.1 KiB
Ruby
167 lines
6.1 KiB
Ruby
describe Instructeurs::ExportTemplatesController, type: :controller do
|
|
before { sign_in(instructeur.user) }
|
|
let(:tiptap_pdf_name) {
|
|
{
|
|
"type" => "doc",
|
|
"content" => [
|
|
{ "type" => "paragraph", "content" => [{ "text" => "mon_export_", "type" => "text" }, { "type" => "mention", "attrs" => { "id" => "dossier_number", "label" => "numéro du dossier" } }] }
|
|
]
|
|
}.to_json
|
|
}
|
|
|
|
let(:export_template_params) do
|
|
{
|
|
name: "coucou",
|
|
kind: "zip",
|
|
groupe_instructeur_id: groupe_instructeur.id,
|
|
tiptap_pdf_name: tiptap_pdf_name,
|
|
tiptap_default_dossier_directory: {
|
|
"type" => "doc",
|
|
"content" => [
|
|
{ "type" => "paragraph", "content" => [{ "text" => "DOSSIER_", "type" => "text" }, { "type" => "mention", "attrs" => { "id" => "dossier_number", "label" => "numéro du dossier" } }, { "text" => " ", "type" => "text" }] }
|
|
]
|
|
}.to_json,
|
|
tiptap_pj_3: {
|
|
"type" => "doc",
|
|
"content" => [{ "type" => "paragraph", "content" => [{ "type" => "text", "text" => "avis-commission-" }, { "type" => "mention", "attrs" => { "id" => "dossier_number", "label" => "numéro du dossier" } }] }]
|
|
}.to_json,
|
|
tiptap_pj_5: {
|
|
|
|
"type" => "doc",
|
|
"content" => [{ "type" => "paragraph", "content" => [{ "type" => "text", "text" => "avis-commission-" }, { "type" => "mention", "attrs" => { "id" => "dossier_number", "label" => "numéro du dossier" } }] }]
|
|
}.to_json,
|
|
tiptap_pj_10: {
|
|
|
|
"type" => "doc",
|
|
"content" => [{ "type" => "paragraph", "content" => [{ "type" => "text", "text" => "avis-commission-" }, { "type" => "mention", "attrs" => { "id" => "dossier_number", "label" => "numéro du dossier" } }] }]
|
|
}.to_json
|
|
}
|
|
end
|
|
|
|
let(:instructeur) { create(:instructeur) }
|
|
let(:procedure) do
|
|
create(
|
|
:procedure, instructeurs: [instructeur],
|
|
types_de_champ_public: [
|
|
{ type: :piece_justificative, libelle: "pj1", stable_id: 3 },
|
|
{ type: :piece_justificative, libelle: "pj2", stable_id: 5 },
|
|
{ type: :piece_justificative, libelle: "pj3", stable_id: 10 }
|
|
]
|
|
)
|
|
end
|
|
let(:groupe_instructeur) { procedure.defaut_groupe_instructeur }
|
|
|
|
describe '#new' do
|
|
let(:subject) { get :new, params: { procedure_id: procedure.id } }
|
|
|
|
it do
|
|
subject
|
|
expect(assigns(:export_template)).to be_present
|
|
end
|
|
end
|
|
|
|
describe '#create' do
|
|
let(:subject) { post :create, params: { procedure_id: procedure.id, export_template: export_template_params } }
|
|
|
|
context 'with valid params' do
|
|
it 'redirect to some page' do
|
|
subject
|
|
expect(response).to redirect_to(exports_instructeur_procedure_path(procedure:))
|
|
expect(flash.notice).to eq "Le modèle d'export coucou a bien été créé"
|
|
end
|
|
end
|
|
|
|
context 'with invalid params' do
|
|
let(:tiptap_pdf_name) { { content: "invalid" }.to_json }
|
|
it 'display error notification' do
|
|
subject
|
|
expect(flash.alert).to be_present
|
|
end
|
|
end
|
|
|
|
context 'with procedure not accessible by current instructeur' do
|
|
let(:another_procedure) { create(:procedure) }
|
|
let(:subject) { post :create, params: { procedure_id: another_procedure.id, export_template: export_template_params } }
|
|
it 'raise exception' do
|
|
expect { subject }.to raise_error(ActiveRecord::RecordNotFound)
|
|
end
|
|
end
|
|
end
|
|
|
|
describe '#edit' do
|
|
let(:export_template) { create(:export_template, groupe_instructeur:) }
|
|
let(:subject) { get :edit, params: { procedure_id: procedure.id, id: export_template.id } }
|
|
|
|
it 'render edit' do
|
|
subject
|
|
expect(response).to render_template(:edit)
|
|
end
|
|
|
|
context "with export_template not accessible by current instructeur" do
|
|
let(:another_groupe_instructeur) { create(:groupe_instructeur) }
|
|
let(:export_template) { create(:export_template, groupe_instructeur: another_groupe_instructeur) }
|
|
|
|
it 'raise exception' do
|
|
expect { subject }.to raise_error(ActiveRecord::RecordNotFound)
|
|
end
|
|
end
|
|
end
|
|
|
|
describe '#update' do
|
|
let(:export_template) { create(:export_template, groupe_instructeur:) }
|
|
let(:tiptap_pdf_name) {
|
|
{
|
|
"type" => "doc",
|
|
"content" => [
|
|
{ "type" => "paragraph", "content" => [{ "text" => "exPort_", "type" => "text" }, { "type" => "mention", "attrs" => { "id" => "dossier_number", "label" => "numéro du dossier" } }] }
|
|
]
|
|
}.to_json
|
|
}
|
|
|
|
let(:subject) { put :update, params: { procedure_id: procedure.id, id: export_template.id, export_template: export_template_params } }
|
|
|
|
context 'with valid params' do
|
|
it 'redirect to some page' do
|
|
subject
|
|
expect(response).to redirect_to(exports_instructeur_procedure_path(procedure:))
|
|
expect(flash.notice).to eq "Le modèle d'export coucou a bien été modifié"
|
|
end
|
|
end
|
|
|
|
context 'with invalid params' do
|
|
let(:tiptap_pdf_name) { { content: "invalid" }.to_json }
|
|
it 'display error notification' do
|
|
subject
|
|
expect(flash.alert).to be_present
|
|
end
|
|
end
|
|
end
|
|
|
|
describe '#destroy' do
|
|
let(:export_template) { create(:export_template, groupe_instructeur:) }
|
|
let(:subject) { delete :destroy, params: { procedure_id: procedure.id, id: export_template.id } }
|
|
|
|
context 'with valid params' do
|
|
it 'redirect to some page' do
|
|
subject
|
|
expect(response).to redirect_to(exports_instructeur_procedure_path(procedure:))
|
|
expect(flash.notice).to eq "Le modèle d'export Mon export a bien été supprimé"
|
|
end
|
|
end
|
|
end
|
|
|
|
describe '#preview' do
|
|
render_views
|
|
|
|
let(:export_template) { create(:export_template, groupe_instructeur:) }
|
|
|
|
let(:subject) { get :preview, params: { procedure_id: procedure.id, id: export_template.id, export_template: export_template_params }, format: :turbo_stream }
|
|
|
|
it '' do
|
|
dossier = create(:dossier, procedure: procedure, for_procedure_preview: true)
|
|
subject
|
|
expect(response.body).to include "DOSSIER_#{dossier.id}"
|
|
expect(response.body).to include "mon_export_#{dossier.id}.pdf"
|
|
end
|
|
end
|
|
end
|