diff options
| author | Zog | 2018-05-30 18:04:10 +0200 | 
|---|---|---|
| committer | Zog | 2018-05-30 18:04:10 +0200 | 
| commit | e400ea5d0d481420052caa080b9dbc4e9acf8406 (patch) | |
| tree | 23ffa9e6fb1760ba72bd47c86b7827915644d480 | |
| parent | 971b267958c3bf78abea332e0af4c46a23679b61 (diff) | |
| download | chouette-core-e400ea5d0d481420052caa080b9dbc4e9acf8406.tar.bz2 | |
Refs #7231; Rationalize imports API7231-rationalize-iev-api
| -rw-r--r-- | app/controllers/api/v1/internals/netex_imports_controller.rb | 34 | ||||
| -rw-r--r-- | app/controllers/api/v1/netex_imports_controller.rb | 47 | ||||
| -rw-r--r-- | config/routes.rb | 6 | ||||
| -rw-r--r-- | spec/controllers/api/v1/internals/netex_imports_controller_spec.rb | 33 | 
4 files changed, 59 insertions, 61 deletions
| diff --git a/app/controllers/api/v1/internals/netex_imports_controller.rb b/app/controllers/api/v1/internals/netex_imports_controller.rb index c2b7b20cc..aaa009ad3 100644 --- a/app/controllers/api/v1/internals/netex_imports_controller.rb +++ b/app/controllers/api/v1/internals/netex_imports_controller.rb @@ -6,7 +6,13 @@ module Api          def create            respond_to do | format | -            format.json(&method(:create_models)) +            format.json do +              import = create_models +              render json: { +                status: "ok", +                message:"Import ##{import.id} created as child of #{import.parent_type} (id: #{import.parent_id})" +              } +            end            end          end @@ -43,36 +49,38 @@ module Api          def create_models            find_workbench -          create_referential -          create_netex_import +          referential = create_referential +          create_netex_import referential          end -        def create_netex_import +        def create_netex_import new_referential            attributes = netex_import_params.merge creator: "Webservice" -          attributes = attributes.merge referential_id: @new_referential.id +          attributes = attributes.merge referential_id: new_referential.id -          @netex_import = Import::Netex.new attributes -          @netex_import.save! +          netex_import = Import::Netex.new attributes +          netex_import.save! -          unless @netex_import.referential -            Rails.logger.info "Can't create referential for import #{@netex_import.id}: #{@new_referential.inspect} #{@new_referential.metadatas.inspect} #{@new_referential.errors.full_messages}" -            @netex_import.messages.create criticity: :error, message_key: "referential_creation" +          unless netex_import.referential +            Rails.logger.info "Can't create referential for import #{netex_import.id}: #{new_referential.inspect} #{new_referential.metadatas.inspect} #{new_referential.errors.full_messages}" +            netex_import.messages.create criticity: :error, message_key: "referential_creation"            end +          netex_import          rescue ActiveRecord::RecordInvalid -          render json: {errors: @netex_import.errors}, status: 406 +          render json: {errors: netex_import.errors}, status: 406            finish_action!          end          def create_referential -          @new_referential = +          new_referential =              Referential.new(                name: netex_import_params['name'],                organisation_id: @workbench.organisation_id,                workbench_id: @workbench.id,                metadatas: [metadata]              ) -          @new_referential.save +          new_referential.save +          new_referential          end          def metadata diff --git a/app/controllers/api/v1/netex_imports_controller.rb b/app/controllers/api/v1/netex_imports_controller.rb deleted file mode 100644 index 2c9caf8fb..000000000 --- a/app/controllers/api/v1/netex_imports_controller.rb +++ /dev/null @@ -1,47 +0,0 @@ -module Api -  module V1 -    class NetexImportsController < ActionController::Base -      include ControlFlow - - -      respond_to :json, :xml -      layout false - -      def create -        respond_to do | format | -          format.json(&method(:create_models)) -        end -      end - - -      private - -      def find_workbench -        @workbench = Workbench.find(netex_import_params['workbench_id']) -      rescue ActiveRecord::RecordNotFound -        render json: {errors: {'workbench_id' => 'missing'}}, status: 406 -        finish_action! -      end - -      def create_models -        find_workbench -        create_netex_import -      end - -      def create_netex_import -        attributes = netex_import_params.merge creator: "Webservice" -        @netex_import = Import::Netex.new attributes -        @netex_import.create_with_referential! -      rescue ActiveRecord::RecordInvalid -        render json: {errors: @netex_import.errors}, status: 406 -        finish_action! -      end - -      def netex_import_params -        params -          .require('netex_import') -          .permit(:file, :name, :workbench_id, :parent_id, :parent_type) -      end -    end -  end -end diff --git a/config/routes.rb b/config/routes.rb index cde1701f8..f8c33d687 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -208,7 +208,11 @@ ChouetteIhm::Application.routes.draw do        resources :vehicle_journeys, only: :show        namespace :internals do          get 'compliance_check_sets/:id/notify_parent', to: 'compliance_check_sets#notify_parent' -        get 'netex_imports/:id/notify_parent', to: 'netex_imports#notify_parent' +        resources :netex_imports, only: :create do +          member do +            get :notify_parent +          end +        end        end      end    end diff --git a/spec/controllers/api/v1/internals/netex_imports_controller_spec.rb b/spec/controllers/api/v1/internals/netex_imports_controller_spec.rb index b53ee3f05..4af7e51cb 100644 --- a/spec/controllers/api/v1/internals/netex_imports_controller_spec.rb +++ b/spec/controllers/api/v1/internals/netex_imports_controller_spec.rb @@ -1,6 +1,39 @@  RSpec.describe Api::V1::Internals::NetexImportsController, type: :controller do    let(:import_1) { create :netex_import }    let(:import_2) { create :netex_import, status: "successful" } +  let(:workbench) { create :workbench, organisation: organisation } + +  describe 'POST #create' do +    let(:file) { fixture_file_upload('multiple_references_import.zip') } +    let(:attributes){{ +      name: "Nom", +      file: file, +      workbench_id: workbench.id, +      parent_id: import_1.id, +      parent_type: import_1.class.name, +    }} + +    context 'unauthenticated' do +      include_context 'iboo wrong authorisation internal api' + +      it 'should not be successful' do +        post :create, format: :json, netex_import: attributes +        expect(response).to have_http_status 401 +      end +    end + +    context 'authenticated' do +      include_context 'iboo authenticated internal api' + +      it 'should be successful' do +        import_1 +        expect { +          post :create, format: :json, netex_import: attributes +        }.to change{Import::Netex.count}.by(1) +        expect(response).to be_success +      end +    end +  end    describe "GET #notify_parent" do      context 'unauthenticated' do | 
