diff options
| -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 |
