From be62ee08f4889fc7982467d40470662e02684ac9 Mon Sep 17 00:00:00 2001 From: Teddy Wing Date: Thu, 13 Jul 2017 18:36:04 +0200 Subject: Add `WorkbenchImport` model A new model that represents a batched import. The zip archive attached to this record will contain one or more datasets. A `Referential` will be created for each dataset in the zip, and that sub-dataset will be scheduled for a Netex import (only handling Netex imports at the moment). The model is currently empty but I'm committing it now so it can be used by others on the team. Refs #3507 --- app/models/workbench_import.rb | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 app/models/workbench_import.rb diff --git a/app/models/workbench_import.rb b/app/models/workbench_import.rb new file mode 100644 index 000000000..9323bd4b5 --- /dev/null +++ b/app/models/workbench_import.rb @@ -0,0 +1,2 @@ +class WorkbenchImport < Import +end -- cgit v1.2.3 From 781f3ae0b3dab188ba7bb960e46addb0995b45f2 Mon Sep 17 00:00:00 2001 From: Robert Date: Fri, 14 Jul 2017 10:25:32 +0200 Subject: Fixes: #3555@1h - Import#parent_id & #parent_type migration generated - Import#belongs_to :parent, class_name: to_s specified - Import#belongs_to :parent, class_name: to_s implemented --- app/controllers/import_tasks_controller.rb | 1 - app/models/import.rb | 2 ++ ...0170715041954_add_parent_type_and_parent_id_to_imports.rb | 6 ++++++ db/schema.rb | 4 +++- spec/controllers/api/v1/netex_import_controller_spec.rb | 12 ++++++++++++ spec/models/import_spec.rb | 1 + 6 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 db/migrate/20170715041954_add_parent_type_and_parent_id_to_imports.rb create mode 100644 spec/controllers/api/v1/netex_import_controller_spec.rb diff --git a/app/controllers/import_tasks_controller.rb b/app/controllers/import_tasks_controller.rb index 0e3ed6445..cb377ec5a 100644 --- a/app/controllers/import_tasks_controller.rb +++ b/app/controllers/import_tasks_controller.rb @@ -1,4 +1,3 @@ -# coding: utf-8 class ImportTasksController < ChouetteController defaults :resource_class => ImportTask diff --git a/app/models/import.rb b/app/models/import.rb index d0736ab0b..535c676b1 100644 --- a/app/models/import.rb +++ b/app/models/import.rb @@ -3,6 +3,8 @@ class Import < ActiveRecord::Base belongs_to :workbench belongs_to :referential + belongs_to :parent, class_name: to_s + extend Enumerize enumerize :status, in: %i(new pending successful failed running aborted canceled) diff --git a/db/migrate/20170715041954_add_parent_type_and_parent_id_to_imports.rb b/db/migrate/20170715041954_add_parent_type_and_parent_id_to_imports.rb new file mode 100644 index 000000000..96c1c2a59 --- /dev/null +++ b/db/migrate/20170715041954_add_parent_type_and_parent_id_to_imports.rb @@ -0,0 +1,6 @@ +class AddParentTypeAndParentIdToImports < ActiveRecord::Migration + def change + add_column :imports, :parent_id, :bigint + add_column :imports, :parent_type, :string + end +end diff --git a/db/schema.rb b/db/schema.rb index e64e5c04a..b56027f48 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20170607141317) do +ActiveRecord::Schema.define(version: 20170715041954) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -285,6 +285,8 @@ ActiveRecord::Schema.define(version: 20170607141317) do t.datetime "ended_at" t.string "token_download" t.string "type", limit: 255 + t.integer "parent_id", limit: 8 + t.string "parent_type" end add_index "imports", ["referential_id"], name: "index_imports_on_referential_id", using: :btree diff --git a/spec/controllers/api/v1/netex_import_controller_spec.rb b/spec/controllers/api/v1/netex_import_controller_spec.rb new file mode 100644 index 000000000..b6b90f7d1 --- /dev/null +++ b/spec/controllers/api/v1/netex_import_controller_spec.rb @@ -0,0 +1,12 @@ +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/models/import_spec.rb b/spec/models/import_spec.rb index a2855d086..34bfb0b23 100644 --- a/spec/models/import_spec.rb +++ b/spec/models/import_spec.rb @@ -3,6 +3,7 @@ require 'rails_helper' RSpec.describe Import, :type => :model do it { should belong_to(:referential) } it { should belong_to(:workbench) } + it { should belong_to(:parent).class_name(described_class.to_s) } it { should enumerize(:status).in(:new, :pending, :successful, :failed, :canceled, :running, :aborted ) } -- cgit v1.2.3 From 0a12bcfd146fef2fe173ebe65b364d28c90969a3 Mon Sep 17 00:00:00 2001 From: Robert Date: Mon, 17 Jul 2017 12:11:43 +0200 Subject: Refs: #3506@1.5h sketching out specs [amend me] --- app/controllers/api/v1/imports_controller.rb | 10 +++++++ app/controllers/imports_controller.rb | 2 ++ config/environments/development.rb | 23 ++++++++------- config/routes.rb | 37 +++++++++++++------------ spec/models/api/v1/netex_import_spec.rb | 15 ++++++++++ spec/routing/api/v1/access_links_routes_spec.rb | 9 ++++++ spec/routing/api/v1/import_routes_spec.rb | 10 +++++++ spec/routing/group_of_lines_spec.rb | 4 +-- 8 files changed, 79 insertions(+), 31 deletions(-) create mode 100644 app/controllers/api/v1/imports_controller.rb create mode 100644 spec/models/api/v1/netex_import_spec.rb create mode 100644 spec/routing/api/v1/access_links_routes_spec.rb create mode 100644 spec/routing/api/v1/import_routes_spec.rb diff --git a/app/controllers/api/v1/imports_controller.rb b/app/controllers/api/v1/imports_controller.rb new file mode 100644 index 000000000..7dc3021d9 --- /dev/null +++ b/app/controllers/api/v1/imports_controller.rb @@ -0,0 +1,10 @@ +module Api + module V1 + class ImportsController < ChouetteController + + def create + + end + end + end +end diff --git a/app/controllers/imports_controller.rb b/app/controllers/imports_controller.rb index 70c5c1a0d..01a46f064 100644 --- a/app/controllers/imports_controller.rb +++ b/app/controllers/imports_controller.rb @@ -23,6 +23,8 @@ class ImportsController < BreadcrumbController end def create + require 'pry' + binding.pry create! { workbench_import_path(parent, resource) } end diff --git a/config/environments/development.rb b/config/environments/development.rb index 59cb9eefa..35f697d04 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -61,17 +61,20 @@ Rails.application.configure do config.reflex_api_url = "https://pprod.reflex.stif.info/ws/reflex/V1/service=getData" config.codifligne_api_url = "https://pprod.codifligne.stif.info/rest/v1/lc/getlist" - # config.chouette_authentication_settings = { - # type: "database" - # } - config.chouette_authentication_settings = { - type: "cas", - cas_server: "http://stif-portail-dev.af83.priv/sessions" - } + if Rails.env.development? && ENV['NO_VPN'] + config.chouette_authentication_settings = { + type: "database" + } + else + config.chouette_authentication_settings = { + type: "cas", + cas_server: "http://stif-portail-dev.af83.priv/sessions" + } + end config.stif_portail_api = - { - key: "Ohphie1Voo6the5hohpi", - url: "http://stif-portail-dev.af83.priv" + { + key: "Ohphie1Voo6the5hohpi", + url: "http://stif-portail-dev.af83.priv" } # Ext. apps links diff --git a/config/routes.rb b/config/routes.rb index aa6713857..0bfde2e25 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -32,25 +32,26 @@ ChouetteIhm::Application.routes.draw do namespace :api do namespace :v1 do - resources :time_tables, :only => [:index, :show] - resources :connection_links, :only => [:index, :show] - resources :companies, :only => [:index, :show] - resources :networks, :only => [:index, :show] - resources :stop_areas, :only => [:index, :show] - resources :group_of_lines, :only => [:index, :show] - resources :access_points, :only => [:index, :show] - resources :access_links, :only => [:index, :show] - resources :lines, :only => [:index, :show] do - resources :journey_patterns, :only => [:index, :show] - resources :routes, :only => [:index, :show] do - resources :vehicle_journeys, :only => [:index, :show] - resources :journey_patterns, :only => [:index, :show] - resources :stop_areas, :only => [:index, :show] + resources :access_links, only: [:index, :show] + resources :access_points, only: [:index, :show] + resources :connection_links, only: [:index, :show] + resources :companies, only: [:index, :show] + resources :group_of_lines, only: [:index, :show] + resources :imports, only: :create + resources :journey_patterns, only: :show + resources :lines, only: [:index, :show] do + resources :journey_patterns, only: [:index, :show] + resources :routes, only: [:index, :show] do + resources :vehicle_journeys, only: [:index, :show] + resources :journey_patterns, only: [:index, :show] + resources :stop_areas, only: [:index, :show] end end - resources :routes, :only => :show - resources :journey_patterns, :only => :show - resources :vehicle_journeys, :only => :show + resources :networks, only: [:index, :show] + resources :routes, only: :show + resources :stop_areas, only: [:index, :show] + resources :time_tables, only: [:index, :show] + resources :vehicle_journeys, only: :show end end @@ -180,7 +181,7 @@ ChouetteIhm::Application.routes.draw do resources :timebands resources :access_points do - resources :access_links + resources :access_links end resources :stop_areas, controller: "referential_stop_areas" do diff --git a/spec/models/api/v1/netex_import_spec.rb b/spec/models/api/v1/netex_import_spec.rb new file mode 100644 index 000000000..f1fddc4ba --- /dev/null +++ b/spec/models/api/v1/netex_import_spec.rb @@ -0,0 +1,15 @@ +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/routing/api/v1/access_links_routes_spec.rb b/spec/routing/api/v1/access_links_routes_spec.rb new file mode 100644 index 000000000..9164d3f05 --- /dev/null +++ b/spec/routing/api/v1/access_links_routes_spec.rb @@ -0,0 +1,9 @@ +RSpec.describe Api::V1::AccessLinksController, type: :controller do + + it 'routes to index' do + expect( get: '/api/v1/access_links' ).to route_to( + controller: 'api/v1/access_links', + action: 'index' + ) + end +end diff --git a/spec/routing/api/v1/import_routes_spec.rb b/spec/routing/api/v1/import_routes_spec.rb new file mode 100644 index 000000000..7acc0e82d --- /dev/null +++ b/spec/routing/api/v1/import_routes_spec.rb @@ -0,0 +1,10 @@ +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/routing/group_of_lines_spec.rb b/spec/routing/group_of_lines_spec.rb index 2a7262893..01ebeefe4 100644 --- a/spec/routing/group_of_lines_spec.rb +++ b/spec/routing/group_of_lines_spec.rb @@ -1,6 +1,4 @@ -require 'spec_helper' - -describe GroupOfLinesController do +RSpec.describe GroupOfLinesController do describe "routing" do it "not recognize #routes" do expect(get( "/line_referentials/1/group_of_lines/2/routes")).not_to route_to( -- cgit v1.2.3 From ae5bc93bcf976367fb911d7fa956d50e26372c8e Mon Sep 17 00:00:00 2001 From: Teddy Wing Date: Thu, 13 Jul 2017 18:36:04 +0200 Subject: Add `WorkbenchImport` model A new model that represents a batched import. The zip archive attached to this record will contain one or more datasets. A `Referential` will be created for each dataset in the zip, and that sub-dataset will be scheduled for a Netex import (only handling Netex imports at the moment). The model is currently empty but I'm committing it now so it can be used by others on the team. Refs #3507 --- app/models/workbench_import.rb | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 app/models/workbench_import.rb diff --git a/app/models/workbench_import.rb b/app/models/workbench_import.rb new file mode 100644 index 000000000..9323bd4b5 --- /dev/null +++ b/app/models/workbench_import.rb @@ -0,0 +1,2 @@ +class WorkbenchImport < Import +end -- cgit v1.2.3 From 03c2dcba29f1d6b4a8d22bd091e036fcf5600924 Mon Sep 17 00:00:00 2001 From: Robert Date: Fri, 14 Jul 2017 10:25:32 +0200 Subject: Fixes: #3555@1h - Import#parent_id & #parent_type migration generated - Import#belongs_to :parent, class_name: to_s specified - Import#belongs_to :parent, class_name: to_s implemented --- app/controllers/import_tasks_controller.rb | 1 - app/models/import.rb | 2 ++ ...0170715041954_add_parent_type_and_parent_id_to_imports.rb | 6 ++++++ db/schema.rb | 4 +++- spec/controllers/api/v1/netex_import_controller_spec.rb | 12 ++++++++++++ spec/models/import_spec.rb | 1 + 6 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 db/migrate/20170715041954_add_parent_type_and_parent_id_to_imports.rb create mode 100644 spec/controllers/api/v1/netex_import_controller_spec.rb diff --git a/app/controllers/import_tasks_controller.rb b/app/controllers/import_tasks_controller.rb index 0e3ed6445..cb377ec5a 100644 --- a/app/controllers/import_tasks_controller.rb +++ b/app/controllers/import_tasks_controller.rb @@ -1,4 +1,3 @@ -# coding: utf-8 class ImportTasksController < ChouetteController defaults :resource_class => ImportTask diff --git a/app/models/import.rb b/app/models/import.rb index d0736ab0b..535c676b1 100644 --- a/app/models/import.rb +++ b/app/models/import.rb @@ -3,6 +3,8 @@ class Import < ActiveRecord::Base belongs_to :workbench belongs_to :referential + belongs_to :parent, class_name: to_s + extend Enumerize enumerize :status, in: %i(new pending successful failed running aborted canceled) diff --git a/db/migrate/20170715041954_add_parent_type_and_parent_id_to_imports.rb b/db/migrate/20170715041954_add_parent_type_and_parent_id_to_imports.rb new file mode 100644 index 000000000..96c1c2a59 --- /dev/null +++ b/db/migrate/20170715041954_add_parent_type_and_parent_id_to_imports.rb @@ -0,0 +1,6 @@ +class AddParentTypeAndParentIdToImports < ActiveRecord::Migration + def change + add_column :imports, :parent_id, :bigint + add_column :imports, :parent_type, :string + end +end diff --git a/db/schema.rb b/db/schema.rb index e64e5c04a..b56027f48 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20170607141317) do +ActiveRecord::Schema.define(version: 20170715041954) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -285,6 +285,8 @@ ActiveRecord::Schema.define(version: 20170607141317) do t.datetime "ended_at" t.string "token_download" t.string "type", limit: 255 + t.integer "parent_id", limit: 8 + t.string "parent_type" end add_index "imports", ["referential_id"], name: "index_imports_on_referential_id", using: :btree diff --git a/spec/controllers/api/v1/netex_import_controller_spec.rb b/spec/controllers/api/v1/netex_import_controller_spec.rb new file mode 100644 index 000000000..b6b90f7d1 --- /dev/null +++ b/spec/controllers/api/v1/netex_import_controller_spec.rb @@ -0,0 +1,12 @@ +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/models/import_spec.rb b/spec/models/import_spec.rb index a2855d086..34bfb0b23 100644 --- a/spec/models/import_spec.rb +++ b/spec/models/import_spec.rb @@ -3,6 +3,7 @@ require 'rails_helper' RSpec.describe Import, :type => :model do it { should belong_to(:referential) } it { should belong_to(:workbench) } + it { should belong_to(:parent).class_name(described_class.to_s) } it { should enumerize(:status).in(:new, :pending, :successful, :failed, :canceled, :running, :aborted ) } -- cgit v1.2.3 From 4f4d43779ed3f9e6d1752dbe00d698bcc1a04966 Mon Sep 17 00:00:00 2001 From: Robert Date: Mon, 17 Jul 2017 12:11:43 +0200 Subject: Refs: #3506@1.5h sketching out specs [amend me] --- app/controllers/api/v1/imports_controller.rb | 10 +++++++ app/controllers/imports_controller.rb | 2 ++ config/environments/development.rb | 23 ++++++++------- config/routes.rb | 37 +++++++++++++------------ spec/models/api/v1/netex_import_spec.rb | 15 ++++++++++ spec/routing/api/v1/access_links_routes_spec.rb | 9 ++++++ spec/routing/api/v1/import_routes_spec.rb | 10 +++++++ spec/routing/group_of_lines_spec.rb | 4 +-- 8 files changed, 79 insertions(+), 31 deletions(-) create mode 100644 app/controllers/api/v1/imports_controller.rb create mode 100644 spec/models/api/v1/netex_import_spec.rb create mode 100644 spec/routing/api/v1/access_links_routes_spec.rb create mode 100644 spec/routing/api/v1/import_routes_spec.rb diff --git a/app/controllers/api/v1/imports_controller.rb b/app/controllers/api/v1/imports_controller.rb new file mode 100644 index 000000000..7dc3021d9 --- /dev/null +++ b/app/controllers/api/v1/imports_controller.rb @@ -0,0 +1,10 @@ +module Api + module V1 + class ImportsController < ChouetteController + + def create + + end + end + end +end diff --git a/app/controllers/imports_controller.rb b/app/controllers/imports_controller.rb index 70c5c1a0d..01a46f064 100644 --- a/app/controllers/imports_controller.rb +++ b/app/controllers/imports_controller.rb @@ -23,6 +23,8 @@ class ImportsController < BreadcrumbController end def create + require 'pry' + binding.pry create! { workbench_import_path(parent, resource) } end diff --git a/config/environments/development.rb b/config/environments/development.rb index 59cb9eefa..35f697d04 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -61,17 +61,20 @@ Rails.application.configure do config.reflex_api_url = "https://pprod.reflex.stif.info/ws/reflex/V1/service=getData" config.codifligne_api_url = "https://pprod.codifligne.stif.info/rest/v1/lc/getlist" - # config.chouette_authentication_settings = { - # type: "database" - # } - config.chouette_authentication_settings = { - type: "cas", - cas_server: "http://stif-portail-dev.af83.priv/sessions" - } + if Rails.env.development? && ENV['NO_VPN'] + config.chouette_authentication_settings = { + type: "database" + } + else + config.chouette_authentication_settings = { + type: "cas", + cas_server: "http://stif-portail-dev.af83.priv/sessions" + } + end config.stif_portail_api = - { - key: "Ohphie1Voo6the5hohpi", - url: "http://stif-portail-dev.af83.priv" + { + key: "Ohphie1Voo6the5hohpi", + url: "http://stif-portail-dev.af83.priv" } # Ext. apps links diff --git a/config/routes.rb b/config/routes.rb index aa6713857..0bfde2e25 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -32,25 +32,26 @@ ChouetteIhm::Application.routes.draw do namespace :api do namespace :v1 do - resources :time_tables, :only => [:index, :show] - resources :connection_links, :only => [:index, :show] - resources :companies, :only => [:index, :show] - resources :networks, :only => [:index, :show] - resources :stop_areas, :only => [:index, :show] - resources :group_of_lines, :only => [:index, :show] - resources :access_points, :only => [:index, :show] - resources :access_links, :only => [:index, :show] - resources :lines, :only => [:index, :show] do - resources :journey_patterns, :only => [:index, :show] - resources :routes, :only => [:index, :show] do - resources :vehicle_journeys, :only => [:index, :show] - resources :journey_patterns, :only => [:index, :show] - resources :stop_areas, :only => [:index, :show] + resources :access_links, only: [:index, :show] + resources :access_points, only: [:index, :show] + resources :connection_links, only: [:index, :show] + resources :companies, only: [:index, :show] + resources :group_of_lines, only: [:index, :show] + resources :imports, only: :create + resources :journey_patterns, only: :show + resources :lines, only: [:index, :show] do + resources :journey_patterns, only: [:index, :show] + resources :routes, only: [:index, :show] do + resources :vehicle_journeys, only: [:index, :show] + resources :journey_patterns, only: [:index, :show] + resources :stop_areas, only: [:index, :show] end end - resources :routes, :only => :show - resources :journey_patterns, :only => :show - resources :vehicle_journeys, :only => :show + resources :networks, only: [:index, :show] + resources :routes, only: :show + resources :stop_areas, only: [:index, :show] + resources :time_tables, only: [:index, :show] + resources :vehicle_journeys, only: :show end end @@ -180,7 +181,7 @@ ChouetteIhm::Application.routes.draw do resources :timebands resources :access_points do - resources :access_links + resources :access_links end resources :stop_areas, controller: "referential_stop_areas" do diff --git a/spec/models/api/v1/netex_import_spec.rb b/spec/models/api/v1/netex_import_spec.rb new file mode 100644 index 000000000..f1fddc4ba --- /dev/null +++ b/spec/models/api/v1/netex_import_spec.rb @@ -0,0 +1,15 @@ +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/routing/api/v1/access_links_routes_spec.rb b/spec/routing/api/v1/access_links_routes_spec.rb new file mode 100644 index 000000000..9164d3f05 --- /dev/null +++ b/spec/routing/api/v1/access_links_routes_spec.rb @@ -0,0 +1,9 @@ +RSpec.describe Api::V1::AccessLinksController, type: :controller do + + it 'routes to index' do + expect( get: '/api/v1/access_links' ).to route_to( + controller: 'api/v1/access_links', + action: 'index' + ) + end +end diff --git a/spec/routing/api/v1/import_routes_spec.rb b/spec/routing/api/v1/import_routes_spec.rb new file mode 100644 index 000000000..7acc0e82d --- /dev/null +++ b/spec/routing/api/v1/import_routes_spec.rb @@ -0,0 +1,10 @@ +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/routing/group_of_lines_spec.rb b/spec/routing/group_of_lines_spec.rb index 2a7262893..01ebeefe4 100644 --- a/spec/routing/group_of_lines_spec.rb +++ b/spec/routing/group_of_lines_spec.rb @@ -1,6 +1,4 @@ -require 'spec_helper' - -describe GroupOfLinesController do +RSpec.describe GroupOfLinesController do describe "routing" do it "not recognize #routes" do expect(get( "/line_referentials/1/group_of_lines/2/routes")).not_to route_to( -- cgit v1.2.3 From 0c69d141911a1f8e55c50d521691506ba7f32ac0 Mon Sep 17 00:00:00 2001 From: Robert Date: Mon, 17 Jul 2017 15:34:33 +0200 Subject: Refs: #3506@16h Request Spec for NetexImport API and implementation - Carrier Wave Upload with `fixture_file_upload` - Request specs to .json - Implementation - API token setup - Refuted experiments with controller specs --- app/controllers/api/v1/netex_imports_controller.rb | 26 ++++++++ app/controllers/imports_controller.rb | 2 - app/models/netex_import.rb | 1 + app/views/api/v1/netex_imports/create.json.rabl | 3 + config/routes.rb | 2 +- spec/controllers/api/v1/lines_controller_spec.rb | 2 +- .../api/v1/netex_import_controller_spec.rb | 12 ---- spec/factories/imports.rb | 5 ++ spec/models/api/v1/api_key_spec.rb | 2 - spec/models/api/v1/netex_import_spec.rb | 15 ----- spec/requests/api/v1/netex_import_spec.rb | 71 ++++++++++++++++++++++ spec/routing/api/v1/import_routes_spec.rb | 10 --- spec/support/api_key.rb | 4 ++ spec/support/json_helper.rb | 11 ++++ 14 files changed, 123 insertions(+), 43 deletions(-) create mode 100644 app/controllers/api/v1/netex_imports_controller.rb create mode 100644 app/views/api/v1/netex_imports/create.json.rabl delete mode 100644 spec/controllers/api/v1/netex_import_controller_spec.rb delete mode 100644 spec/models/api/v1/netex_import_spec.rb create mode 100644 spec/requests/api/v1/netex_import_spec.rb delete mode 100644 spec/routing/api/v1/import_routes_spec.rb create mode 100644 spec/support/json_helper.rb 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 -- cgit v1.2.3 From d2abe2d195a8a8a3bf4539816049be60ca06e187 Mon Sep 17 00:00:00 2001 From: Robert Date: Wed, 19 Jul 2017 09:11:01 +0200 Subject: dead code eliminated --- app/controllers/api/v1/imports_controller.rb | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 app/controllers/api/v1/imports_controller.rb diff --git a/app/controllers/api/v1/imports_controller.rb b/app/controllers/api/v1/imports_controller.rb deleted file mode 100644 index 7dc3021d9..000000000 --- a/app/controllers/api/v1/imports_controller.rb +++ /dev/null @@ -1,10 +0,0 @@ -module Api - module V1 - class ImportsController < ChouetteController - - def create - - end - end - end -end -- cgit v1.2.3 From ca4902a828a702f677637029493d9de6a7b5433b Mon Sep 17 00:00:00 2001 From: cedricnjanga Date: Tue, 18 Jul 2017 12:32:16 +0200 Subject: Remove organisation_match for clone? in Referential policy --- app/policies/referential_policy.rb | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/app/policies/referential_policy.rb b/app/policies/referential_policy.rb index 9d0a92093..fdc80516c 100644 --- a/app/policies/referential_policy.rb +++ b/app/policies/referential_policy.rb @@ -20,7 +20,7 @@ class ReferentialPolicy < ApplicationPolicy def clone? - !archived? && organisation_match? && create? + !archived? && create? end def archive? @@ -37,7 +37,3 @@ class ReferentialPolicy < ApplicationPolicy end end - - - - -- cgit v1.2.3 From a01acfaee6bbc4cd3630ad3ca2d749ff471d3c61 Mon Sep 17 00:00:00 2001 From: cedricnjanga Date: Wed, 19 Jul 2017 10:13:12 +0200 Subject: Adapt test for clone policies changes (user from different organisation) --- spec/decorators/referential_decorator_spec.rb | 5 +++-- spec/policies/referential_policy_spec.rb | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/spec/decorators/referential_decorator_spec.rb b/spec/decorators/referential_decorator_spec.rb index 5de6b7e95..16da8d30b 100644 --- a/spec/decorators/referential_decorator_spec.rb +++ b/spec/decorators/referential_decorator_spec.rb @@ -25,7 +25,7 @@ RSpec.describe ReferentialDecorator, type: [:helper, :decorator] do end end - context 'all rights and different organisation' do + context 'all rights and different organisation' do let( :user ){ build_stubbed :allmighty_user } @@ -33,10 +33,11 @@ RSpec.describe ReferentialDecorator, type: [:helper, :decorator] do expect_action_link_elements.to be_empty expect_action_link_hrefs.to eq([ referential_time_tables_path(object), + new_referential_path(from: object), ]) end end - context 'all rights and same organisation' do + context 'all rights and same organisation' do let( :user ){ build_stubbed :allmighty_user, organisation: referential.organisation } diff --git a/spec/policies/referential_policy_spec.rb b/spec/policies/referential_policy_spec.rb index 33d8e13e8..69d0eb17b 100644 --- a/spec/policies/referential_policy_spec.rb +++ b/spec/policies/referential_policy_spec.rb @@ -46,7 +46,7 @@ RSpec.describe ReferentialPolicy, type: :policy do # ------------------ permissions :clone? do - it_behaves_like 'permitted policy and same organisation', 'referentials.create', archived: true + it_behaves_like 'permitted policy', 'referentials.create', archived: true end permissions :archive? do -- cgit v1.2.3 From 4d6dc16a98aea55f89a3ae3fe5360fa182f62fac Mon Sep 17 00:00:00 2001 From: cedricnjanga Date: Wed, 19 Jul 2017 11:56:14 +0200 Subject: Refs #4129 Change minimumInputLength for VJ select2 --- .../vehicle_journeys/components/tools/select2s/CompanySelect2.js | 2 +- .../vehicle_journeys/components/tools/select2s/MissionSelect2.js | 2 +- .../vehicle_journeys/components/tools/select2s/TimetableSelect2.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/CompanySelect2.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/CompanySelect2.js index a6b8dcfa1..d277be003 100644 --- a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/CompanySelect2.js +++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/CompanySelect2.js @@ -51,7 +51,7 @@ class BSelect4 extends React.Component{ }, cache: true }, - minimumInputLength: 3, + minimumInputLength: 1, templateResult: formatRepo }} /> diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/MissionSelect2.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/MissionSelect2.js index 89746da02..89c8fca00 100644 --- a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/MissionSelect2.js +++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/MissionSelect2.js @@ -50,7 +50,7 @@ class BSelect4 extends React.Component{ }, cache: true }, - minimumInputLength: 0, + minimumInputLength: 1, escapeMarkup: function (markup) { return markup; }, templateResult: formatRepo }} diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/TimetableSelect2.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/TimetableSelect2.js index dd098053e..a4df10369 100644 --- a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/TimetableSelect2.js +++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/TimetableSelect2.js @@ -50,7 +50,7 @@ class BSelect4 extends React.Component{ }, cache: true }, - minimumInputLength: 3, + minimumInputLength: 1, escapeMarkup: function (markup) { return markup; }, templateResult: formatRepo }} -- cgit v1.2.3 From 144e75edb237e94313bb9e1fc69c47781e72bd74 Mon Sep 17 00:00:00 2001 From: cedricnjanga Date: Wed, 19 Jul 2017 11:57:23 +0200 Subject: Refs 4131 Change Timetable#create to fetch all Calendars (new_from) --- app/controllers/time_tables_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/time_tables_controller.rb b/app/controllers/time_tables_controller.rb index 20d500ea9..b7fb2bf9b 100644 --- a/app/controllers/time_tables_controller.rb +++ b/app/controllers/time_tables_controller.rb @@ -37,7 +37,7 @@ class TimeTablesController < ChouetteController tt_params = time_table_params if tt_params[:calendar_id] %i(monday tuesday wednesday thursday friday saturday sunday).map { |d| tt_params[d] = true } - calendar = current_organisation.calendars.find_by_id(tt_params[:calendar_id]) + calendar = Calendar.find(tt_params[:calendar_id]) tt_params[:calendar_id] = nil if tt_params.has_key?(:dates_attributes) || tt_params.has_key?(:periods_attributes) end -- cgit v1.2.3 From cd22d9c013b6100e84d9199265482a0373834b48 Mon Sep 17 00:00:00 2001 From: jpl Date: Wed, 19 Jul 2017 15:32:07 +0200 Subject: Refs #4128: updating autocomplete component results display --- .../vehicle_journeys/components/tools/select2s/MissionSelect2.js | 2 +- .../vehicle_journeys/components/tools/select2s/TimetableSelect2.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/MissionSelect2.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/MissionSelect2.js index 89c8fca00..c04a1d642 100644 --- a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/MissionSelect2.js +++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/MissionSelect2.js @@ -43,7 +43,7 @@ class BSelect4 extends React.Component{ item => _.assign( {}, item, - { text: '' + _.last(_.split(item.object_id, ':')) + " - " + item.published_name + "
" + item.registration_number + "" } + { text: "" + item.published_name + _.last(_.split(item.object_id, ':')) + "
" + item.registration_number + "" } ) ) }; diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/TimetableSelect2.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/TimetableSelect2.js index a4df10369..3e81290f5 100644 --- a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/TimetableSelect2.js +++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/TimetableSelect2.js @@ -43,7 +43,7 @@ class BSelect4 extends React.Component{ item => _.assign( {}, item, - {text: '' + item.short_id + ' - ' + (item.color ? " - " : '') + item.comment + '
' + item.day_types.match(/[A-Z]?[a-z]+/g).join(', ') + ''} + {text: '' + (item.color ? " " : '') + item.comment + ' - ' + item.short_id + '
' + item.day_types.match(/[A-Z]?[a-z]+/g).join(', ') + ''} ) ) }; -- cgit v1.2.3 From b1904db1a8145620f600736a9933c043a4dfcf9f Mon Sep 17 00:00:00 2001 From: Robert Date: Wed, 19 Jul 2017 18:41:01 +0200 Subject: Refs: #3506@1h; Code Review --- app/models/netex_import.rb | 2 +- config/environments/development.rb | 7 +++--- spec/controllers/api/v1/lines_controller_spec.rb | 2 +- spec/factories/imports.rb | 5 ++-- spec/requests/api/v1/netex_import_spec.rb | 31 ++++++++++++------------ 5 files changed, 23 insertions(+), 24 deletions(-) diff --git a/app/models/netex_import.rb b/app/models/netex_import.rb index 40eaca523..4a1c6f1e5 100644 --- a/app/models/netex_import.rb +++ b/app/models/netex_import.rb @@ -8,7 +8,7 @@ class NetexImport < Import begin Net::HTTP.get(URI("#{Rails.configuration.iev_url}/boiv_iev/referentials/importer/new?id=#{id}")) rescue Exception => e - logger.error "IEV server error : e.message" + logger.error "IEV server error : #{e.message}" logger.error e.backtrace.inspect end end diff --git a/config/environments/development.rb b/config/environments/development.rb index 35f697d04..624382000 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -71,10 +71,9 @@ Rails.application.configure do cas_server: "http://stif-portail-dev.af83.priv/sessions" } end - config.stif_portail_api = - { - key: "Ohphie1Voo6the5hohpi", - url: "http://stif-portail-dev.af83.priv" + config.stif_portail_api = { + key: "Ohphie1Voo6the5hohpi", + url: "http://stif-portail-dev.af83.priv" } # Ext. apps links diff --git a/spec/controllers/api/v1/lines_controller_spec.rb b/spec/controllers/api/v1/lines_controller_spec.rb index 30c2f1a50..d57eed766 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", :wip do + it_behaves_like "api key protected controller" do let(:data){line} end describe "GET #index" do diff --git a/spec/factories/imports.rb b/spec/factories/imports.rb index eea1894a5..e19fe92bb 100644 --- a/spec/factories/imports.rb +++ b/spec/factories/imports.rb @@ -10,9 +10,8 @@ FactoryGirl.define do started_at nil ended_at nil - factory :netex_import do - type 'NetexImport' - file {Rails.root.join('spec', 'fixtures', 'terminated_job.json')} + factory :netex_import, class: NetexImport do + file {File.open(Rails.root.join('spec', 'fixtures', 'terminated_job.json'))} end end end diff --git a/spec/requests/api/v1/netex_import_spec.rb b/spec/requests/api/v1/netex_import_spec.rb index b7a5c94ee..de281aa66 100644 --- a/spec/requests/api/v1/netex_import_spec.rb +++ b/spec/requests/api/v1/netex_import_spec.rb @@ -8,63 +8,64 @@ RSpec.describe "NetexImport", type: :request do let( :file ){ fixture_file_upload( file_path ) } let( :post_request ) do - -> do + -> (attributes) do post "/api/v1/netex_imports.json", attributes, authorization end end - let( :attributes ){ { + let( :legal_attributes ){ { netex_import: { name: 'hello world', file: file, referential_id: referential.id} } } + let( :illegal_attributes ){ { + netex_import: { + 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.() + post_request.(legal_attributes) expect( response ).to be_success - expect( JSON.parse(response.body) ).to eq({'id' => NetexImport.last.id, 'type' => 'NetexImport'}) + expect( json_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) + expect{ post_request.(legal_attributes) }.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.() + it 'does not succeed' do + post_request.(legal_attributes) expect( response.status ).to eq(401) end it 'does not create an Import object' do - expect(&post_request).not_to change{Import.count} + expect{ post_request.(legal_attributes) }.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.() + it 'does not succeed' do + post_request.(illegal_attributes) 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} + expect{ post_request.(illegal_attributes) }.not_to change{Import.count} end end end -- cgit v1.2.3 From 37741f8bd5bc4c3698194c04bbe8aee3d7f6781a Mon Sep 17 00:00:00 2001 From: Teddy Wing Date: Wed, 19 Jul 2017 18:41:05 +0200 Subject: Fix errors from JS-formatted templates using the table_builder We were getting errors like these: Started GET "/referentials/4/networks?_=1500482065840" for 127.0.0.1 at 2017-07-19 18:34:27 +0200 Processing by ReferentialNetworksController#index as JS Parameters: {"_"=>"1500482065840", "referential_id"=>"4"} User Load (3.6ms) SELECT "public"."users".* FROM "public"."users" WHERE "public"."users"."id" = $1 ORDER BY "public"."users"."id" ASC LIMIT 1 [["id", 1]] locale set to :fr Organisation Load (5.6ms) SELECT "public"."organisations".* FROM "public"."organisations" WHERE "public"."organisations"."id" = $1 LIMIT 1 [["id", 1]] Referential Load (1.0ms) SELECT "public"."referentials".* FROM "public"."referentials" WHERE "public"."referentials"."organisation_id" = $1 AND "public"."referentials"."id" = $2 LIMIT 1 [["organisation_id", 1], ["id", 4]] Workbench Load (0.7ms) SELECT "public"."workbenches".* FROM "public"."workbenches" WHERE "public"."workbenches"."id" = $1 LIMIT 1 [["id", 1]] (1.3ms) SELECT DISTINCT COUNT(DISTINCT "public"."networks"."id") FROM "public"."networks" INNER JOIN "public"."line_referentials" ON "public"."networks"."line_referential_id" = "public"."line_referentials"."id" WHERE "public"."line_referentials"."id" = $1 [["id", 1]] CACHE (0.0ms) SELECT DISTINCT COUNT(DISTINCT "public"."networks"."id") FROM "public"."networks" INNER JOIN "public"."line_referentials" ON "public"."networks"."line_referential_id" = "public"."line_referentials"."id" WHERE "public"."line_referentials"."id" = $1 [["id", 1]] Chouette::Network Load (2.3ms) SELECT DISTINCT "public"."networks".* FROM "public"."networks" INNER JOIN "public"."line_referentials" ON "public"."networks"."line_referential_id" = "public"."line_referentials"."id" WHERE "public"."line_referentials"."id" = $1 ORDER BY name asc LIMIT 12 OFFSET 0 [["id", 1]] CACHE (0.0ms) SELECT DISTINCT COUNT(DISTINCT "public"."networks"."id") FROM "public"."networks" INNER JOIN "public"."line_referentials" ON "public"."networks"."line_referential_id" = "public"."line_referentials"."id" WHERE "public"."line_referentials"."id" = $1 [["id", 1]] Chouette::Network Exists (1.2ms) SELECT 1 AS one FROM "public"."networks" WHERE "public"."networks"."id" = $1 LIMIT 1 [["id", 118]] Rendered referential_networks/index.html.slim (48.9ms) Completed 500 Internal Server Error in 184ms (ActiveRecord: 17.4ms) ActionView::Template::Error (undefined method `action_links' for #): 22: - if @networks.any? 23: .row 24: .col-lg-12 25: = table_builder_2 @networks, 26: [ \ 27: TableBuilderHelper::Column.new( \ 28: name: 'ID Codifligne', \ app/helpers/table_builder_helper.rb:161:in `block in build_links' app/helpers/table_builder_helper.rb:158:in `build_links' app/helpers/table_builder_helper.rb:138:in `block (3 levels) in tbody' app/helpers/table_builder_helper.rb:110:in `block (2 levels) in tbody' app/helpers/table_builder_helper.rb:108:in `block in tbody' app/helpers/table_builder_helper.rb:107:in `tbody' app/helpers/table_builder_helper.rb:72:in `table_builder_2' app/views/referential_networks/index.html.slim:25:in `_app_views_referential_networks_index_html_slim___1557411244315414919_70366016986820' app/controllers/referential_networks_controller.rb:27:in `index' Rendered .../lib/ruby/gems/2.3.0/gems/actionpack-4.2.8/lib/action_dispatch/middleware/templates/rescues/_trace.text.erb (1.8ms) Rendered .../lib/ruby/gems/2.3.0/gems/actionpack-4.2.8/lib/action_dispatch/middleware/templates/rescues/_request_and_response.text.erb (2.5ms) Rendered .../lib/ruby/gems/2.3.0/gems/actionpack-4.2.8/lib/action_dispatch/middleware/templates/rescues/template_error.text.erb (76.0ms) on the following pages: - http://stif-boiv.dev:3000/referentials/4/time_tables - http://stif-boiv.dev:3000/line_referentials/1/companies - http://stif-boiv.dev:3000/line_referentials/1/networks - http://stif-boiv.dev:3000/referentials/4/companies - http://stif-boiv.dev:3000/referentials/4/networks This was caused by the request of a JS-formatted view that rendered the HTML template, since the collection decoration only happened in the HTML format section. Do the decoration in both the HTML format and JS format for the relevant controllers in order to eliminate this error. Maybe there's a cleaner way to do this than just duplicating the decoration in both `format.X` blocks, but I don't know of it. Wanted to make sure not to decorate when it wasn't necessary, like when rendering other formats (XML, etc.). Refs #4105 --- app/controllers/companies_controller.rb | 23 +++++++++++++++------- app/controllers/networks_controller.rb | 23 +++++++++++++++------- .../referential_companies_controller.rb | 23 +++++++++++++++------- app/controllers/referential_networks_controller.rb | 23 +++++++++++++++------- app/controllers/time_tables_controller.rb | 22 ++++++++++++++------- 5 files changed, 79 insertions(+), 35 deletions(-) diff --git a/app/controllers/companies_controller.rb b/app/controllers/companies_controller.rb index 07a732fc9..cf27c39cf 100644 --- a/app/controllers/companies_controller.rb +++ b/app/controllers/companies_controller.rb @@ -16,14 +16,13 @@ class CompaniesController < BreadcrumbController redirect_to params.merge(:page => 1) end - @companies = ModelDecorator.decorate( - @companies, - with: CompanyDecorator, - context: { - referential: line_referential - } - ) + @companies = decorate_companies(@companies) } + + format.json { + @companies = decorate_companies(@companies) + } + build_breadcrumb :index end end @@ -77,4 +76,14 @@ class CompaniesController < BreadcrumbController %w[asc desc].include?(params[:direction]) ? params[:direction] : 'asc' end + def decorate_companies(companies) + ModelDecorator.decorate( + companies, + with: CompanyDecorator, + context: { + referential: line_referential + } + ) + end + end diff --git a/app/controllers/networks_controller.rb b/app/controllers/networks_controller.rb index d1f83340e..5dae1ba3f 100644 --- a/app/controllers/networks_controller.rb +++ b/app/controllers/networks_controller.rb @@ -37,14 +37,13 @@ class NetworksController < BreadcrumbController redirect_to params.merge(:page => 1) end - @networks = ModelDecorator.decorate( - @networks, - with: NetworkDecorator, - context: { - line_referential: line_referential - } - ) + @networks = decorate_networks(@networks) } + + format.js { + @networks = decorate_networks(@networks) + } + build_breadcrumb :index end end @@ -87,4 +86,14 @@ class NetworksController < BreadcrumbController %w[asc desc].include?(params[:direction]) ? params[:direction] : 'asc' end + def decorate_networks(networks) + ModelDecorator.decorate( + networks, + with: NetworkDecorator, + context: { + line_referential: line_referential + } + ) + end + end diff --git a/app/controllers/referential_companies_controller.rb b/app/controllers/referential_companies_controller.rb index 53dde93bb..482f74ea0 100644 --- a/app/controllers/referential_companies_controller.rb +++ b/app/controllers/referential_companies_controller.rb @@ -14,14 +14,13 @@ class ReferentialCompaniesController < ChouetteController redirect_to params.merge(:page => 1) end - @companies = ModelDecorator.decorate( - @companies, - with: CompanyDecorator, - context: { - referential: referential - } - ) + @companies = decorate_companies(@companies) } + + format.js { + @companies = decorate_companies(@companies) + } + build_breadcrumb :index end end @@ -70,4 +69,14 @@ class ReferentialCompaniesController < ChouetteController %w[asc desc].include?(params[:direction]) ? params[:direction] : 'asc' end + def decorate_companies(companies) + ModelDecorator.decorate( + companies, + with: CompanyDecorator, + context: { + referential: referential + } + ) + end + end diff --git a/app/controllers/referential_networks_controller.rb b/app/controllers/referential_networks_controller.rb index e0ce71ce4..ee2db8008 100644 --- a/app/controllers/referential_networks_controller.rb +++ b/app/controllers/referential_networks_controller.rb @@ -30,14 +30,13 @@ class ReferentialNetworksController < ChouetteController redirect_to params.merge(:page => 1) end - @networks = ModelDecorator.decorate( - @networks, - with: ReferentialNetworkDecorator, - context: { - referential: referential - } - ) + @networks = decorate_networks(@networks) } + + format.js { + @networks = decorate_networks(@networks) + } + build_breadcrumb :index end end @@ -81,4 +80,14 @@ class ReferentialNetworksController < ChouetteController %w[asc desc].include?(params[:direction]) ? params[:direction] : 'asc' end + def decorate_networks(networks) + ModelDecorator.decorate( + networks, + with: ReferentialNetworkDecorator, + context: { + referential: referential + } + ) + end + end diff --git a/app/controllers/time_tables_controller.rb b/app/controllers/time_tables_controller.rb index b7fb2bf9b..edeb5a32f 100644 --- a/app/controllers/time_tables_controller.rb +++ b/app/controllers/time_tables_controller.rb @@ -86,16 +86,14 @@ class TimeTablesController < ChouetteController redirect_to params.merge(:page => 1) end - @time_tables = ModelDecorator.decorate( - @time_tables, - with: TimeTableDecorator, - context: { - referential: @referential - } - ) + @time_tables = decorate_time_tables(@time_tables) build_breadcrumb :index } + + format.js { + @time_tables = decorate_time_tables(@time_tables) + } end end @@ -195,6 +193,16 @@ class TimeTablesController < ChouetteController Chouette::TimeTable.find(from_id) if from_id end + def decorate_time_tables(time_tables) + ModelDecorator.decorate( + time_tables, + with: TimeTableDecorator, + context: { + referential: @referential + } + ) + end + def time_table_params params.require(:time_table).permit( :objectid, -- cgit v1.2.3 From 2de0d63c148218c983a30117ee277ef9307906c8 Mon Sep 17 00:00:00 2001 From: Robert Date: Thu, 20 Jul 2017 06:08:54 +0200 Subject: Refs: #3506@1.5h; server debugging - Fixed conf error (missing schema in `config.iev_url`) - Reported java server traces (looks like missing metadata) --- config/environments/development.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/environments/development.rb b/config/environments/development.rb index 624382000..5b2bd7402 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -82,7 +82,7 @@ Rails.application.configure do config.portal_url = "http://stif-boiv-staging.af83.priv" # IEV url - config.iev_url = "localhost:8080" + config.iev_url = "http://localhost:8080" # file to data for demo config.demo_data = "tmp/demo.zip" -- cgit v1.2.3 From 4fd4fa0fd24c9cd86161358f2e36cff64f3712d7 Mon Sep 17 00:00:00 2001 From: jpl Date: Thu, 20 Jul 2017 10:51:25 +0200 Subject: Refs #4113: fix display bug on selected items result (VJ select2 comp.) --- app/assets/stylesheets/components/_select2.sass | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/assets/stylesheets/components/_select2.sass b/app/assets/stylesheets/components/_select2.sass index 960e8b10b..332af16cd 100644 --- a/app/assets/stylesheets/components/_select2.sass +++ b/app/assets/stylesheets/components/_select2.sass @@ -7,6 +7,10 @@ // .select2-results__message, .loading-results // display: none +.select2-container, .select2-container--bootstrap + .select2-selection--single .select2-selection__rendered + height: 100% + .select2-selection__placeholder color: rgba($grey, 0.65) font-style: italic -- cgit v1.2.3 From 327c27559a955782b70dff46aeca1c58dcf95836 Mon Sep 17 00:00:00 2001 From: Robert Date: Thu, 20 Jul 2017 11:45:30 +0200 Subject: Fixes: #3506@0.5h * CR refacts (netex_import req spec) * Dead Code Elimination (mount in Import subclasses) --- app/models/netex_import.rb | 1 - spec/requests/api/v1/netex_import_spec.rb | 28 ++++++++++++++-------------- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/app/models/netex_import.rb b/app/models/netex_import.rb index 4a1c6f1e5..0cf4d0a7c 100644 --- a/app/models/netex_import.rb +++ b/app/models/netex_import.rb @@ -1,6 +1,5 @@ require 'net/http' class NetexImport < Import - mount_uploader :file, ImportUploader after_commit :launch_java_import def launch_java_import diff --git a/spec/requests/api/v1/netex_import_spec.rb b/spec/requests/api/v1/netex_import_spec.rb index de281aa66..9fbf8f801 100644 --- a/spec/requests/api/v1/netex_import_spec.rb +++ b/spec/requests/api/v1/netex_import_spec.rb @@ -15,30 +15,30 @@ RSpec.describe "NetexImport", type: :request do end end - let( :legal_attributes ){ { - netex_import: { + let( :legal_attributes ) do + { name: 'hello world', file: file, - referential_id: referential.id} - } } + referential_id: referential.id + } + end - let( :illegal_attributes ){ { - netex_import: { - referential_id: referential.id} - } } + let( :illegal_attributes ) do + { referential_id: referential.id } + end context 'with correct credentials and correct request' do let( :authorization ){ authorization_token_header( get_api_key.token ) } it 'succeeds' do - post_request.(legal_attributes) + post_request.(netex_import: legal_attributes) expect( response ).to be_success expect( json_response_body ).to eq({'id' => NetexImport.last.id, 'type' => 'NetexImport'}) end it 'creates a NetexImport object in the DB' do - expect{ post_request.(legal_attributes) }.to change{NetexImport.count}.by(1) + expect{ post_request.(netex_import: legal_attributes) }.to change{NetexImport.count}.by(1) end end @@ -46,12 +46,12 @@ RSpec.describe "NetexImport", type: :request do let( :authorization ){ authorization_token_header( "#{referential.id}-incorrect_token") } it 'does not succeed' do - post_request.(legal_attributes) + post_request.(netex_import: legal_attributes) expect( response.status ).to eq(401) end it 'does not create an Import object' do - expect{ post_request.(legal_attributes) }.not_to change{Import.count} + expect{ post_request.(netex_import: legal_attributes) }.not_to change{Import.count} end end @@ -59,13 +59,13 @@ RSpec.describe "NetexImport", type: :request do let( :authorization ){ authorization_token_header( get_api_key.token ) } it 'does not succeed' do - post_request.(illegal_attributes) + post_request.(netex_import: illegal_attributes) 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.(illegal_attributes) }.not_to change{Import.count} + expect{ post_request.(netex_import: illegal_attributes) }.not_to change{Import.count} end end end -- cgit v1.2.3