diff options
36 files changed, 286 insertions, 274 deletions
diff --git a/.gitignore b/.gitignore index 4bd57ce25..1bca870cb 100644 --- a/.gitignore +++ b/.gitignore @@ -31,5 +31,8 @@ coverage bin/ +# Ignore uploaded files +/public/uploads + # Ignore node modules /node_modules @@ -120,6 +120,7 @@ gem 'acts_as_list', '~> 0.6.0' gem 'acts_as_tree', '~> 2.1.0', require: 'acts_as_tree' gem 'rabl' +gem 'carrierwave', '~> 1.0' gem 'sidekiq' gem 'sinatra' diff --git a/Gemfile.lock b/Gemfile.lock index f152ffd08..1c9f275e5 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -115,6 +115,10 @@ GEM rack (>= 1.0.0) rack-test (>= 0.5.4) xpath (~> 2.0) + carrierwave (1.0.0) + activemodel (>= 4.0.0) + activesupport (>= 4.0.0) + mime-types (>= 1.16) celluloid (0.16.0) timers (~> 4.0.0) choice (0.1.7) @@ -600,6 +604,7 @@ DEPENDENCIES capistrano-ext capistrano-npm capybara (~> 2.4.0) + carrierwave (~> 1.0) cocoon codifligne! coffee-rails (~> 4.0.0) diff --git a/app/controllers/imports_controller.rb b/app/controllers/imports_controller.rb index 757e7f09e..3eab7e66b 100644 --- a/app/controllers/imports_controller.rb +++ b/app/controllers/imports_controller.rb @@ -1,110 +1,29 @@ -# coding: utf-8 -require 'will_paginate/array' -require 'open-uri' - -class ImportsController < ChouetteController +class ImportsController < BreadcrumbController defaults :resource_class => Import - - respond_to :html, :only => [:show, :index, :destroy, :imported_file, :rule_parameter_set, :compliance_check] - respond_to :js, :only => [:index, :compliance_check] - belongs_to :referential - - def index - begin - index! do - build_breadcrumb :index - end - rescue Ievkit::Error, Faraday::Error => error - logger.error("Iev failure : #{error.message}") - flash[:error] = t(error.locale_for_error) - redirect_to referential_path(@referential) - end - end + respond_to :html + belongs_to :workbench def show - begin - show! do - build_breadcrumb :show - end - rescue Ievkit::Error, Faraday::Error => error - logger.error("Iev failure : #{error.message}") - flash[:error] = t(error.locale_for_error) - redirect_to referential_path(@referential) - end - end - - def destroy - begin - destroy! - rescue Ievkit::Error, Faraday::Error => error - logger.error("Iev failure : #{error.message}") - flash[:error] = t(error.locale_for_error) - redirect_to referential_path(@referential) - end - end - - def imported_file - # WARNING : files under 10kb in size get treated as StringIO by OpenUri - # http://stackoverflow.com/questions/10496874/why-does-openuri-treat-files-under-10kb-in-size-as-stringio - OpenURI::Buffer.send :remove_const, 'StringMax' if OpenURI::Buffer.const_defined?('StringMax') - OpenURI::Buffer.const_set 'StringMax', 0 - begin - send_file open(resource.file_path), { :type => "application/#{resource.filename_extension}", :disposition => "attachment", :filename => resource.filename } - rescue Ievkit::Error, Faraday::Error => error - logger.error("Iev failure : #{error.message}") - flash[:error] = t(error.locale_for_error) - redirect_to referential_path(@referential) - end - end - - def rule_parameter_set - begin - @rule_parameter_set = resource.rule_parameter_set - build_breadcrumb :rule_parameter_set - render "rule_parameter_sets/show" - rescue Ievkit::Error, Faraday::Error => error - logger.error("Iev failure : #{error.message}") - flash[:error] = t(error.locale_for_error) - redirect_to referential_path(@referential) + show! do + build_breadcrumb :show end end - def export - respond_to do |format| - format.zip { send_file ComplianceCheckExport.new(resource, @referential.id, request).export, :type => :zip } + def index + index! do + build_breadcrumb :index end end - def compliance_check - begin - @compliance_check = resource - build_breadcrumb :compliance_check - render "compliance_checks/report" - rescue Ievkit::Error, Faraday::Error => error - logger.error("Iev failure : #{error.message}") - flash[:error] = t(error.locale_for_error) - redirect_to referential_path(@referential) + def new + new! do + build_breadcrumb :new end end - protected - alias_method :import, :resource + private - def import_service - ImportService.new(@referential) + def import_params + params.require(:import).permit(:name, :file, :referential_id) end - - def resource - @import ||= import_service.find( params[:id] ) - @line_items = @import.report.line_items - if @line_items.size > 500 - @line_items = @line_items.paginate(page: params[:page], per_page: 20) - end - @import - end - - def collection - @imports ||= import_service.all.sort_by{ |import| import.created_at }.reverse.paginate(:page => params[:page]) - end - end diff --git a/app/helpers/breadcrumb_helper.rb b/app/helpers/breadcrumb_helper.rb index a382f1926..3a742d0dc 100644 --- a/app/helpers/breadcrumb_helper.rb +++ b/app/helpers/breadcrumb_helper.rb @@ -216,14 +216,10 @@ module BreadcrumbHelper end def import_breadcrumb (action) - referential_breadcrumb - add_breadcrumb Referential.human_attribute_name("imports"), referential_imports_path(@referential) unless action == :index - - add_breadcrumb @import.name, referential_import_path(@referential, @import.id) if @import - - #add_breadcrumb @rule_parameter_set.import.name, compliance_check_referential_import_path(@referential, @rule_parameter_set.import.id) if action == :rule_parameter_set + add_breadcrumb I18n.t("breadcrumbs.referentials"), referentials_path + add_breadcrumb breadcrumb_label(@workbench), workbench_path(@workbench), :title => breadcrumb_tooltip(@workbench) + add_breadcrumb I18n.t("breadcrumbs.imports"), workbench_imports_path(@workbench) - #add_breadcrumb "Tests de conformité", compliance_check_referential_import_path(@referential, @compliance_check.id) if @compliance_check end def export_breadcrumb (action) diff --git a/app/models/import.rb b/app/models/import.rb index 078f1698e..8ffac5c5e 100644 --- a/app/models/import.rb +++ b/app/models/import.rb @@ -1,87 +1,7 @@ -require 'open-uri' +class Import < ActiveRecord::Base + mount_uploader :file, ImportUploader + belongs_to :workbench + belongs_to :referential -class Import - include JobConcern - - def initialize( response ) - @datas = response - end - - def report? - links["action_report"].present? - end - - def report - Rails.cache.fetch("#{cache_key}/action_report", expires_in: cache_expiration) do - report_path = links["action_report"] - if report_path - response = Ievkit.get(report_path) - ImportReport.new(response) - else - nil - end - end - end - - def rule_parameter_set? - links["validation_params"].present? - end - - def rule_parameter_set - Rails.cache.fetch("#{cache_key}/validation_params", expires_in: cache_expiration) do - rule_parameter_set_path = links["validation_params"] - if rule_parameter_set_path - response = Ievkit.get(rule_parameter_set_path) - rule_parameter_set = RuleParameterSet.new(:name => "", :import => self).tap { |rps| rps.parameters = response.validation } - else - nil - end - end - end - - def compliance_check? - links["validation_report"].present? - end - - def compliance_check_validation_report - puts "compliance_check_validation_report" - Rails.cache.fetch("#{cache_key}/validation_report", expires_in: cache_expiration) do - compliance_check_path = links["validation_report"] - if compliance_check_path - response = Ievkit.get(compliance_check_path) - ComplianceCheckResult.new(response) - else - nil - end - end - end - - def destroy - delete_path = links["delete"] - cancel_path = links["cancel"] - - if delete_path - Ievkit.delete(delete_path) - elsif cancel_path - Ievkit.delete(cancel_path) - else - nil - end - end - - def file_path? - links["data"].present? - end - - def file_path - links["data"] - end - - def filename - File.basename(file_path) if file_path - end - - def filename_extension - File.extname(filename).gsub(".", "") if filename - end + validates :file, presence: true end diff --git a/app/models/import_message.rb b/app/models/import_message.rb new file mode 100644 index 000000000..5d0f5c862 --- /dev/null +++ b/app/models/import_message.rb @@ -0,0 +1,7 @@ +class ImportMessage < ActiveRecord::Base + belongs_to :import + belongs_to :resource, class_name: ImportResource + enum criticity: [:info, :warning, :error] + + validates :criticity, presence: true +end diff --git a/app/models/import_resource.rb b/app/models/import_resource.rb new file mode 100644 index 000000000..f140e1b36 --- /dev/null +++ b/app/models/import_resource.rb @@ -0,0 +1,23 @@ +class ImportResource < ActiveRecord::Base + include AASM + belongs_to :import + + aasm column: :status do + state :new, :initial => true + state :pending + state :successful + state :failed + + event :run do + transitions :from => [:new, :failed], :to => :pending + end + + event :successful do + transitions :from => [:pending, :failed], :to => :successful + end + + event :failed do + transitions :from => :pending, :to => :failed + end + end +end diff --git a/app/models/referential.rb b/app/models/referential.rb index 34da65755..dbc7b76e7 100644 --- a/app/models/referential.rb +++ b/app/models/referential.rb @@ -34,7 +34,6 @@ class Referential < ActiveRecord::Base has_many :companies, through: :line_referential has_many :group_of_lines, through: :line_referential has_many :networks, through: :line_referential - has_many :metadatas, class_name: "ReferentialMetadata", inverse_of: :referential, dependent: :destroy accepts_nested_attributes_for :metadatas diff --git a/app/models/workbench.rb b/app/models/workbench.rb index 21c586873..008f73d46 100644 --- a/app/models/workbench.rb +++ b/app/models/workbench.rb @@ -8,7 +8,7 @@ class Workbench < ActiveRecord::Base has_many :companies, through: :line_referential has_many :group_of_lines, through: :line_referential has_many :stop_areas, through: :stop_area_referential - + has_many :imports validates :name, presence: true validates :organisation, presence: true diff --git a/app/uploaders/import_uploader.rb b/app/uploaders/import_uploader.rb new file mode 100644 index 000000000..2740393ca --- /dev/null +++ b/app/uploaders/import_uploader.rb @@ -0,0 +1,49 @@ +class ImportUploader < CarrierWave::Uploader::Base + + # Include RMagick or MiniMagick support: + # include CarrierWave::RMagick + # include CarrierWave::MiniMagick + + # Choose what kind of storage to use for this uploader: + storage :file + # storage :fog + + # Override the directory where uploaded files will be stored. + # This is a sensible default for uploaders that are meant to be mounted: + def store_dir + "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" + end + + # Provide a default URL as a default if there hasn't been a file uploaded: + # def default_url + # # For Rails 3.1+ asset pipeline compatibility: + # # ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_')) + # + # "/images/fallback/" + [version_name, "default.png"].compact.join('_') + # end + + # Process files as they are uploaded: + # process scale: [200, 300] + # + # def scale(width, height) + # # do something + # end + + # Create different versions of your uploaded files: + # version :thumb do + # process resize_to_fit: [50, 50] + # end + + # Add a white list of extensions which are allowed to be uploaded. + # For images you might use something like this: + # def extension_whitelist + # %w(jpg jpeg gif png) + # end + + # Override the filename of the uploaded files: + # Avoid using model.id or version_name here, see uploader/store.rb for details. + # def filename + # "something.jpg" if original_filename + # end + +end diff --git a/app/views/imports/_form.html.slim b/app/views/imports/_form.html.slim new file mode 100644 index 000000000..693ce6fc4 --- /dev/null +++ b/app/views/imports/_form.html.slim @@ -0,0 +1,5 @@ += simple_form_for [workbench, import] do |f| + = f.input :name + = f.input :file + = f.association :referential + = f.button :submit diff --git a/app/views/imports/_import.html.slim b/app/views/imports/_import.html.slim deleted file mode 100644 index 7d4753358..000000000 --- a/app/views/imports/_import.html.slim +++ /dev/null @@ -1,24 +0,0 @@ -#index_item.panel.panel-default.import - .panel-heading - .panel-title.clearfix - span.pull-right - = link_to referential_import_path(@referential, import.id), method: :delete, :data => {:confirm => t('imports.actions.destroy_confirm')}, class: 'btn btn-danger btn-sm' do - span.fa.fa-trash-o - - h5 - = link_to( referential_import_path(@referential, import.id), class: 'preview', :title => "#{ImportTask.model_name.human.capitalize} #{import.name}") do - = job_status_title(import) - - .panel-body - p - = link_to font_awesome_classic_tag("fa-file-#{import.filename_extension}-o") + t("imports.show.imported_file"), imported_file_referential_import_path(@referential, import.id) if import.file_path? - - p - = link_to font_awesome_classic_tag("fa-external-link") + t("imports.show.compliance_check"), compliance_check_referential_import_path(@referential, import.id) if import.compliance_check? - - .panel-footer - = import_attributes_tag(import) - - .history - = l(import.created_at, :format => "%d/%m/%Y %H:%M") if import.created_at - = " | #{import.user_name}"
\ No newline at end of file diff --git a/app/views/imports/_imports.html.slim b/app/views/imports/_imports.html.slim deleted file mode 100644 index 3605fd10b..000000000 --- a/app/views/imports/_imports.html.slim +++ /dev/null @@ -1,9 +0,0 @@ -.page_info - span.search = t("will_paginate.page_entries_info.search") - = page_entries_info @imports - -.imports.paginated_content - = paginated_content @imports, "imports/import" - -.pagination - = will_paginate @imports, :container => false, renderer: RemoteBootstrapPaginationLinkRenderer
\ No newline at end of file diff --git a/app/views/imports/index.html.slim b/app/views/imports/index.html.slim index b1922d005..fd87de90f 100644 --- a/app/views/imports/index.html.slim +++ b/app/views/imports/index.html.slim @@ -1,13 +1,12 @@ = title_tag t('.title') +- @imports.each do |import| + .import + li = link_to import.name, workbench_import_path(@workbench, import) + li = import.referential.name + li = link_to import.file.file.filename, import.file.url, target: :_blank + hr .warning = t('.warning') - -#imports - = render 'imports' - - content_for :sidebar do ul.actions - li - = link_to t('imports.actions.new'), new_referential_import_task_path(@referential), class: 'add' - li - = link_to t('rule_parameter_sets.actions.index'), organisation_rule_parameter_sets_path, class: 'link'
\ No newline at end of file + li = link_to t('imports.actions.new'), new_workbench_import_path(workbench_id: @workbench), class: 'add' diff --git a/app/views/imports/index.js.slim b/app/views/imports/index.js.slim deleted file mode 100644 index 2fac7d26c..000000000 --- a/app/views/imports/index.js.slim +++ /dev/null @@ -1 +0,0 @@ -| $('#imports').html("#{escape_javascript(render("imports"))}");
\ No newline at end of file diff --git a/app/views/imports/new.html.slim b/app/views/imports/new.html.slim new file mode 100644 index 000000000..55b655a85 --- /dev/null +++ b/app/views/imports/new.html.slim @@ -0,0 +1,4 @@ += title_tag t('.title') +.row + .col-lg-8.col-lg-offset-2.col-md-8.col-md-offset-2.col-sm-8.col-sm-offset-2 + = render 'form', import: @import, workbench: @workbench diff --git a/app/views/imports/show.html.slim b/app/views/imports/show.html.slim index 5992af311..b40e11ea4 100644 --- a/app/views/imports/show.html.slim +++ b/app/views/imports/show.html.slim @@ -2,26 +2,13 @@ .col-md-8 = title_tag job_status_title(@import) - .col-md-4 - = import_attributes_tag(@import) - -- if @import.report.failure_code? - .alert.alert-danger - = t("iev.failure.#{@import.report.failure_code}") - -.progress_bars - = progress_bar_tag(@import) - .import_show .links - = link_to font_awesome_classic_tag("fa-file-#{@import.filename_extension}-o") + t("imports.show.imported_file"), imported_file_referential_import_path(@referential, @import.id) if @import.file_path? - = link_to font_awesome_classic_tag("fa-external-link") + t("imports.show.compliance_check"), compliance_check_referential_import_path(@referential, @import.id) if @import.compliance_check? - - = render(partial: 'shared/ie_report', locals: {job: @import, line_items: @line_items}) + = link_to font_awesome_classic_tag("fa-file-#{@import.file.file.extension}-o") + t("imports.show.imported_file"), @import.file.url - content_for :sidebar do ul.actions li - = link_to t('imports.actions.destroy'), referential_import_path(@referential, @import.id), method: :delete, data: {confirm: t('imports.actions.destroy_confirm')}, class: 'remove' - - = history_tag(@import)
\ No newline at end of file + = link_to t('imports.actions.destroy'), workbench_import_path(@workbench, @import.id), method: :delete, data: {confirm: t('imports.actions.destroy_confirm')}, class: 'remove' + + = history_tag(@import) diff --git a/app/views/shared/_header.html.slim b/app/views/shared/_header.html.slim index 73e705e35..33aee09a4 100644 --- a/app/views/shared/_header.html.slim +++ b/app/views/shared/_header.html.slim @@ -90,9 +90,6 @@ nav.navbar.navbar-default.navbar-fixed-top role="navigation" = link_to referential_timebands_path(@referential) do span.badge.pull-right = @referential.timebands.size = Referential.human_attribute_name("timebands") - - li - = link_to Referential.human_attribute_name("imports"), referential_imports_path(@referential) li = link_to Referential.human_attribute_name("exports"), referential_exports_path(@referential) li diff --git a/config/locales/breadcrumbs.en.yml b/config/locales/breadcrumbs.en.yml index 911c992c3..6fec15b85 100644 --- a/config/locales/breadcrumbs.en.yml +++ b/config/locales/breadcrumbs.en.yml @@ -4,3 +4,4 @@ en: vehicle_journey_frequencies: "Times bands" referentials: "Home" users: "Users" + imports: Imports diff --git a/config/locales/breadcrumbs.fr.yml b/config/locales/breadcrumbs.fr.yml index ffcba3015..b941138c7 100644 --- a/config/locales/breadcrumbs.fr.yml +++ b/config/locales/breadcrumbs.fr.yml @@ -4,3 +4,4 @@ fr: vehicle_journey_frequencies: "Créneaux horaires" referentials: "Accueil" users: "Utilisateurs" + imports: Imports diff --git a/config/routes.rb b/config/routes.rb index 9ceb65db0..2a912124d 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,7 +1,9 @@ require 'sidekiq/web' ChouetteIhm::Application.routes.draw do - resources :workbenches, :only => [:show] + resources :workbenches, :only => [:show] do + resources :imports + end devise_for :users, :controllers => { :registrations => 'users/registrations', :invitations => 'users/invitations' @@ -122,15 +124,6 @@ ChouetteIhm::Application.routes.draw do end resources :import_tasks, :only => [:new, :create] - resources :imports, :only => [:index, :show, :destroy] do - member do - get "imported_file" - get "rule_parameter_set" - get "compliance_check" - get 'export', defaults: { format: 'zip' } - end - end - resources :export_tasks, :only => [:new, :create] do collection do get 'references' diff --git a/db/migrate/20120515134710_create_imports.rb b/db/migrate/20120515134710_create_imports.rb deleted file mode 100644 index 5da398fc9..000000000 --- a/db/migrate/20120515134710_create_imports.rb +++ /dev/null @@ -1,11 +0,0 @@ -class CreateImports < ActiveRecord::Migration - def change - create_table :imports do |t| - t.belongs_to :referential - t.string :status - - t.timestamps - end - add_index :imports, :referential_id - end -end diff --git a/db/migrate/20161227104202_create_imports.rb b/db/migrate/20161227104202_create_imports.rb new file mode 100644 index 000000000..97a2d6029 --- /dev/null +++ b/db/migrate/20161227104202_create_imports.rb @@ -0,0 +1,14 @@ +class CreateImports < ActiveRecord::Migration + def change + create_table :imports do |t| + t.string :status + t.string :current_step_id + t.float :current_step_progress + t.references :workbench, index: true + t.references :referential, index: true + t.string :name + + t.timestamps + end + end +end diff --git a/db/migrate/20161227104741_add_file_to_imports.rb b/db/migrate/20161227104741_add_file_to_imports.rb new file mode 100644 index 000000000..36498039b --- /dev/null +++ b/db/migrate/20161227104741_add_file_to_imports.rb @@ -0,0 +1,5 @@ +class AddFileToImports < ActiveRecord::Migration + def change + add_column :imports, :file, :string + end +end diff --git a/db/migrate/20161228102458_create_import_messages.rb b/db/migrate/20161228102458_create_import_messages.rb new file mode 100644 index 000000000..53a26cbd2 --- /dev/null +++ b/db/migrate/20161228102458_create_import_messages.rb @@ -0,0 +1,13 @@ +class CreateImportMessages < ActiveRecord::Migration + def change + create_table :import_messages do |t| + t.integer :criticity + t.string :message_key + t.hstore :message_attributs + t.references :import, index: true + t.references :resource, index: true + + t.timestamps + end + end +end diff --git a/db/migrate/20161228103628_create_import_resources.rb b/db/migrate/20161228103628_create_import_resources.rb new file mode 100644 index 000000000..ef9c3563f --- /dev/null +++ b/db/migrate/20161228103628_create_import_resources.rb @@ -0,0 +1,10 @@ +class CreateImportResources < ActiveRecord::Migration + def change + create_table :import_resources do |t| + t.references :import, index: true + t.string :status + + t.timestamps + end + end +end diff --git a/db/schema.rb b/db/schema.rb index d91db0968..0dcd5457c 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,8 +11,8 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20170215163027) do +ActiveRecord::Schema.define(version: 20170215163027) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" enable_extension "postgis" @@ -243,6 +243,43 @@ ActiveRecord::Schema.define(version: 20170215163027) do t.integer "line_id", limit: 8 end + create_table "import_messages", force: true do |t| + t.integer "criticity" + t.string "message_key" + t.hstore "message_attributs" + t.integer "import_id" + t.integer "resource_id" + t.datetime "created_at" + t.datetime "updated_at" + end + + add_index "import_messages", ["import_id"], :name => "index_import_messages_on_import_id" + add_index "import_messages", ["resource_id"], :name => "index_import_messages_on_resource_id" + + create_table "import_resources", force: true do |t| + t.integer "import_id" + t.string "status" + t.datetime "created_at" + t.datetime "updated_at" + end + + add_index "import_resources", ["import_id"], :name => "index_import_resources_on_import_id" + + create_table "imports", force: true do |t| + t.string "status" + t.string "current_step_id" + t.float "current_step_progress" + t.integer "workbench_id" + t.integer "referential_id" + t.string "name" + t.datetime "created_at" + t.datetime "updated_at" + t.string "file" + end + + add_index "imports", ["referential_id"], :name => "index_imports_on_referential_id" + add_index "imports", ["workbench_id"], :name => "index_imports_on_workbench_id" + create_table "journey_frequencies", force: true do |t| t.integer "vehicle_journey_id", limit: 8 t.time "scheduled_headway_interval", null: false diff --git a/spec/controllers/imports_controller_spec.rb b/spec/controllers/imports_controller_spec.rb new file mode 100644 index 000000000..19756b72f --- /dev/null +++ b/spec/controllers/imports_controller_spec.rb @@ -0,0 +1,14 @@ +require 'rails_helper' + +RSpec.describe ImportsController, :type => :controller do + login_user + + let(:workbench) { create :workbench } + + describe 'GET #new' do + it 'should be successful' do + get :new, workbench_id: workbench.id + expect(response).to be_success + end + end +end diff --git a/spec/controllers/vehicle_journey_imports_controller_spec.rb b/spec/controllers/vehicle_journey_imports_controller_spec.rb index d91814669..ef1ec882a 100644 --- a/spec/controllers/vehicle_journey_imports_controller_spec.rb +++ b/spec/controllers/vehicle_journey_imports_controller_spec.rb @@ -3,5 +3,5 @@ require 'spec_helper' describe ImportTasksController, :type => :controller do login_user - + end diff --git a/spec/factories/import_messages.rb b/spec/factories/import_messages.rb new file mode 100644 index 000000000..2d26477e6 --- /dev/null +++ b/spec/factories/import_messages.rb @@ -0,0 +1,10 @@ +FactoryGirl.define do + factory :import_message do + criticity 1 +message_key "MyString" +message_attributs "" +import nil +resource nil + end + +end diff --git a/spec/factories/import_resources.rb b/spec/factories/import_resources.rb new file mode 100644 index 000000000..274edab60 --- /dev/null +++ b/spec/factories/import_resources.rb @@ -0,0 +1,6 @@ +FactoryGirl.define do + factory :import_resource do + association :import + status :new + end +end diff --git a/spec/factories/imports.rb b/spec/factories/imports.rb new file mode 100644 index 000000000..bb9a97c9c --- /dev/null +++ b/spec/factories/imports.rb @@ -0,0 +1,11 @@ +FactoryGirl.define do + factory :import do + name "MyString" + current_step_id "MyString" + current_step_progress 1.5 + association :workbench + association :referential + file {File.open(File.join(Rails.root, 'spec', 'fixtures', 'terminated_job.json'))} + status "MyString" + end +end diff --git a/spec/models/import_message_spec.rb b/spec/models/import_message_spec.rb new file mode 100644 index 000000000..2d8aac2b7 --- /dev/null +++ b/spec/models/import_message_spec.rb @@ -0,0 +1,7 @@ +require 'rails_helper' + +RSpec.describe ImportMessage, :type => :model do + it { should validate_presence_of(:criticity) } + it { should belong_to(:import) } + it { should belong_to(:resource) } +end diff --git a/spec/models/import_resource_spec.rb b/spec/models/import_resource_spec.rb new file mode 100644 index 000000000..a2177979e --- /dev/null +++ b/spec/models/import_resource_spec.rb @@ -0,0 +1,13 @@ +require 'rails_helper' + +RSpec.describe ImportResource, :type => :model do + it { should belong_to(:import) } + + describe 'states' do + let(:import_resource) { create(:import_resource) } + + it 'should initialize with new state' do + expect(import_resource.new?).to be_truthy + end + end +end diff --git a/spec/models/import_spec.rb b/spec/models/import_spec.rb new file mode 100644 index 000000000..4c44eb99c --- /dev/null +++ b/spec/models/import_spec.rb @@ -0,0 +1,8 @@ +require 'rails_helper' + +RSpec.describe Import, :type => :model do + it { should belong_to(:referential) } + it { should belong_to(:workbench) } + + it { should validate_presence_of(:file) } +end |
