diff options
| -rw-r--r-- | app/controllers/api/v1/netex_imports_controller.rb | 26 | ||||
| -rw-r--r-- | app/controllers/imports_controller.rb | 2 | ||||
| -rw-r--r-- | app/models/netex_import.rb | 1 | ||||
| -rw-r--r-- | app/views/api/v1/netex_imports/create.json.rabl | 3 | ||||
| -rw-r--r-- | config/routes.rb | 2 | ||||
| -rw-r--r-- | spec/controllers/api/v1/lines_controller_spec.rb | 2 | ||||
| -rw-r--r-- | spec/controllers/api/v1/netex_import_controller_spec.rb | 12 | ||||
| -rw-r--r-- | spec/factories/imports.rb | 5 | ||||
| -rw-r--r-- | spec/models/api/v1/api_key_spec.rb | 2 | ||||
| -rw-r--r-- | spec/models/api/v1/netex_import_spec.rb | 15 | ||||
| -rw-r--r-- | spec/requests/api/v1/netex_import_spec.rb | 71 | ||||
| -rw-r--r-- | spec/routing/api/v1/import_routes_spec.rb | 10 | ||||
| -rw-r--r-- | spec/support/api_key.rb | 4 | ||||
| -rw-r--r-- | spec/support/json_helper.rb | 11 |
14 files changed, 123 insertions, 43 deletions
diff --git a/app/controllers/api/v1/netex_imports_controller.rb b/app/controllers/api/v1/netex_imports_controller.rb new file mode 100644 index 000000000..16a7cef69 --- /dev/null +++ b/app/controllers/api/v1/netex_imports_controller.rb @@ -0,0 +1,26 @@ +module Api + module V1 + class NetexImportsController < ChouetteController + + 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 + end + end + end + end + + + private + + def netex_import_params + params + .require('netex_import') + .permit(:file, :name, :referential_id) + end + end + end +end diff --git a/app/controllers/imports_controller.rb b/app/controllers/imports_controller.rb index 01a46f064..70c5c1a0d 100644 --- a/app/controllers/imports_controller.rb +++ b/app/controllers/imports_controller.rb @@ -23,8 +23,6 @@ class ImportsController < BreadcrumbController end def create - require 'pry' - binding.pry create! { workbench_import_path(parent, resource) } end diff --git a/app/models/netex_import.rb b/app/models/netex_import.rb index de5b84537..40eaca523 100644 --- a/app/models/netex_import.rb +++ b/app/models/netex_import.rb @@ -1,5 +1,6 @@ require 'net/http' class NetexImport < Import + mount_uploader :file, ImportUploader after_commit :launch_java_import def launch_java_import diff --git a/app/views/api/v1/netex_imports/create.json.rabl b/app/views/api/v1/netex_imports/create.json.rabl new file mode 100644 index 000000000..1361cdb80 --- /dev/null +++ b/app/views/api/v1/netex_imports/create.json.rabl @@ -0,0 +1,3 @@ + +object @import +attributes :id, :type diff --git a/config/routes.rb b/config/routes.rb index 0bfde2e25..686c19eff 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -37,7 +37,7 @@ ChouetteIhm::Application.routes.draw do resources :connection_links, only: [:index, :show] resources :companies, only: [:index, :show] resources :group_of_lines, only: [:index, :show] - resources :imports, only: :create + resources :netex_imports, only: :create resources :journey_patterns, only: :show resources :lines, only: [:index, :show] do resources :journey_patterns, only: [:index, :show] diff --git a/spec/controllers/api/v1/lines_controller_spec.rb b/spec/controllers/api/v1/lines_controller_spec.rb index d57eed766..30c2f1a50 100644 --- a/spec/controllers/api/v1/lines_controller_spec.rb +++ b/spec/controllers/api/v1/lines_controller_spec.rb @@ -3,7 +3,7 @@ require 'spec_helper' describe Api::V1::LinesController, :type => :controller do let!(:line) { referential.lines.first || create(:line) } - it_behaves_like "api key protected controller" do + it_behaves_like "api key protected controller", :wip do let(:data){line} end describe "GET #index" do diff --git a/spec/controllers/api/v1/netex_import_controller_spec.rb b/spec/controllers/api/v1/netex_import_controller_spec.rb deleted file mode 100644 index b6b90f7d1..000000000 --- a/spec/controllers/api/v1/netex_import_controller_spec.rb +++ /dev/null @@ -1,12 +0,0 @@ -RSpec.describe Api::V1::NetexImportController, type: :controller do - let( :netex_import ){ build_stubbed :netex_import } - - it_behaves_like "api key protected controller" do - let(:data){ netex_import } - end - - describe "POST #create" do - - end - -end diff --git a/spec/factories/imports.rb b/spec/factories/imports.rb index fc8668606..eea1894a5 100644 --- a/spec/factories/imports.rb +++ b/spec/factories/imports.rb @@ -9,5 +9,10 @@ FactoryGirl.define do status :new started_at nil ended_at nil + + factory :netex_import do + type 'NetexImport' + file {Rails.root.join('spec', 'fixtures', 'terminated_job.json')} + end end end diff --git a/spec/models/api/v1/api_key_spec.rb b/spec/models/api/v1/api_key_spec.rb index eb8826c0e..8a34c9221 100644 --- a/spec/models/api/v1/api_key_spec.rb +++ b/spec/models/api/v1/api_key_spec.rb @@ -1,5 +1,3 @@ -require 'spec_helper' - describe Api::V1::ApiKey, :type => :model do let!(:referential){create(:referential)} subject { Api::V1::ApiKey.create( :name => "test", :referential => referential)} diff --git a/spec/models/api/v1/netex_import_spec.rb b/spec/models/api/v1/netex_import_spec.rb deleted file mode 100644 index f1fddc4ba..000000000 --- a/spec/models/api/v1/netex_import_spec.rb +++ /dev/null @@ -1,15 +0,0 @@ -RSpec.describe Api::V1::NetexImportController, type: :controller do - - context 'POST create' do - - let( :netex_import ){ build_stubbed(:netex_import) } - - it 'creates a NetexImport record' do - expect_any_instance_of( ImportController ).to receive(:create).with( - params: netex_import.attributes - ) - - end - end - -end diff --git a/spec/requests/api/v1/netex_import_spec.rb b/spec/requests/api/v1/netex_import_spec.rb new file mode 100644 index 000000000..b7a5c94ee --- /dev/null +++ b/spec/requests/api/v1/netex_import_spec.rb @@ -0,0 +1,71 @@ +RSpec.describe "NetexImport", type: :request do + + describe 'POST netex_imports' do + + let( :referential ){ create :referential } + + let( :file_path ){'spec/fixtures/neptune.zip'} + let( :file ){ fixture_file_upload( file_path ) } + + let( :post_request ) do + -> do + post "/api/v1/netex_imports.json", + attributes, + authorization + end + end + + let( :attributes ){ { + netex_import: { + name: 'hello world', + file: file, + referential_id: referential.id} + } } + + context 'with correct credentials and correct request' do + let( :authorization ){ authorization_token_header( get_api_key.token ) } + + + it 'succeeds' do + post_request.() + expect( response ).to be_success + expect( JSON.parse(response.body) ).to eq({'id' => NetexImport.last.id, 'type' => 'NetexImport'}) + end + + it 'creates a NetexImport object in the DB' do + expect(&post_request).to change{NetexImport.count}.by(1) + end + end + + context 'with incorrect credentials and correct request' do + let( :authorization ){ authorization_token_header( "#{referential.id}-incorrect_token") } + + it 'succeeds not' do + post_request.() + expect( response.status ).to eq(401) + end + + it 'does not create an Import object' do + expect(&post_request).not_to change{Import.count} + end + end + + context 'with correct credentials and incorrect request' do + let( :authorization ){ authorization_token_header( get_api_key.token ) } + let( :attributes ){ { + netex_import: { + referential_id: referential.id} + } } + + it 'succeeds not' do + post_request.() + expect( response.status ).to eq(406) + expect( json_response_body['errors']['file'] ).not_to be_empty + end + + it 'does not create an Import object' do + expect(&post_request).not_to change{Import.count} + end + end + end +end diff --git a/spec/routing/api/v1/import_routes_spec.rb b/spec/routing/api/v1/import_routes_spec.rb deleted file mode 100644 index 7acc0e82d..000000000 --- a/spec/routing/api/v1/import_routes_spec.rb +++ /dev/null @@ -1,10 +0,0 @@ -RSpec.describe Api::V1::ImportsController do - describe "routing" do - it { - expect(post: '/api/v1/imports').to route_to( - controller: 'api/v1/imports', - action: 'create' - ) - } - end -end diff --git a/spec/support/api_key.rb b/spec/support/api_key.rb index 9353fac15..561e1f796 100644 --- a/spec/support/api_key.rb +++ b/spec/support/api_key.rb @@ -1,5 +1,9 @@ module ApiKeyHelper + def authorization_token_header(key) + {'Authorization' => "Token token=#{key}"} + end + def get_api_key Api::V1::ApiKey.first_or_create( :referential_id => referential.id, :name => "test") end diff --git a/spec/support/json_helper.rb b/spec/support/json_helper.rb new file mode 100644 index 000000000..a383981a0 --- /dev/null +++ b/spec/support/json_helper.rb @@ -0,0 +1,11 @@ +module Support + module JsonHelper + def json_response_body + JSON.parse(response.body) + end + end +end + +RSpec.configure do | config | + config.include Support::JsonHelper, type: :request +end |
