diff options
| author | Robert | 2017-07-28 18:21:48 +0200 | 
|---|---|---|
| committer | Robert | 2017-08-01 22:10:23 +0200 | 
| commit | 7b26da3da6c80712a62cab0c41a3c5ecbdd8e8a4 (patch) | |
| tree | 87852136769dfe1e2976e5eab126ba30137ea05e | |
| parent | 679d2708272529c52bb680d87368d96926aa69ee (diff) | |
| download | chouette-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.rb | 15 | ||||
| -rw-r--r-- | spec/requests/api/v1/netex_import_spec.rb | 52 | 
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 | 
