aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZog2018-05-30 18:04:10 +0200
committerZog2018-05-30 18:04:10 +0200
commite400ea5d0d481420052caa080b9dbc4e9acf8406 (patch)
tree23ffa9e6fb1760ba72bd47c86b7827915644d480
parent971b267958c3bf78abea332e0af4c46a23679b61 (diff)
downloadchouette-core-e400ea5d0d481420052caa080b9dbc4e9acf8406.tar.bz2
Refs #7231; Rationalize imports API7231-rationalize-iev-api
-rw-r--r--app/controllers/api/v1/internals/netex_imports_controller.rb34
-rw-r--r--app/controllers/api/v1/netex_imports_controller.rb47
-rw-r--r--config/routes.rb6
-rw-r--r--spec/controllers/api/v1/internals/netex_imports_controller_spec.rb33
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