rename Api into API

change api error managment
refactor dossier controller
rewrite test for dossier controller
This commit is contained in:
Tanguy PATTE 2015-08-17 15:53:35 +02:00
parent f28e3ccbd3
commit 1e04916005
8 changed files with 127 additions and 61 deletions

View file

@ -9,24 +9,23 @@ class DossiersController < ApplicationController
end end
def create def create
@rescue_redirect = 'error_siret'
@etablissement = Etablissement.new(SIADE::EtablissementAdapter.new(params[:siret]).to_params)
@entreprise = Entreprise.new(SIADE::EntrepriseAdapter.new(params[:siret][0..-6]).to_params)
@dossier_id = params[:pro_dossier_id].strip @dossier_id = params[:pro_dossier_id].strip
if @dossier_id != "" if @dossier_id != ""
@rescue_redirect = 'error_dossier'
@dossier = Dossier.find(@dossier_id) @dossier = Dossier.find(@dossier_id)
@etablissement = @dossier.etablissement
if @etablissement.siret == params[:siret] if @dossier.siret == params[:siret]
redirect_to url_for({controller: :recapitulatif, action: :show, dossier_id: @dossier_id}) redirect_to url_for({controller: :recapitulatif, action: :show, dossier_id: @dossier_id})
else else
raise 'Combinaison Dossier_ID / SIRET non valide' redirect_to url_for({controller: :start, action: :error_dossier})
end end
else else
@etablissement = Etablissement.new(SIADE::EtablissementAdapter.new(params[:siret]).to_params)
@entreprise = Entreprise.new(SIADE::EntrepriseAdapter.new(params[:siret][0..-6]).to_params)
@dossier = Dossier.create @dossier = Dossier.create
@entreprise.dossier = @dossier @entreprise.dossier = @dossier
@ -38,9 +37,11 @@ class DossiersController < ApplicationController
redirect_to url_for({controller: :dossiers, action: :show, id: @dossier.id}) redirect_to url_for({controller: :dossiers, action: :show, id: @dossier.id})
end end
# TODO: Remove rescue
rescue rescue RestClient::ResourceNotFound
redirect_to url_for({controller: :start, action: @rescue_redirect}) redirect_to url_for({ controller: :start, action: :error_siret })
rescue ActiveRecord::RecordNotFound
redirect_to url_for({controller: :start, action: :error_dossier})
end end
def update def update

View file

@ -8,6 +8,7 @@ ActiveSupport::Inflector.inflections(:en) do |inflect|
# inflect.singular /^(ox)en/i, '\1' # inflect.singular /^(ox)en/i, '\1'
# inflect.irregular 'person', 'people' # inflect.irregular 'person', 'people'
# inflect.uncountable %w( fish sheep ) # inflect.uncountable %w( fish sheep )
inflect.acronym 'API'
inflect.irregular 'piece_jointe', 'pieces_jointes' inflect.irregular 'piece_jointe', 'pieces_jointes'
inflect.irregular 'type_piece_jointe', 'types_piece_jointe' inflect.irregular 'type_piece_jointe', 'types_piece_jointe'
end end

View file

@ -1,4 +1,4 @@
class SIADE::Api class SIADE::API
class << self class << self
attr_accessor :token attr_accessor :token
@ -25,8 +25,6 @@ class SIADE::Api
url, url,
verify_ssl: verify_ssl_mode verify_ssl: verify_ssl_mode
).get(params: { token: SIADETOKEN }) ).get(params: { token: SIADETOKEN })
rescue
nil
end end
def self.base_url def self.base_url

View file

@ -5,7 +5,7 @@ class SIADE::EntrepriseAdapter
end end
def data_source def data_source
@data_source ||= JSON.parse(SIADE::Api.entreprise(@siren), symbolize_names: true) @data_source ||= JSON.parse(SIADE::API.entreprise(@siren), symbolize_names: true)
rescue rescue
@data_source = nil @data_source = nil
end end

View file

@ -5,9 +5,7 @@ class SIADE::EtablissementAdapter
end end
def data_source def data_source
@data_source ||= JSON.parse(SIADE::Api.etablissement(@siret), symbolize_names: true) @data_source ||= JSON.parse(SIADE::API.etablissement(@siret), symbolize_names: true)
rescue
@data_source = nil
end end
def to_params def to_params
@ -25,8 +23,6 @@ class SIADE::EtablissementAdapter
end end
end end
params params
rescue
raise "SIRET Non reconnu"
end end
def attr_to_fetch def attr_to_fetch

View file

@ -3,7 +3,7 @@ require 'spec_helper'
RSpec.describe DossiersController, type: :controller do RSpec.describe DossiersController, type: :controller do
let(:dossier) { create(:dossier, :with_entreprise) } let(:dossier) { create(:dossier, :with_entreprise) }
let (:dossier_id) { dossier.id } let (:dossier_id) { dossier.id }
let (:bad_dossier_id) { 999999999999 } let (:siret_not_found) { 999999999999 }
let (:siren) { dossier.siren } let (:siren) { dossier.siren }
let (:siret) { dossier.siret } let (:siret) { dossier.siret }
@ -16,14 +16,14 @@ RSpec.describe DossiersController, type: :controller do
end end
it 'redirection vers start si mauvais dossier ID' do it 'redirection vers start si mauvais dossier ID' do
get :show, :id => bad_dossier_id get :show, :id => siret_not_found
expect(response).to redirect_to('/start/error_dossier') expect(response).to redirect_to('/start/error_dossier')
end end
end end
describe 'POST #create' do describe 'POST #create' do
before do before do
stub_request(:get, "https://api-dev.apientreprise.fr/api/v1/etablissements/#{bad_siret}?token=#{SIADETOKEN}"). stub_request(:get, "https://api-dev.apientreprise.fr/api/v1/etablissements/#{siret_not_found}?token=#{SIADETOKEN}").
to_return(:status => 404, :body => 'fake body') to_return(:status => 404, :body => 'fake body')
stub_request(:get, "https://api-dev.apientreprise.fr/api/v1/etablissements/#{siret}?token=#{SIADETOKEN}"). stub_request(:get, "https://api-dev.apientreprise.fr/api/v1/etablissements/#{siret}?token=#{SIADETOKEN}").
@ -33,30 +33,74 @@ RSpec.describe DossiersController, type: :controller do
to_return(:status => 200, :body => File.read('spec/support/files/entreprise.json')) to_return(:status => 200, :body => File.read('spec/support/files/entreprise.json'))
end end
context 'Le SIRET est correct' do describe 'professionnel fills form' do
it { context 'when pro_dossier_id is empty' do
post :create, :siret => siret, :pro_dossier_id => '' context 'with valid siret ' do
@last_dossier = ActiveRecord::Base.connection.execute("SELECT currval('dossiers_id_seq')") before do
expect(response).to redirect_to("/dossiers/#{@last_dossier.getvalue(0,0)}") post :create, siret: siret, pro_dossier_id: ''
} end
end
context 'Le SIRET n\'est pas correct' do it 'create a dossier' do
it { expect{ post :create, siret: siret, pro_dossier_id: '' }.to change{ Dossier.count }.by(1)
post :create, :siret => bad_siret end
expect(response).to redirect_to('/start/error_siret')
}
end
context 'Un numéro de dossier est envoyé avec le SIRET' do it 'creates entreprise' do
it 'La combinaison SIRET / dossier_id est valide' do expect{ post :create, siret: siret, pro_dossier_id: '' }.to change{ Entreprise.count }.by(1)
post :create, :siret => siret, :pro_dossier_id => dossier_id end
expect(response).to redirect_to("/dossiers/#{dossier_id}/recapitulatif")
it 'links entreprise to dossier' do
expect(Entreprise.last.dossier).to eq(Dossier.last)
end
it 'creates etablissement for dossier' do
expect{ post :create, siret: siret, pro_dossier_id: '' }.to change{ Etablissement.count }.by(1)
end
it 'links etablissement to dossier' do
expect(Etablissement.last.dossier).to eq(Dossier.last)
end
it 'links etablissement to entreprise' do
expect(Etablissement.last.entreprise).to eq(Entreprise.last)
end
end
context 'with non existant siret' do
let(:siret_not_found) { '11111111111111' }
subject { post :create, siret: siret_not_found, pro_dossier_id: '' }
it 'does not create new dossier' do
expect{ subject }.not_to change{ Dossier.count }
end
it 'redirects to show' do
expect(subject).to redirect_to(controller: :start, action: :error_siret)
end
end
end end
context 'when pro_dossier_id is not empty' do
let!(:dossier) { create(:dossier, :with_entreprise) }
subject { post :create, siret: dossier.siret ,pro_dossier_id: 99999999999}
it 'La combinaison SIRET (ok) et dossier_id (nok) n\'est pas valide' do context 'when dossier not found' do
post :create, :siret => siret, :pro_dossier_id => bad_dossier_id it 'redirects to start with error_dossier' do
expect(response).to redirect_to("/start/error_dossier") expect(subject).to redirect_to(controller: :start, action: :error_dossier)
end
end
context 'when dossier found' do
context 'when siret match' do
subject { post :create, siret: dossier.siret ,pro_dossier_id: dossier.id}
it 'redirects to controller recapitulatif' do
expect(subject).to redirect_to(controller: :recapitulatif, action: :show, dossier_id: dossier.id)
end
end
context 'when siret does not match' do
subject { post :create, siret: '11111111111111' ,pro_dossier_id: dossier.id}
it 'redirects to start with action error_dossier' do
expect(subject).to redirect_to(controller: :start, action: :error_dossier)
end
end
end
end end
end end
end end

View file

@ -1,32 +1,58 @@
require 'spec_helper' require 'spec_helper'
describe SIADE::EntrepriseAdapter do describe SIADE::API do
context 'self.#entreprise bad SIREN' do
let(:siren){1}
subject { SIADE::Api.entreprise(siren) }
describe '.entreprise' do
subject { SIADE::API.entreprise(siren) }
before do before do
stub_request(:get, "https://api-dev.apientreprise.fr/api/v1/entreprises/#{siren}?token=#{SIADETOKEN}"). stub_request(:get, "https://api-dev.apientreprise.fr/api/v1/entreprises/#{siren}?token=#{SIADETOKEN}").
to_return(:status => 404, :body => "", :headers => {}) to_return(:status => status, :body => body)
end end
context 'when siren does not exist' do
let(:siren) { '111111111' }
let(:status) { 404 }
let(:body) { '' }
it 'bad SIREN' do it 'raises RestClient::ResourceNotFound' do
expect(subject).to eq(nil) expect{ subject }.to raise_error(RestClient::ResourceNotFound)
end
end
context 'when siret exist' do
let(:siren) { '418166096' }
let(:status) { 200 }
let(:body) { File.read('spec/support/files/entreprise.json') }
it 'returns response body' do
expect(subject).to eq(body)
end
end end
end end
context 'self.#etablissement bad SIRET' do describe '.etablissement' do
let(:siret){1} subject { SIADE::API.etablissement(siret) }
subject { SIADE::Api.etablissement(siret) }
before do before do
stub_request(:get, "https://api-dev.apientreprise.fr/api/v1/etablissements/#{siret}?token=#{SIADETOKEN}"). stub_request(:get, "https://api-dev.apientreprise.fr/api/v1/etablissements/#{siret}?token=#{SIADETOKEN}").
to_return(:status => 404, :body => "", :headers => {}) to_return(:status => status, :body => body)
end end
it 'bad SIRET' do context 'when siret does not exist' do
expect(subject).to eq(nil) let(:siret) { '11111111111111' }
let(:status) { 404 }
let(:body) { '' }
it 'raises RestClient::ResourceNotFound' do
expect{ subject }.to raise_error(RestClient::ResourceNotFound)
end
end
context 'when siret exists' do
let(:siret) { '41816609600051' }
let(:status) { 200 }
let(:body) { File.read('spec/support/files/etablissement.json') }
it 'returns body' do
expect(subject).to eq(body)
end
end end
end end
end end

View file

@ -70,8 +70,8 @@ describe SIADE::EtablissementAdapter do
end end
end end
context 'SIRET Inconnu' do context 'when siret is not found' do
let(:bad_siret){1} let(:bad_siret){ 11111111111111 }
subject { SIADE::EtablissementAdapter.new(bad_siret).to_params } subject { SIADE::EtablissementAdapter.new(bad_siret).to_params }
before do before do
@ -79,8 +79,8 @@ describe SIADE::EtablissementAdapter do
.to_return(body: 'Fake body', status: 404) .to_return(body: 'Fake body', status: 404)
end end
it 'retour de nil' do it 'raises exception RestClient::ResourceNotFound' do
expect{subject}.to raise_error ('SIRET Non reconnu') expect{subject}.to raise_error (RestClient::ResourceNotFound)
end end
end end
end end