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
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
if @dossier_id != ""
@rescue_redirect = 'error_dossier'
@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})
else
raise 'Combinaison Dossier_ID / SIRET non valide'
redirect_to url_for({controller: :start, action: :error_dossier})
end
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
@entreprise.dossier = @dossier
@ -38,9 +37,11 @@ class DossiersController < ApplicationController
redirect_to url_for({controller: :dossiers, action: :show, id: @dossier.id})
end
# TODO: Remove rescue
rescue
redirect_to url_for({controller: :start, action: @rescue_redirect})
rescue RestClient::ResourceNotFound
redirect_to url_for({ controller: :start, action: :error_siret })
rescue ActiveRecord::RecordNotFound
redirect_to url_for({controller: :start, action: :error_dossier})
end
def update

View file

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

View file

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

View file

@ -5,7 +5,7 @@ class SIADE::EntrepriseAdapter
end
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
@data_source = nil
end

View file

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

View file

@ -3,7 +3,7 @@ require 'spec_helper'
RSpec.describe DossiersController, type: :controller do
let(:dossier) { create(:dossier, :with_entreprise) }
let (:dossier_id) { dossier.id }
let (:bad_dossier_id) { 999999999999 }
let (:siret_not_found) { 999999999999 }
let (:siren) { dossier.siren }
let (:siret) { dossier.siret }
@ -16,14 +16,14 @@ RSpec.describe DossiersController, type: :controller do
end
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')
end
end
describe 'POST #create' 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')
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'))
end
context 'Le SIRET est correct' do
it {
post :create, :siret => siret, :pro_dossier_id => ''
@last_dossier = ActiveRecord::Base.connection.execute("SELECT currval('dossiers_id_seq')")
expect(response).to redirect_to("/dossiers/#{@last_dossier.getvalue(0,0)}")
}
end
describe 'professionnel fills form' do
context 'when pro_dossier_id is empty' do
context 'with valid siret ' do
before do
post :create, siret: siret, pro_dossier_id: ''
end
context 'Le SIRET n\'est pas correct' do
it {
post :create, :siret => bad_siret
expect(response).to redirect_to('/start/error_siret')
}
end
it 'create a dossier' do
expect{ post :create, siret: siret, pro_dossier_id: '' }.to change{ Dossier.count }.by(1)
end
context 'Un numéro de dossier est envoyé avec le SIRET' do
it 'La combinaison SIRET / dossier_id est valide' do
post :create, :siret => siret, :pro_dossier_id => dossier_id
expect(response).to redirect_to("/dossiers/#{dossier_id}/recapitulatif")
it 'creates entreprise' do
expect{ post :create, siret: siret, pro_dossier_id: '' }.to change{ Entreprise.count }.by(1)
end
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
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
post :create, :siret => siret, :pro_dossier_id => bad_dossier_id
expect(response).to redirect_to("/start/error_dossier")
context 'when dossier not found' do
it 'redirects to start with error_dossier' do
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

View file

@ -1,32 +1,58 @@
require 'spec_helper'
describe SIADE::EntrepriseAdapter do
context 'self.#entreprise bad SIREN' do
let(:siren){1}
subject { SIADE::Api.entreprise(siren) }
describe SIADE::API do
describe '.entreprise' do
subject { SIADE::API.entreprise(siren) }
before do
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
context 'when siren does not exist' do
let(:siren) { '111111111' }
let(:status) { 404 }
let(:body) { '' }
it 'bad SIREN' do
expect(subject).to eq(nil)
it 'raises RestClient::ResourceNotFound' do
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
context 'self.#etablissement bad SIRET' do
let(:siret){1}
subject { SIADE::Api.etablissement(siret) }
describe '.etablissement' do
subject { SIADE::API.etablissement(siret) }
before do
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
it 'bad SIRET' do
expect(subject).to eq(nil)
context 'when siret does not exist' do
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

View file

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