aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobert2017-08-02 05:54:33 +0200
committerRobert2017-08-02 05:59:47 +0200
commitbfc4aa67c0ff06aaafbade489fa210970aaf2763 (patch)
tree0f83fb65d26b615ca4d19e45966fcf420352bcaf
parent4ac49da3e416a0ec24a2c0169d5e9fd934c61f01 (diff)
parent9387e31a76d9bae4cdb94622081246eea6d6c8d7 (diff)
downloadchouette-core-bfc4aa67c0ff06aaafbade489fa210970aaf2763.tar.bz2
conflict resolution
-rw-r--r--app/controllers/api/v1/netex_imports_controller.rb46
-rw-r--r--app/controllers/application_controller.rb1
-rw-r--r--app/controllers/concerns/control_flow.rb14
-rw-r--r--spec/requests/api/v1/netex_import_spec.rb13
4 files changed, 53 insertions, 21 deletions
diff --git a/app/controllers/api/v1/netex_imports_controller.rb b/app/controllers/api/v1/netex_imports_controller.rb
index b4d3caf16..17eec2ef8 100644
--- a/app/controllers/api/v1/netex_imports_controller.rb
+++ b/app/controllers/api/v1/netex_imports_controller.rb
@@ -1,6 +1,7 @@
module Api
module V1
class NetexImportsController < ChouetteController
+ include ControlFlow
def create
respond_to do | format |
@@ -11,26 +12,43 @@ module Api
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
- require 'pry'
- binding.pry
- workbench = Workbench.where(id: netex_import_params['workbench_id']).first
- return render json: {errors: {'workbench_id' => 'missing'}}, status: 406 unless workbench
-
- @referential = Referential.new(name: netex_import_params['name'], organisation_id: workbench.organisation_id, workbench_id: workbench.id)
- @netex_import = NetexImport.new(netex_import_params.merge(referential_id: @referential.id))
- if @netex_import.valid? && @referential.valid?
- @netex_import.save!
- @referential.save!
- else
- render json: {errors: @netex_import.errors.to_h.merge( @referential.errors.to_h )}, status: 406
- end
+ find_workbench
+ create_referential
+ create_netex_import
+ end
+
+ def create_netex_import
+ @netex_import = NetexImport.new(netex_import_params.merge(referential_id: @new_referential.id))
+ @netex_import.save!
+ rescue ActiveRecord::RecordInvalid
+ render json: {errors: @netex_import.errors}, status: 406
+ finish_action!
+ end
+
+ def create_referential
+ @new_referential =
+ Referential.new(
+ name: netex_import_params['name'],
+ organisation_id: @workbench.organisation_id,
+ workbench_id: @workbench.id)
+ @new_referential.save!
+ rescue ActiveRecord::RecordInvalid
+ render json: {errors: @new_referential.errors}, status: 406
+ finish_action!
end
def netex_import_params
params
.require('netex_import')
- .permit(:file, :name, :referential_id, :workbench_id)
+ .permit(:file, :name, :workbench_id)
end
end
end
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 8fcaa3b1b..d15aa336d 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -37,6 +37,7 @@ class ApplicationController < ActionController::Base
current_organisation
end
+
# Overwriting the sign_out redirect path method
def after_sign_out_path_for(resource_or_scope)
new_user_session_path
diff --git a/app/controllers/concerns/control_flow.rb b/app/controllers/concerns/control_flow.rb
new file mode 100644
index 000000000..0f41a1cda
--- /dev/null
+++ b/app/controllers/concerns/control_flow.rb
@@ -0,0 +1,14 @@
+module ControlFlow
+ FinishAction = Class.new RuntimeError
+
+ def self.included into
+ into.rescue_from FinishAction, with: :catch_finish_action
+ end
+
+ # Allow to exit locally inside an action after rendering (especially in error cases)
+ def catch_finish_action; end
+
+ def finish_action! msg = 'finish action'
+ raise FinishAction, msg
+ end
+end
diff --git a/spec/requests/api/v1/netex_import_spec.rb b/spec/requests/api/v1/netex_import_spec.rb
index a48d5626a..fd5f6d497 100644
--- a/spec/requests/api/v1/netex_import_spec.rb
+++ b/spec/requests/api/v1/netex_import_spec.rb
@@ -11,7 +11,7 @@ RSpec.describe "NetexImport", type: :request do
let( :post_request ) do
-> (attributes) do
- post "/api/v1/netex_imports.json",
+ post api_v1_netex_imports_path(format: :json),
attributes,
authorization
end
@@ -21,8 +21,7 @@ RSpec.describe "NetexImport", type: :request do
{
name: 'hello world',
file: file,
- referential_id: referential.id,
- workbench_id: workbench.id
+ workbench_id: workbench.id
}
end
@@ -69,7 +68,7 @@ RSpec.describe "NetexImport", type: :request do
context 'with correct credentials and incorrect request' do
let( :authorization ){ authorization_token_header( get_api_key.token ) }
- shared_examples_for 'illegal attributes' do |bad_attribute, illegal_value=nil|
+ shared_examples_for 'illegal attributes' do |bad_attribute, illegal_value=nil, referential_count: 0|
context "missing #{bad_attribute}" do
let!( :illegal_attributes ){ legal_attributes.merge( bad_attribute => illegal_value ) }
it 'does not succeed' do
@@ -82,13 +81,13 @@ RSpec.describe "NetexImport", type: :request 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}
+ it 'might create a referential' do
+ expect{ post_request.(netex_import: illegal_attributes) }.to change{Referential.count}.by(referential_count)
end
end
end
- it_behaves_like 'illegal attributes', :file
+ it_behaves_like 'illegal attributes', :file, referential_count: 1
it_behaves_like 'illegal attributes', :workbench_id
context 'name already taken' do
before do