aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobert2017-07-28 18:21:48 +0200
committerRobert2017-08-01 22:10:23 +0200
commit7b26da3da6c80712a62cab0c41a3c5ecbdd8e8a4 (patch)
tree87852136769dfe1e2976e5eab126ba30137ea05e
parent679d2708272529c52bb680d87368d96926aa69ee (diff)
downloadchouette-core-7b26da3da6c80712a62cab0c41a3c5ecbdd8e8a4.tar.bz2
Refs: #4176@2h; Request Spec for NetexImport adapted and implemented
- Specing that, in case of a correct request Referential & NetexImport instances are created and a 201 is returned - Specing that, in case of an incorrect request, no instance is created and a 406 with a correct error message is returned - Implemented MISSING: Refactor controller implmentation
-rw-r--r--app/controllers/api/v1/netex_imports_controller.rb15
-rw-r--r--spec/requests/api/v1/netex_import_spec.rb52
2 files changed, 50 insertions, 17 deletions
diff --git a/app/controllers/api/v1/netex_imports_controller.rb b/app/controllers/api/v1/netex_imports_controller.rb
index d67d121c0..e9b8242bd 100644
--- a/app/controllers/api/v1/netex_imports_controller.rb
+++ b/app/controllers/api/v1/netex_imports_controller.rb
@@ -5,9 +5,18 @@ module Api
def create
respond_to do | format |
format.json do
- @import = NetexImport.create(netex_import_params)
- unless @import.valid?
- render json: {errors: @import.errors}, status: 406
+ workbench = Workbench.where(id: netex_import_params['workbench_id']).first
+ if workbench
+ @referential = Referential.new(name: netex_import_params['name'], organisation_id: workbench.organisation_id, workbench_id: workbench.id)
+ @import = NetexImport.new(netex_import_params)
+ if @import.valid? && @referential.valid?
+ @import.save!
+ @referential.save!
+ else
+ render json: {errors: @import.errors.to_h.merge( @referential.errors.to_h )}, status: 406
+ end
+ else
+ render json: {errors: {'workbench_id' => 'missing'}}, status: 406
end
end
end
diff --git a/spec/requests/api/v1/netex_import_spec.rb b/spec/requests/api/v1/netex_import_spec.rb
index e92901d83..da42f8e19 100644
--- a/spec/requests/api/v1/netex_import_spec.rb
+++ b/spec/requests/api/v1/netex_import_spec.rb
@@ -3,6 +3,8 @@ RSpec.describe "NetexImport", type: :request do
describe 'POST netex_imports' do
let( :referential ){ create :referential }
+ let( :workbench ){ referential.workbench }
+
let( :file_path ){ fixtures_path 'single_reference_import.zip' }
let( :file ){ fixture_file_upload( file_path ) }
@@ -20,21 +22,16 @@ RSpec.describe "NetexImport", type: :request do
name: 'hello world',
file: file,
referential_id: referential.id,
- workbench_id: referential.workbench_id
+ workbench_id: workbench.id
}
end
- let( :illegal_attributes ) do
- { referential_id: referential.id }
- end
context 'with correct credentials and correct request' do
let( :authorization ){ authorization_token_header( get_api_key.token ) }
-
- it 'succeeds', :wip do
- legal_attributes # force object creation for correct to change behavior
- expect{post_request.(netex_import: legal_attributes)}.to change{Referential.count}.by(1)
+ it 'succeeds' do
+ post_request.(netex_import: legal_attributes)
expect( response ).to be_success
expect( json_response_body ).to eq({'id' => NetexImport.last.id, 'type' => 'NetexImport'})
end
@@ -42,6 +39,15 @@ RSpec.describe "NetexImport", type: :request do
it 'creates a NetexImport object in the DB' do
expect{ post_request.(netex_import: legal_attributes) }.to change{NetexImport.count}.by(1)
end
+
+ it 'creates a correct Referential' do
+ legal_attributes # force object creation for correct to change behavior
+ expect{post_request.(netex_import: legal_attributes)}.to change{Referential.count}.by(1)
+ Referential.last.tap do | ref |
+ expect( ref.workbench_id ).to eq(workbench.id)
+ expect( ref.organisation_id ).to eq(workbench.organisation_id)
+ end
+ end
end
context 'with incorrect credentials and correct request' do
@@ -61,14 +67,32 @@ RSpec.describe "NetexImport", type: :request do
context 'with correct credentials and incorrect request' do
let( :authorization ){ authorization_token_header( get_api_key.token ) }
- it 'does not succeed' do
- post_request.(netex_import: illegal_attributes)
- expect( response.status ).to eq(406)
- expect( json_response_body['errors']['file'] ).not_to be_empty
+ shared_examples_for 'illegal attributes' do |bad_attribute, illegal_value=nil|
+ context "missing #{bad_attribute}" do
+ let!( :illegal_attributes ){ legal_attributes.merge( bad_attribute => illegal_value ) }
+ it 'does not succeed' do
+ post_request.(netex_import: illegal_attributes)
+ expect( response.status ).to eq(406)
+ expect( json_response_body['errors'][bad_attribute.to_s] ).not_to be_empty
+ end
+
+ it 'does not create an Import object' do
+ expect{ post_request.(netex_import: illegal_attributes) }.not_to change{Import.count}
+ end
+
+ it 'does not create a new Referential' do
+ expect{ post_request.(netex_import: illegal_attributes) }.not_to change{Referential.count}
+ end
+ end
end
- it 'does not create an Import object' do
- expect{ post_request.(netex_import: illegal_attributes) }.not_to change{Import.count}
+ it_behaves_like 'illegal attributes', :file
+ it_behaves_like 'illegal attributes', :workbench_id
+ context 'name already taken' do
+ before do
+ create :referential, name: 'already taken'
+ end
+ it_behaves_like 'illegal attributes', :name, 'already taken'
end
end
end