[Fix #196] Attestation: building logic from template

This commit is contained in:
Simon Lehericey 2017-06-08 14:04:47 +02:00
parent b443b5cefd
commit 602527a09d
4 changed files with 282 additions and 8 deletions

View file

@ -73,4 +73,172 @@ describe AttestationTemplate, type: :model do
it { expect(subject.signature.file.read).to eq(attestation_template.signature.file.read) }
end
end
describe 'attestation_for' do
let(:procedure) do
create(:procedure,
types_de_champ: types_de_champ,
types_de_champ_private: types_de_champ_private,
for_individual: for_individual)
end
let(:for_individual) { false }
let(:individual) { nil }
let(:etablissement) { nil }
let(:entreprise) { create(:entreprise, etablissement: etablissement) }
let(:types_de_champ) { [] }
let(:types_de_champ_private) { [] }
let(:dossier) { create(:dossier, procedure: procedure, individual: individual, entreprise: entreprise) }
let(:template_title) { 'title' }
let(:template_body) { 'body' }
let(:attestation_template) do
AttestationTemplate.new(procedure: procedure,
title: template_title,
body: template_body,
logo: @logo,
signature: @signature)
end
before do
@logo = File.open('spec/fixtures/white.png')
@signature = File.open('spec/fixtures/black.png')
Timecop.freeze(Time.now)
end
after do
@logo.close
@signature.close
end
let(:view_args) do
original_new = ActionView::Base.method(:new)
arguments = nil
allow(ActionView::Base).to receive(:new) do |paths, args|
arguments = args
original_new.call(paths, args)
end
attestation_template.attestation_for(dossier)
arguments
end
let(:attestation) { attestation_template.attestation_for(dossier) }
it 'provides a pseudo file' do
expect(attestation.pdf.file).to exist
expect(attestation.pdf.filename).to eq('attestation')
end
context 'when the dossier and the procedure has an individual' do
let(:for_individual) { true }
let(:individual) { Individual.create(nom: 'nom', prenom: 'prenom', gender: 'Mme') }
context 'and the template title use the individual tags' do
let(:template_title) { '--civilité-- --nom-- --prénom--' }
it { expect(view_args[:title]).to eq('Mme nom prenom') }
end
end
context 'when the dossier and the procedure has an entreprise' do
let(:for_individual) { false }
context 'and the template title use the entreprise tags' do
let(:template_title) do
'--SIREN-- --numéro de TVA intracommunautaire-- --SIRET du siège social-- --raison sociale-- --adresse--'
end
let(:expected_title) do
"#{entreprise.siren} #{entreprise.numero_tva_intracommunautaire} #{entreprise.siret_siege_social} #{entreprise.raison_sociale} --adresse--"
end
it { expect(view_args[:title]).to eq(expected_title) }
context 'and the entreprise has a etablissement with an adresse' do
let(:etablissement) { create(:etablissement, adresse: 'adresse') }
let(:template_title) { '--adresse--' }
it { expect(view_args[:title]).to eq('adresse') }
end
end
end
context 'when the procedure has a type de champ named libelleA et libelleB' do
let(:types_de_champ) do
[create(:type_de_champ_public, libelle: 'libelleA'),
create(:type_de_champ_public, libelle: 'libelleB')]
end
context 'and the template title is nil' do
let(:template_title) { nil }
it { expect(view_args[:title]).to eq('') }
end
context 'and it is not used in the template title nor body' do
it { expect(view_args[:title]).to eq('title') }
it { expect(view_args[:body]).to eq('body') }
it { expect(view_args[:created_at]).to eq(Time.now) }
it { expect(view_args[:logo]).to eq(attestation_template.logo) }
it { expect(view_args[:signature]).to eq(attestation_template.signature) }
end
context 'and the are used in the template title and body' do
let(:template_title) { 'title --libelleA--' }
let(:template_body) { 'body --libelleB--' }
context 'and their value in the dossier are nil' do
it { expect(view_args[:title]).to eq('title ') }
end
context 'and their value in the dossier are not nil' do
before :each do
dossier.champs
.select { |champ| champ.libelle == 'libelleA' }
.first
.value = 'libelle1'
dossier.champs
.select { |champ| champ.libelle == 'libelleB' }
.first
.value = 'libelle2'
end
it { expect(view_args[:title]).to eq('title libelle1') }
it { expect(view_args[:body]).to eq('body libelle2') }
it { expect(attestation.title).to eq('title libelle1') }
end
end
end
context 'when the dossier has a motivation' do
let(:dossier) { create(:dossier, motivation: 'motivation') }
context 'and the title has the motivation tag' do
let(:template_title) { 'title --motivation--' }
it { expect(view_args[:title]).to eq('title motivation') }
end
end
context 'when the procedure has a type de champ prive named libelleA' do
let(:types_de_champ_private) { [create(:type_de_champ_private, libelle: 'libelleA')] }
context 'and the are used in the template title' do
let(:template_title) { 'title --libelleA--' }
context 'and its value in the dossier are not nil' do
before :each do
dossier.champs_private
.select { |champ| champ.libelle == 'libelleA' }
.first
.value = 'libelle1'
end
it { expect(view_args[:title]).to eq('title libelle1') }
end
end
end
end
end