From 36fec435004e595e2adbac72c8f634891a531b01 Mon Sep 17 00:00:00 2001 From: Robert Date: Fri, 3 Nov 2017 10:31:47 +0100 Subject: Refs: #4823@1h; scaffolding feature spec, but blocked by #4826 [amend me] [skip-ci] --- spec/features/compliance_ckeck_sets_spec.rb | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 spec/features/compliance_ckeck_sets_spec.rb diff --git a/spec/features/compliance_ckeck_sets_spec.rb b/spec/features/compliance_ckeck_sets_spec.rb new file mode 100644 index 000000000..a4a6b2fda --- /dev/null +++ b/spec/features/compliance_ckeck_sets_spec.rb @@ -0,0 +1,14 @@ +RSpec.describe "ComplianceCheckSets", type: :feature do + + login_user + + # We setup a control_set with two blocks and one direct control (meaning that it is not attached to a block) + # Then we add one control to the first block and two controls to the second block + let( :compliance_check_set ){ create :compliance_check_set } + + context 'show' do + it 'can visit the page' do + visit(workbench_compliance_check_set_path(compliance_check_set.workbench, compliance_check_set)) + end + end +end -- cgit v1.2.3 From 76d11c7f973867e305d6841f69c62c5fd37d65a7 Mon Sep 17 00:00:00 2001 From: Robert Date: Mon, 6 Nov 2017 19:06:57 +0100 Subject: Refs: #4283@16h; - Implements the view Missing: - Spex failing (xpath navigation inside the display blocks is still faulty) - Links to compliance_checks#show do not work (actually not this page's problem) --- .../compliance_check_sets_controller.rb | 30 +++++++++ .../compliance_control_sets_controller.rb | 25 ++++--- app/decorators/compliance_check_decorator.rb | 8 +++ app/helpers/compliance_check_blocks_helper.rb | 3 + app/helpers/compliance_check_sets_helper.rb | 12 ++++ app/helpers/compliance_control_blocks_helper.rb | 2 +- app/helpers/transport_mode_helper.rb | 16 +++++ app/models/compliance_check_block.rb | 8 +++ app/models/organisation.rb | 1 + app/views/compliance_check_sets/show.html.slim | 54 ++++++++++++++- app/views/compliance_checks/_filters.html.slim | 47 +++++++++++++ app/views/compliance_control_sets/show.html.slim | 17 ++--- app/views/compliance_controls/_filters.html.slim | 3 +- config/locales/compliance_check_blocks.en.yml | 8 +++ config/locales/compliance_check_blocks.fr.yml | 7 ++ config/locales/compliance_check_sets.en.yml | 30 ++++++--- config/locales/compliance_check_sets.fr.yml | 30 ++++++--- config/locales/compliance_checks.en.yml | 8 +++ config/locales/compliance_checks.fr.yml | 11 +++ db/schema.rb | 75 ++++++++++++++++++--- spec/features/compliance_ckeck_sets_spec.rb | 78 +++++++++++++++++++++- spec/features/compliance_control_sets_spec.rb | 16 ++++- spec/models/compliance_check_block_spec.rb | 5 -- spec/models/compliance_control_block_spec.rb | 19 ++++-- spec/support/breadcrumb_features.rb | 15 +++++ 25 files changed, 456 insertions(+), 72 deletions(-) create mode 100644 app/decorators/compliance_check_decorator.rb create mode 100644 app/helpers/compliance_check_blocks_helper.rb create mode 100644 app/helpers/compliance_check_sets_helper.rb create mode 100644 app/helpers/transport_mode_helper.rb create mode 100644 app/views/compliance_checks/_filters.html.slim create mode 100644 config/locales/compliance_check_blocks.en.yml create mode 100644 config/locales/compliance_check_blocks.fr.yml create mode 100644 spec/support/breadcrumb_features.rb diff --git a/app/controllers/compliance_check_sets_controller.rb b/app/controllers/compliance_check_sets_controller.rb index 95dcfbf05..56d1b9f1f 100644 --- a/app/controllers/compliance_check_sets_controller.rb +++ b/app/controllers/compliance_check_sets_controller.rb @@ -18,4 +18,34 @@ class ComplianceCheckSetsController < InheritedResources::Base } end end + + def show + show!(&method(:implement_show)) + end + + + private + + # Action Implementation + # --------------------- + def implement_show format + format.html(&method(:implement_show_for_html)) + end + + def implement_show_for_html _mime_response + @q_checks_form = @compliance_check_set.compliance_checks.ransack(params[:q]) + @compliance_check_set = @compliance_check_set.decorate + @compliance_checks = + decorate_compliance_checks( @q_checks_form.result) + .group_by(&:compliance_check_block) + @direct_compliance_checks = @compliance_checks.delete nil + end + + # Decoration + # ---------- + def decorate_compliance_checks(compliance_checks) + ModelDecorator.decorate( + compliance_checks, + with: ComplianceCheckDecorator) + end end diff --git a/app/controllers/compliance_control_sets_controller.rb b/app/controllers/compliance_control_sets_controller.rb index 5c78d09e3..65aa1e81f 100644 --- a/app/controllers/compliance_control_sets_controller.rb +++ b/app/controllers/compliance_control_sets_controller.rb @@ -16,18 +16,10 @@ class ComplianceControlSetsController < InheritedResources::Base end def show - show! do |format| - format.html { - @q_controls_form = @compliance_control_set.compliance_controls.ransack(params[:q]) - @compliance_control_set = @compliance_control_set.decorate - @compliance_controls = - decorate_compliance_controls( @q_controls_form.result) - .group_by(&:compliance_control_block) - @indirect_compliance_controls = @compliance_controls.delete nil - } - end + show!(&method(:implement_show)) end + def clone ComplianceControlSetCloner.new.copy(params[:id], current_organisation.id) flash[:notice] = I18n.t("compliance_control_sets.errors.operation_in_progress") @@ -59,4 +51,17 @@ class ComplianceControlSetsController < InheritedResources::Base def compliance_control_set_params params.require(:compliance_control_set).permit(:name, :id) end + + def implement_show format + format.html(&method(:implement_show_for_html)) + end + + def implement_show_for_html _mime_response + @q_controls_form = @compliance_control_set.compliance_controls.ransack(params[:q]) + @compliance_control_set = @compliance_control_set.decorate + @compliance_controls = + decorate_compliance_controls( @q_controls_form.result) + .group_by(&:compliance_control_block) + @direct_compliance_controls = @compliance_controls.delete nil + end end diff --git a/app/decorators/compliance_check_decorator.rb b/app/decorators/compliance_check_decorator.rb new file mode 100644 index 000000000..09984aa2e --- /dev/null +++ b/app/decorators/compliance_check_decorator.rb @@ -0,0 +1,8 @@ +class ComplianceCheckDecorator < Draper::Decorator + delegate_all + + def action_links + links = [] + end + +end diff --git a/app/helpers/compliance_check_blocks_helper.rb b/app/helpers/compliance_check_blocks_helper.rb new file mode 100644 index 000000000..b4d858b07 --- /dev/null +++ b/app/helpers/compliance_check_blocks_helper.rb @@ -0,0 +1,3 @@ +module ComplianceCheckBlocksHelper + include TransportModeHelper +end diff --git a/app/helpers/compliance_check_sets_helper.rb b/app/helpers/compliance_check_sets_helper.rb new file mode 100644 index 000000000..349ecae87 --- /dev/null +++ b/app/helpers/compliance_check_sets_helper.rb @@ -0,0 +1,12 @@ +module ComplianceCheckSetsHelper + def compliance_check_set_path(compliance_check_set) + workbench_compliance_check_set_path(compliance_check_set.workbench, compliance_check_set) + end + + def compliance_check_path(compliance_check) + workbench_compliance_check_set_compliance_check_path( + compliance_check.compliance_check_set.workbench, + compliance_check.compliance_check_set, + compliance_check) + end +end diff --git a/app/helpers/compliance_control_blocks_helper.rb b/app/helpers/compliance_control_blocks_helper.rb index 311e6fb46..b53ac17ae 100644 --- a/app/helpers/compliance_control_blocks_helper.rb +++ b/app/helpers/compliance_control_blocks_helper.rb @@ -1,5 +1,5 @@ module ComplianceControlBlocksHelper - def transport_mode(transport_mode, transport_submode) + def compliance_transport_mode(transport_mode, transport_submode) return "[Tous les modes de transport]" if transport_mode == "" if transport_submode == "" "[" + t("enumerize.transport_mode.#{transport_mode}") + "]" diff --git a/app/helpers/transport_mode_helper.rb b/app/helpers/transport_mode_helper.rb new file mode 100644 index 000000000..b61057205 --- /dev/null +++ b/app/helpers/transport_mode_helper.rb @@ -0,0 +1,16 @@ +module TransportModeHelper + def transport_mode_text(transport_modable=nil) + mode = transport_modable.try(:transport_mode) + return "[Tous les modes de transport]" if mode.blank? + + submode = transport_modable.try(:transport_submode) + [translated_mode_name(:mode, mode), translated_mode_name(:submode, submode)].join + end + + private + def translated_mode_name mode_type, value + return "" if value.blank? + "[#{t("enumerize.transport_#{mode_type}.#{value}")}]" + end + +end diff --git a/app/models/compliance_check_block.rb b/app/models/compliance_check_block.rb index ee60a8bb1..eb4654756 100644 --- a/app/models/compliance_check_block.rb +++ b/app/models/compliance_check_block.rb @@ -1,5 +1,13 @@ class ComplianceCheckBlock < ActiveRecord::Base + extend StifTransportModeEnumerations + extend StifTransportSubmodeEnumerations + belongs_to :compliance_check_set has_many :compliance_checks + + hstore_accessor :condition_attributes, + transport_mode: :string, + transport_submode: :string + end diff --git a/app/models/organisation.rb b/app/models/organisation.rb index b0c0692da..f6fba2d67 100644 --- a/app/models/organisation.rb +++ b/app/models/organisation.rb @@ -55,6 +55,7 @@ class Organisation < ActiveRecord::Base organisation_referential = referentials.find_by id: referential_id return organisation_referential if organisation_referential + # TODO: Replace each with find workbenches.each do |workbench| workbench_referential = workbench.all_referentials.find_by id: referential_id return workbench_referential if workbench_referential diff --git a/app/views/compliance_check_sets/show.html.slim b/app/views/compliance_check_sets/show.html.slim index eefa5363f..4052707da 100644 --- a/app/views/compliance_check_sets/show.html.slim +++ b/app/views/compliance_check_sets/show.html.slim @@ -1,12 +1,60 @@ - breadcrumb :compliance_check_set, @workbench, @compliance_check_set / PageHeader = pageheader 'jeux-de-donnees', - @compliance_check_set.referential.name + t('compliance_check_sets.show.title', name: @compliance_check_set.name), + 'Lorem ipsum dolor sit amet' / PageContent .page_content .container-fluid .row .col-lg-6.col-md-6.col-sm-12.col-xs-12 = definition_list t('metadatas'), - ComplianceCheckSet.human_attribute_name(:id) => @compliance_check_set.referential.id, - ComplianceCheckSet.human_attribute_name(:name) => @compliance_check_set.referential.name + ComplianceCheckSet.human_attribute_name(:name) => @compliance_check_set.name + + - if params[:q].present? || @compliance_checks.any? || @direct_compliance_checks + .row + .col-lg-12 + h2 + = render '/compliance_checks/filters' + + - if @direct_compliance_checks.try(:any?) + .row + .col-lg-12 + h2 + = transport_mode_text() + .row + .col-lg-12 + .select_table + = table_builder_2 @direct_compliance_checks, + [ \ + TableBuilderHelper::Column.new( \ + key: :code, \ + attribute: 'code' \ + ), \ + TableBuilderHelper::Column.new( \ + key: :name, \ + attribute: 'name', \ + link_to: lambda do |compliance_check| \ + compliance_check_path(compliance_check) \ + end \ + ), \ + TableBuilderHelper::Column.new( \ + key: :criticity, \ + attribute: 'criticity' \ + ), \ + TableBuilderHelper::Column.new( \ + key: :comment, \ + attribute: 'comment' \ + ), \ + ], + sortable: true, + cls: 'table has-filter has-search', + model: ComplianceCheck + + - @compliance_checks.each do |block, compliance_checks| + + - if compliance_checks.try(:any?) + .row + .col-lg-12 + h2 + = transport_mode_text(block) diff --git a/app/views/compliance_checks/_filters.html.slim b/app/views/compliance_checks/_filters.html.slim new file mode 100644 index 000000000..189e3d787 --- /dev/null +++ b/app/views/compliance_checks/_filters.html.slim @@ -0,0 +1,47 @@ +/ Compliance Check Filter += search_form_for @q_checks_form, + url: compliance_check_set_path(@compliance_check_set), + builder: SimpleForm::FormBuilder, + class: 'form form-filter' do |f| + + .ffg-row + .input-group.search_bar + = f.search_field :name_cont, + class: 'form-control', + placeholder: t('compliance_checks.filters.name') + span.input-group-btn + button.btn.btn-default type='submit' + span.fa.fa-search + + .ffg-row + .form-group.togglable#compliance_check_block-filter + = f.label t('activerecord.models.compliance_check_block.one'), required: false, class: 'control-label' + = f.input :compliance_check_block_id_eq_any, + collection: @compliance_check_set.compliance_check_blocks, + as: :check_boxes, + label: false, + label_method: lambda {|w| ("#{transport_mode_text(w)}").html_safe}, + required: false, + wrapper_html: {class: 'checkbox_list'} + .form-group.togglable#subclass-filter + = f.label t('compliance_checks.filters.subclass'), required: false, class: 'control-label' + = f.input :origin_code_cont_any, + collection: subclass_selection_list, + as: :check_boxes, + label: false, + label_method: lambda {|w| ("#{w.first}").html_safe}, + required: false, + wrapper_html: {class: 'checkbox_list'} + .form-group.togglable#severity-filter + = f.label t('compliance_checks.filters.criticity'), required: false, class: 'control-label' + = f.input :criticity_eq_any, + collection: ComplianceControl.criticities, + as: :check_boxes, + label: false, + label_method: lambda {|w| ("#{w}").html_safe}, + required: false, + wrapper_html: {class: 'checkbox_list'} + + .actions + = link_to t('actions.erase'), @compliance_check_set, class: 'btn btn-link' + = f.submit t('actions.filter'), class: 'btn btn-default', id: 'compliance_check_set_compliance_checks_filter_btn' diff --git a/app/views/compliance_control_sets/show.html.slim b/app/views/compliance_control_sets/show.html.slim index 2bd663578..12be42ea6 100644 --- a/app/views/compliance_control_sets/show.html.slim +++ b/app/views/compliance_control_sets/show.html.slim @@ -25,21 +25,22 @@ = definition_list t('metadatas'), ComplianceControlSet.human_attribute_name(:name) => @compliance_control_set.name, I18n.t('activerecord.attributes.compliance_control_set.owner_jdc') => @compliance_control_set.organisation.name - - if params[:q].present? or @compliance_controls.any? + + - if params[:q].present? || @compliance_controls.any? || @direct_compliance_controls .row .col-lg-12 = render '/compliance_controls/filters' - .row - .col-lg-12 - h2 - = transport_mode("", "") - - if @indirect_compliance_controls.try(:any?) + - if @direct_compliance_controls.try(:any?) + .row + .col-lg-12 + h2 + = transport_mode_text() .row .col-lg-12 .select_table - = table_builder_2 @indirect_compliance_controls, + = table_builder_2 @direct_compliance_controls, [ \ TableBuilderHelper::Column.new( \ key: :code, \ @@ -71,7 +72,7 @@ .row .col-lg-12 h2 - = transport_mode(block.transport_mode, block.transport_submode) + = transport_mode_text(block) .btn-group .btn.dropdown-toggle{ data-toggle="dropdown" } .span.fa.fa-cog diff --git a/app/views/compliance_controls/_filters.html.slim b/app/views/compliance_controls/_filters.html.slim index c729190a0..d38da5d2d 100644 --- a/app/views/compliance_controls/_filters.html.slim +++ b/app/views/compliance_controls/_filters.html.slim @@ -1,3 +1,4 @@ +/ Compliance Control Filter = search_form_for @q_controls_form, url: compliance_control_set_path(@compliance_control_set), builder: SimpleForm::FormBuilder, @@ -19,7 +20,7 @@ collection: @compliance_control_set.compliance_control_blocks, as: :check_boxes, label: false, - label_method: lambda {|w| ("#{transport_mode(w.transport_mode, w.transport_submode)}").html_safe}, + label_method: lambda {|w| ("#{transport_mode_text(w)}").html_safe}, required: false, wrapper_html: {class: 'checkbox_list'} .form-group.togglable#subclass-filter diff --git a/config/locales/compliance_check_blocks.en.yml b/config/locales/compliance_check_blocks.en.yml new file mode 100644 index 000000000..9278823dc --- /dev/null +++ b/config/locales/compliance_check_blocks.en.yml @@ -0,0 +1,8 @@ +en: + activerecord: + models: + compliance_check_block: + zero: "Control report groups" + one: "Control report group" + many: "Control report groups" + diff --git a/config/locales/compliance_check_blocks.fr.yml b/config/locales/compliance_check_blocks.fr.yml new file mode 100644 index 000000000..2ead24b2f --- /dev/null +++ b/config/locales/compliance_check_blocks.fr.yml @@ -0,0 +1,7 @@ +fr: + activerecord: + models: + compliance_check_block: + zero: "Groupe de rapport de contrôle" + one: "Groupe de rapport de contrôle" + many: "Groupes de rapport de contrôle" diff --git a/config/locales/compliance_check_sets.en.yml b/config/locales/compliance_check_sets.en.yml index 89c142a49..0088cc6cc 100644 --- a/config/locales/compliance_check_sets.en.yml +++ b/config/locales/compliance_check_sets.en.yml @@ -1,9 +1,5 @@ en: compliance_check_sets: - index: - title: Control reports - new: Creating a Control Report - edit: Update a Control Report actions: new: Add a control report edit: Edit a control report @@ -12,12 +8,24 @@ en: filters: name: Specify a control report name... error_period_filter: End date must be greater than or equal to begin date + index: + title: Control reports + new: Creating a Control Report + edit: Update a Control Report search_no_results: No control reports match your search + show: + title: Control report %{name} activerecord: - attributes: - compliance_check_set: - ref: réf - creation_date: Created at - associated_object: Associated object - assigned_to: Assigned to - compliance_control_set: Compliance control set + attributes: + compliance_check_set: + ref: réf + creation_date: Created at + associated_object: Associated object + assigned_to: Assigned to + compliance_control_set: Compliance control set + name: Name + models: + compliance_check_block: + zero: "Control report groups" + one: "Control report group" + many: "Control report groups" diff --git a/config/locales/compliance_check_sets.fr.yml b/config/locales/compliance_check_sets.fr.yml index 8c21f33fd..edf16d460 100644 --- a/config/locales/compliance_check_sets.fr.yml +++ b/config/locales/compliance_check_sets.fr.yml @@ -1,9 +1,5 @@ fr: compliance_check_sets: - index: - title: Rapports de contrôle - new: Création d'un rapport de contrôle - edit: Édition d'un rapport de contrôle actions: new: Ajouter edit: Editer @@ -12,12 +8,24 @@ fr: filters: name: Indiquez un nom d'un objet associé... error_period_filter: La date de fin doit être supérieure ou égale à la date de début0 + index: + title: Rapports de contrôle + new: Création d'un rapport de contrôle + edit: Édition d'un rapport de contrôle search_no_results: Aucun rapport de contrôle ne correspond à votre recherche + show: + title: Rapport de contrôle %{name} activerecord: - attributes: - compliance_check_set: - ref: réf - creation_date: Date et heure de création - associated_object: Objet associé - assigned_to: Affectation - compliance_control_set: jeu de contrôle + attributes: + compliance_check_set: + ref: réf + creation_date: Date et heure de création + associated_object: Objet associé + assigned_to: Affectation + compliance_control_set: jeu de contrôle + name: Nom + models: + compliance_check_block: + zero: "Groupe de rapport de contrôle" + one: "Groupe de rapport de contrôle" + many: "Groupes de rapport de contrôle" diff --git a/config/locales/compliance_checks.en.yml b/config/locales/compliance_checks.en.yml index 7f3e317be..177c87852 100644 --- a/config/locales/compliance_checks.en.yml +++ b/config/locales/compliance_checks.en.yml @@ -1,2 +1,10 @@ en: + activerecord: + attributes: + compliance_check: + code: Code compliance_checks: + filters: + subclass: Object + criticity: Severity + name: Name diff --git a/config/locales/compliance_checks.fr.yml b/config/locales/compliance_checks.fr.yml index 421574cbd..009c0a7e2 100644 --- a/config/locales/compliance_checks.fr.yml +++ b/config/locales/compliance_checks.fr.yml @@ -1,3 +1,14 @@ fr: + activerecord: + attributes: + compliance_check: + code: Code + name: Nom + criticity: Criticité + comment: Commentaire compliance_checks: + filters: + subclass: Objét + criticity: Criticité + name: Nom diff --git a/db/schema.rb b/db/schema.rb index af6a51f7a..735e3405b 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -284,6 +284,22 @@ ActiveRecord::Schema.define(version: 20171114102438) do add_index "connection_links", ["objectid"], name: "connection_links_objectid_key", unique: true, using: :btree + create_table "delayed_jobs", id: :bigserial, force: :cascade do |t| + t.integer "priority", default: 0 + t.integer "attempts", default: 0 + t.text "handler" + t.text "last_error" + t.datetime "run_at" + t.datetime "locked_at" + t.datetime "failed_at" + t.string "locked_by", limit: 255 + t.string "queue", limit: 255 + t.datetime "created_at" + t.datetime "updated_at" + end + + add_index "delayed_jobs", ["priority", "run_at"], name: "delayed_jobs_priority", using: :btree + create_table "exports", id: :bigserial, force: :cascade do |t| t.integer "referential_id", limit: 8 t.string "status" @@ -405,12 +421,12 @@ ActiveRecord::Schema.define(version: 20171114102438) do t.datetime "started_at" t.datetime "ended_at" t.string "token_download" - t.string "type" + t.string "type", limit: 255 t.integer "parent_id", limit: 8 t.string "parent_type" + t.integer "current_step", default: 0 + t.integer "total_steps", default: 0 t.datetime "notified_parent_at" - t.integer "current_step", default: 0 - t.integer "total_steps", default: 0 t.string "creator" end @@ -431,6 +447,18 @@ ActiveRecord::Schema.define(version: 20171114102438) do add_index "journey_frequencies", ["timeband_id"], name: "index_journey_frequencies_on_timeband_id", using: :btree add_index "journey_frequencies", ["vehicle_journey_id"], name: "index_journey_frequencies_on_vehicle_journey_id", using: :btree + create_table "journey_pattern_sections", id: :bigserial, force: :cascade do |t| + t.integer "journey_pattern_id", limit: 8, null: false + t.integer "route_section_id", limit: 8, null: false + t.integer "rank", null: false + t.datetime "created_at" + t.datetime "updated_at" + end + + add_index "journey_pattern_sections", ["journey_pattern_id", "route_section_id", "rank"], name: "index_jps_on_journey_pattern_id_and_route_section_id_and_rank", unique: true, using: :btree + add_index "journey_pattern_sections", ["journey_pattern_id"], name: "index_journey_pattern_sections_on_journey_pattern_id", using: :btree + add_index "journey_pattern_sections", ["route_section_id"], name: "index_journey_pattern_sections_on_route_section_id", using: :btree + create_table "journey_patterns", id: :bigserial, force: :cascade do |t| t.integer "route_id", limit: 8 t.string "objectid", null: false @@ -550,6 +578,11 @@ ActiveRecord::Schema.define(version: 20171114102438) do add_index "networks", ["objectid"], name: "networks_objectid_key", unique: true, using: :btree add_index "networks", ["registration_number"], name: "networks_registration_number_key", using: :btree + create_table "object_id_factories", id: :bigserial, force: :cascade do |t| + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + create_table "organisations", id: :bigserial, force: :cascade do |t| t.string "name" t.datetime "created_at" @@ -640,6 +673,20 @@ ActiveRecord::Schema.define(version: 20171114102438) do add_index "referentials", ["created_from_id"], name: "index_referentials_on_created_from_id", using: :btree add_index "referentials", ["referential_suite_id"], name: "index_referentials_on_referential_suite_id", using: :btree + create_table "route_sections", id: :bigserial, force: :cascade do |t| + t.integer "departure_id", limit: 8 + t.integer "arrival_id", limit: 8 + t.geometry "input_geometry", limit: {:srid=>4326, :type=>"line_string"} + t.geometry "processed_geometry", limit: {:srid=>4326, :type=>"line_string"} + t.string "objectid", null: false + t.integer "object_version", limit: 8 + t.string "creator_id" + t.float "distance" + t.boolean "no_processing" + t.datetime "created_at" + t.datetime "updated_at" + end + create_table "routes", id: :bigserial, force: :cascade do |t| t.integer "line_id", limit: 8 t.string "objectid", null: false @@ -716,7 +763,7 @@ ActiveRecord::Schema.define(version: 20171114102438) do create_table "stop_areas", id: :bigserial, force: :cascade do |t| t.integer "parent_id", limit: 8 - t.string "objectid", null: false + t.string "objectid", null: false t.integer "object_version", limit: 8 t.string "creator_id" t.string "name" @@ -725,8 +772,8 @@ ActiveRecord::Schema.define(version: 20171114102438) do t.string "registration_number" t.string "nearest_topic_name" t.integer "fare_code" - t.decimal "longitude", precision: 19, scale: 16 - t.decimal "latitude", precision: 19, scale: 16 + t.decimal "longitude", precision: 19, scale: 16 + t.decimal "latitude", precision: 19, scale: 16 t.string "long_lat_type" t.string "country_code" t.string "street_name" @@ -744,7 +791,7 @@ ActiveRecord::Schema.define(version: 20171114102438) do t.datetime "deleted_at" t.datetime "created_at" t.datetime "updated_at" - t.string "stif_type" + t.string "stif_type", limit: 255 end add_index "stop_areas", ["name"], name: "index_stop_areas_on_name", using: :btree @@ -815,12 +862,12 @@ ActiveRecord::Schema.define(version: 20171114102438) do add_index "time_table_periods", ["time_table_id"], name: "index_time_table_periods_on_time_table_id", using: :btree create_table "time_tables", id: :bigserial, force: :cascade do |t| - t.string "objectid", null: false - t.integer "object_version", limit: 8, default: 1 + t.string "objectid", null: false + t.integer "object_version", limit: 8, default: 1 t.string "creator_id" t.string "version" t.string "comment" - t.integer "int_day_types", default: 0 + t.integer "int_day_types", default: 0 t.date "start_date" t.date "end_date" t.integer "calendar_id", limit: 8 @@ -973,14 +1020,22 @@ ActiveRecord::Schema.define(version: 20171114102438) do add_foreign_key "compliance_controls", "compliance_control_blocks" add_foreign_key "compliance_controls", "compliance_control_sets" add_foreign_key "group_of_lines_lines", "group_of_lines", name: "groupofline_group_fkey", on_delete: :cascade + add_foreign_key "journey_frequencies", "timebands", name: "journey_frequencies_timeband_id_fk", on_delete: :nullify add_foreign_key "journey_frequencies", "timebands", on_delete: :nullify + add_foreign_key "journey_frequencies", "vehicle_journeys", name: "journey_frequencies_vehicle_journey_id_fk", on_delete: :nullify add_foreign_key "journey_frequencies", "vehicle_journeys", on_delete: :nullify + add_foreign_key "journey_pattern_sections", "journey_patterns", name: "journey_pattern_sections_journey_pattern_id_fk", on_delete: :cascade + add_foreign_key "journey_pattern_sections", "journey_patterns", on_delete: :cascade + add_foreign_key "journey_pattern_sections", "route_sections", name: "journey_pattern_sections_route_section_id_fk", on_delete: :cascade + add_foreign_key "journey_pattern_sections", "route_sections", on_delete: :cascade add_foreign_key "journey_patterns", "routes", name: "jp_route_fkey", on_delete: :cascade add_foreign_key "journey_patterns", "stop_points", column: "arrival_stop_point_id", name: "arrival_point_fkey", on_delete: :nullify add_foreign_key "journey_patterns", "stop_points", column: "departure_stop_point_id", name: "departure_point_fkey", on_delete: :nullify add_foreign_key "journey_patterns_stop_points", "journey_patterns", name: "jpsp_jp_fkey", on_delete: :cascade add_foreign_key "journey_patterns_stop_points", "stop_points", name: "jpsp_stoppoint_fkey", on_delete: :cascade add_foreign_key "referentials", "referential_suites" + add_foreign_key "route_sections", "stop_areas", column: "arrival_id" + add_foreign_key "route_sections", "stop_areas", column: "departure_id" add_foreign_key "routes", "routes", column: "opposite_route_id", name: "route_opposite_route_fkey" add_foreign_key "stop_areas", "stop_areas", column: "parent_id", name: "area_parent_fkey", on_delete: :nullify add_foreign_key "stop_areas_stop_areas", "stop_areas", column: "child_id", name: "stoparea_child_fkey", on_delete: :cascade diff --git a/spec/features/compliance_ckeck_sets_spec.rb b/spec/features/compliance_ckeck_sets_spec.rb index a4a6b2fda..17902ed3f 100644 --- a/spec/features/compliance_ckeck_sets_spec.rb +++ b/spec/features/compliance_ckeck_sets_spec.rb @@ -1,14 +1,86 @@ RSpec.describe "ComplianceCheckSets", type: :feature do + include ComplianceCheckSetsHelper + include TransportModeHelper + login_user # We setup a control_set with two blocks and one direct control (meaning that it is not attached to a block) # Then we add one control to the first block and two controls to the second block - let( :compliance_check_set ){ create :compliance_check_set } + let( :compliance_check_set ){ create :compliance_check_set, name: random_string } + let(:blox){ + 2.times.map{ | _ | create :compliance_check_block, compliance_check_set: compliance_check_set } + } + let!(:direct_checks){ make_check(nil, times: 2) + make_check(nil, severity: :error) } + let!(:indirect_checks){ blox.map{ |block| make_check(block) } } context 'show' do - it 'can visit the page' do - visit(workbench_compliance_check_set_path(compliance_check_set.workbench, compliance_check_set)) + + before do + blox.first.update transport_mode: 'bus', transport_submode: 'demandAndResponseBus' + blox.second.update transport_mode: 'train', transport_submode: 'suburbanRailway' + visit(compliance_check_set_path(compliance_check_set)) + end + + it 'we can see the expected content' do + # Breadcrumbs + expect_breadcrumb_links "Accueil", "Gestion de l'offre", " Rapports de contrôle" + + # Headline + expect( page ).to have_content("Rapport de contrôle #{compliance_check_set.name}") + + # Information Definition List + expect( page.first('.dl-term') ).to have_content("Nom") + expect( page.first('.dl-def') ).to have_content(compliance_check_set.name) + + # Filters + within( 'form.form-filter' ) do + expect( page ).to have_content("Groupe de rapport de contrôle") + expect( page ).to have_content("Objét") + expect( page ).to have_content("Criticité") + end + + + # Checks + # Direct Children + within(:xpath, xpath_for_div_of_block) do + direct_checks.each do | direct_check | + expect( page ).to have_content( direct_check.code ) + expect( page ).to have_content( direct_check.name ) + expect( page ).to have_content( direct_check.criticity ) + expect( page ).to have_content( direct_check.comment ) + end + + end + # Indirect Children + compliance_check_set.compliance_check_blocks.each do | block | + within(:xpath, xpath_for_div_of_block(block)) do + block.checks.each do | check | + expect( page ).to have_content( check.code ) + expect( page ).to have_content( check.name ) + expect( page ).to have_content( check.criticity ) + expect( page ).to have_content( check.comment ) + end + end + end + end + end + + def make_check ccblock=nil, times: 1, severity: :error + times.times.map do + make_one_check ccblock, severity end end + + def make_one_check ccblock, severity + create( :compliance_check, + code: random_string, + compliance_check_block: ccblock, + compliance_check_set: compliance_check_set, + criticity: severity) + end + + def xpath_for_div_of_block(block = nil) + %{.//div[@class="col-lg-12"]/h2[contains(text(),"#{transport_mode_text(block)}")]/../../..} + end end diff --git a/spec/features/compliance_control_sets_spec.rb b/spec/features/compliance_control_sets_spec.rb index 500d4ce6f..bcb989cdc 100644 --- a/spec/features/compliance_control_sets_spec.rb +++ b/spec/features/compliance_control_sets_spec.rb @@ -25,7 +25,18 @@ RSpec.describe "ComplianceControlSets", type: :feature do visit compliance_control_set_path( control_set ) end - it 'we can see the controls inside their blocks' do + it 'we can see the expected content' do + # Breadcrumb + expect_breadcrumb_links "Accueil", "Liste des jeux de contrôles" + + # Headline + expect( page ).to have_content("Consulter le jeu de contrôles #{control_set.name}") + + # Information Definition List + expect( page.first('.dl-term') ).to have_content("Nom") + expect( page.first('.dl-def') ).to have_content(control_set.name) + + # Children controls.each do | control | expect( page ).to have_content(control.code) end @@ -76,7 +87,8 @@ RSpec.describe "ComplianceControlSets", type: :feature do create( :generic_attribute_control_min_max, code: random_string, compliance_control_block: ccblock, - compliance_control_set: control_set) + compliance_control_set: control_set, + criticity: severity) end end diff --git a/spec/models/compliance_check_block_spec.rb b/spec/models/compliance_check_block_spec.rb index a3d98d459..845056fac 100644 --- a/spec/models/compliance_check_block_spec.rb +++ b/spec/models/compliance_check_block_spec.rb @@ -1,9 +1,4 @@ -require 'rails_helper' - RSpec.describe ComplianceCheckBlock, type: :model do - it 'should have a valid factory' do - expect(FactoryGirl.build(:compliance_check_block)).to be_valid - end it { should belong_to :compliance_check_set } it { should have_many :compliance_checks } diff --git a/spec/models/compliance_control_block_spec.rb b/spec/models/compliance_control_block_spec.rb index c7440a5eb..6566baac0 100644 --- a/spec/models/compliance_control_block_spec.rb +++ b/spec/models/compliance_control_block_spec.rb @@ -1,13 +1,18 @@ -require 'rails_helper' - RSpec.describe ComplianceControlBlock, type: :model do - subject { create(:compliance_control_block) } - - it 'should have a valid factory' do - expect(FactoryGirl.build(:compliance_control_block)).to be_valid - end it { should belong_to :compliance_control_set } it { should have_many(:compliance_controls).dependent(:destroy) } it { should validate_presence_of(:transport_mode) } + + xit { should allow_values(*%w{bus metro rail tram funicular}).for(:transport_mode) } + xit { should_not allow_values(*%w{bs mtro ril tramm Funicular}).for(:transport_mode) } + + + xit { should allow_values( *%w{ demandAndResponseBus nightBus airportLinkBus highFrequencyBus expressBus + railShuttle suburbanRailway regionalRail interregionalRail }) + .for(:transport_submode) } + + xit { should_not allow_values( *%w{ demandResponseBus nightus irportLinkBus highrequencyBus expressBUs + Shuttle suburban regioalRail interregion4lRail }) + .for(:transport_submode) } end diff --git a/spec/support/breadcrumb_features.rb b/spec/support/breadcrumb_features.rb new file mode 100644 index 000000000..36bfce19c --- /dev/null +++ b/spec/support/breadcrumb_features.rb @@ -0,0 +1,15 @@ +module BreadcrumbFeatures + def expect_breadcrumb_links *link_names + within('.breadcrumbs') do + all('a').zip( link_names ).each do | link_element, link_content | + within(link_element) do | | + expect(page).to have_content(link_content) + end + end + end + end +end + +RSpec.configure do | conf | + conf.include BreadcrumbFeatures, type: :feature +end -- cgit v1.2.3 From 3fba11d14fb032802ea70240e4b204e93fe5a277 Mon Sep 17 00:00:00 2001 From: Robert Date: Thu, 9 Nov 2017 18:16:41 +0100 Subject: Refs: #4823@4h; Fixed Transport(Sub)mode validation bug --- app/models/compliance_check_block.rb | 4 +- app/models/compliance_control_block.rb | 4 +- .../concerns/stif_transport_mode_enumerations.rb | 25 ++++++----- .../stif_transport_submode_enumerations.rb | 36 +++++++++------- app/models/line_referential.rb | 2 +- app/views/compliance_check_sets/show.html.slim | 49 +++++++++++++++++----- app/views/lines/_filters.html.slim | 4 +- db/schema.rb | 45 +++++--------------- spec/factories/compliance_control_blocks.rb | 3 +- spec/features/compliance_ckeck_sets_spec.rb | 4 +- spec/models/compliance_check_block_spec.rb | 12 ++++++ spec/models/compliance_control_block_spec.rb | 10 +++-- spec/models/line_referential_spec.rb | 9 +--- 13 files changed, 112 insertions(+), 95 deletions(-) diff --git a/app/models/compliance_check_block.rb b/app/models/compliance_check_block.rb index eb4654756..05240b428 100644 --- a/app/models/compliance_check_block.rb +++ b/app/models/compliance_check_block.rb @@ -1,6 +1,6 @@ class ComplianceCheckBlock < ActiveRecord::Base - extend StifTransportModeEnumerations - extend StifTransportSubmodeEnumerations + include StifTransportModeEnumerations + include StifTransportSubmodeEnumerations belongs_to :compliance_check_set diff --git a/app/models/compliance_control_block.rb b/app/models/compliance_control_block.rb index 5721c00f4..cfcdfd1a6 100644 --- a/app/models/compliance_control_block.rb +++ b/app/models/compliance_control_block.rb @@ -1,6 +1,6 @@ class ComplianceControlBlock < ActiveRecord::Base - extend StifTransportModeEnumerations - extend StifTransportSubmodeEnumerations + include StifTransportModeEnumerations + include StifTransportSubmodeEnumerations belongs_to :compliance_control_set has_many :compliance_controls, dependent: :destroy diff --git a/app/models/concerns/stif_transport_mode_enumerations.rb b/app/models/concerns/stif_transport_mode_enumerations.rb index c2d38c2c6..74621dfc5 100644 --- a/app/models/concerns/stif_transport_mode_enumerations.rb +++ b/app/models/concerns/stif_transport_mode_enumerations.rb @@ -1,19 +1,18 @@ module StifTransportModeEnumerations extend ActiveSupport::Concern - extend Enumerize - extend self - enumerize :transport_mode, in: %w(bus - metro - rail - tram - funicular) - - def transport_modes - StifTransportModeEnumerations.transport_mode.values + class << self + def transport_modes + %w(bus metro rail tram funicular) + end + def sorted_transport_modes + transport_modes.sort_by{|m| I18n.t("enumerize.transport_mode.#{m}").parameterize } + end end - - def sorted_transport_modes - self.transport_modes.sort_by{|m| I18n.t("enumerize.transport_mode.#{m}").parameterize } + + included do + extend Enumerize + enumerize :transport_mode, in: StifTransportModeEnumerations.transport_modes end + end diff --git a/app/models/concerns/stif_transport_submode_enumerations.rb b/app/models/concerns/stif_transport_submode_enumerations.rb index cf314badd..eb3e56eac 100644 --- a/app/models/concerns/stif_transport_submode_enumerations.rb +++ b/app/models/concerns/stif_transport_submode_enumerations.rb @@ -1,24 +1,28 @@ module StifTransportSubmodeEnumerations extend ActiveSupport::Concern - extend Enumerize - extend self - enumerize :transport_submode, in: %w(demandAndResponseBus - nightBus - airportLinkBus - highFrequencyBus - expressBus - railShuttle - suburbanRailway - regionalRail - interregionalRail -) + class << self + def transport_submodes + %w( + demandAndResponseBus + nightBus + airportLinkBus + highFrequencyBus + expressBus + railShuttle + suburbanRailway + regionalRail + interregionalRail) + end - def transport_submodes - StifTransportSubmodeEnumerations.transport_submode.values + def sorted_transport_submodes + transport_submodes.sort_by{|m| I18n.t("enumerize.transport_submode.#{m}").parameterize } + end end - def sorted_transport_submodes - self.transport_submodes.sort_by{|m| I18n.t("enumerize.transport_submode.#{m}").parameterize } + included do + extend Enumerize + enumerize :transport_submode, in: StifTransportSubmodeEnumerations.transport_submodes end + end diff --git a/app/models/line_referential.rb b/app/models/line_referential.rb index 8bc6adec3..7ab892b53 100644 --- a/app/models/line_referential.rb +++ b/app/models/line_referential.rb @@ -1,5 +1,5 @@ class LineReferential < ActiveRecord::Base - extend StifTransportModeEnumerations + include StifTransportModeEnumerations has_many :line_referential_memberships has_many :organisations, through: :line_referential_memberships diff --git a/app/views/compliance_check_sets/show.html.slim b/app/views/compliance_check_sets/show.html.slim index 4052707da..d02adc6b8 100644 --- a/app/views/compliance_check_sets/show.html.slim +++ b/app/views/compliance_check_sets/show.html.slim @@ -17,15 +17,51 @@ h2 = render '/compliance_checks/filters' - - if @direct_compliance_checks.try(:any?) + - if @direct_compliance_checks.try(:any?) + .row + .col-lg-12 + h2 + = transport_mode_text() + .row + .col-lg-12 + .select_table + = table_builder_2 @direct_compliance_checks, + [ \ + TableBuilderHelper::Column.new( \ + key: :code, \ + attribute: 'code' \ + ), \ + TableBuilderHelper::Column.new( \ + key: :name, \ + attribute: 'name', \ + link_to: lambda do |compliance_check| \ + compliance_check_path(compliance_check) \ + end \ + ), \ + TableBuilderHelper::Column.new( \ + key: :criticity, \ + attribute: 'criticity' \ + ), \ + TableBuilderHelper::Column.new( \ + key: :comment, \ + attribute: 'comment' \ + ), \ + ], + sortable: true, + cls: 'table has-filter has-search', + model: ComplianceCheck + + - @compliance_checks.each do |block, compliance_checks| + + - if compliance_checks.try(:any?) .row .col-lg-12 h2 - = transport_mode_text() + = transport_mode_text(block) .row .col-lg-12 .select_table - = table_builder_2 @direct_compliance_checks, + = table_builder_2 compliance_checks, [ \ TableBuilderHelper::Column.new( \ key: :code, \ @@ -50,11 +86,4 @@ sortable: true, cls: 'table has-filter has-search', model: ComplianceCheck - - - @compliance_checks.each do |block, compliance_checks| - - if compliance_checks.try(:any?) - .row - .col-lg-12 - h2 - = transport_mode_text(block) diff --git a/app/views/lines/_filters.html.slim b/app/views/lines/_filters.html.slim index 7662c41b5..58f8f2431 100644 --- a/app/views/lines/_filters.html.slim +++ b/app/views/lines/_filters.html.slim @@ -17,11 +17,11 @@ .form-group.togglable = f.label Chouette::Line.human_attribute_name(:transport_mode), required: false, class: 'control-label' - = f.input :transport_mode_eq_any, collection: Chouette::Line.sorted_transport_modes, as: :check_boxes, label: false, label_method: lambda{|l| ("" + t("enumerize.transport_mode.#{l}") + "").html_safe}, required: false, wrapper_html: { class: 'checkbox_list'} + = f.input :transport_mode_eq_any, collection: StifTransportModeEnumerations.sorted_transport_modes, as: :check_boxes, label: false, label_method: lambda{|l| ("" + t("enumerize.transport_mode.#{l}") + "").html_safe}, required: false, wrapper_html: { class: 'checkbox_list'} .form-group.togglable = f.label Chouette::Line.human_attribute_name(:transport_submode), required: false, class: 'control-label' - = f.input :transport_submode_eq_any, collection: Chouette::Line.sorted_transport_submodes, as: :check_boxes, label: false, label_method: lambda{|l| ("" + t("enumerize.transport_submode.#{l}") + "").html_safe}, required: false, wrapper_html: { class: 'checkbox_list'} + = f.input :transport_submode_eq_any, collection: StifTransportSubmodeEnumerations.sorted_transport_submodes, as: :check_boxes, label: false, label_method: lambda{|l| ("" + t("enumerize.transport_submode.#{l}") + "").html_safe}, required: false, wrapper_html: { class: 'checkbox_list'} .actions = link_to 'Effacer', @workbench, class: 'btn btn-link' diff --git a/db/schema.rb b/db/schema.rb index 735e3405b..ff22ed2cb 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -284,22 +284,6 @@ ActiveRecord::Schema.define(version: 20171114102438) do add_index "connection_links", ["objectid"], name: "connection_links_objectid_key", unique: true, using: :btree - create_table "delayed_jobs", id: :bigserial, force: :cascade do |t| - t.integer "priority", default: 0 - t.integer "attempts", default: 0 - t.text "handler" - t.text "last_error" - t.datetime "run_at" - t.datetime "locked_at" - t.datetime "failed_at" - t.string "locked_by", limit: 255 - t.string "queue", limit: 255 - t.datetime "created_at" - t.datetime "updated_at" - end - - add_index "delayed_jobs", ["priority", "run_at"], name: "delayed_jobs_priority", using: :btree - create_table "exports", id: :bigserial, force: :cascade do |t| t.integer "referential_id", limit: 8 t.string "status" @@ -421,11 +405,11 @@ ActiveRecord::Schema.define(version: 20171114102438) do t.datetime "started_at" t.datetime "ended_at" t.string "token_download" - t.string "type", limit: 255 + t.string "type" t.integer "parent_id", limit: 8 t.string "parent_type" - t.integer "current_step", default: 0 - t.integer "total_steps", default: 0 + t.integer "current_step", default: 0 + t.integer "total_steps", default: 0 t.datetime "notified_parent_at" t.string "creator" end @@ -578,11 +562,6 @@ ActiveRecord::Schema.define(version: 20171114102438) do add_index "networks", ["objectid"], name: "networks_objectid_key", unique: true, using: :btree add_index "networks", ["registration_number"], name: "networks_registration_number_key", using: :btree - create_table "object_id_factories", id: :bigserial, force: :cascade do |t| - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - end - create_table "organisations", id: :bigserial, force: :cascade do |t| t.string "name" t.datetime "created_at" @@ -763,7 +742,7 @@ ActiveRecord::Schema.define(version: 20171114102438) do create_table "stop_areas", id: :bigserial, force: :cascade do |t| t.integer "parent_id", limit: 8 - t.string "objectid", null: false + t.string "objectid", null: false t.integer "object_version", limit: 8 t.string "creator_id" t.string "name" @@ -772,8 +751,8 @@ ActiveRecord::Schema.define(version: 20171114102438) do t.string "registration_number" t.string "nearest_topic_name" t.integer "fare_code" - t.decimal "longitude", precision: 19, scale: 16 - t.decimal "latitude", precision: 19, scale: 16 + t.decimal "longitude", precision: 19, scale: 16 + t.decimal "latitude", precision: 19, scale: 16 t.string "long_lat_type" t.string "country_code" t.string "street_name" @@ -791,7 +770,7 @@ ActiveRecord::Schema.define(version: 20171114102438) do t.datetime "deleted_at" t.datetime "created_at" t.datetime "updated_at" - t.string "stif_type", limit: 255 + t.string "stif_type" end add_index "stop_areas", ["name"], name: "index_stop_areas_on_name", using: :btree @@ -862,12 +841,12 @@ ActiveRecord::Schema.define(version: 20171114102438) do add_index "time_table_periods", ["time_table_id"], name: "index_time_table_periods_on_time_table_id", using: :btree create_table "time_tables", id: :bigserial, force: :cascade do |t| - t.string "objectid", null: false - t.integer "object_version", limit: 8, default: 1 + t.string "objectid", null: false + t.integer "object_version", limit: 8, default: 1 t.string "creator_id" t.string "version" t.string "comment" - t.integer "int_day_types", default: 0 + t.integer "int_day_types", default: 0 t.date "start_date" t.date "end_date" t.integer "calendar_id", limit: 8 @@ -1020,13 +999,9 @@ ActiveRecord::Schema.define(version: 20171114102438) do add_foreign_key "compliance_controls", "compliance_control_blocks" add_foreign_key "compliance_controls", "compliance_control_sets" add_foreign_key "group_of_lines_lines", "group_of_lines", name: "groupofline_group_fkey", on_delete: :cascade - add_foreign_key "journey_frequencies", "timebands", name: "journey_frequencies_timeband_id_fk", on_delete: :nullify add_foreign_key "journey_frequencies", "timebands", on_delete: :nullify - add_foreign_key "journey_frequencies", "vehicle_journeys", name: "journey_frequencies_vehicle_journey_id_fk", on_delete: :nullify add_foreign_key "journey_frequencies", "vehicle_journeys", on_delete: :nullify - add_foreign_key "journey_pattern_sections", "journey_patterns", name: "journey_pattern_sections_journey_pattern_id_fk", on_delete: :cascade add_foreign_key "journey_pattern_sections", "journey_patterns", on_delete: :cascade - add_foreign_key "journey_pattern_sections", "route_sections", name: "journey_pattern_sections_route_section_id_fk", on_delete: :cascade add_foreign_key "journey_pattern_sections", "route_sections", on_delete: :cascade add_foreign_key "journey_patterns", "routes", name: "jp_route_fkey", on_delete: :cascade add_foreign_key "journey_patterns", "stop_points", column: "arrival_stop_point_id", name: "arrival_point_fkey", on_delete: :nullify diff --git a/spec/factories/compliance_control_blocks.rb b/spec/factories/compliance_control_blocks.rb index 4785d8419..94773d4b3 100644 --- a/spec/factories/compliance_control_blocks.rb +++ b/spec/factories/compliance_control_blocks.rb @@ -1,7 +1,8 @@ FactoryGirl.define do factory :compliance_control_block do sequence(:name) { |n| "Compliance control block #{n}" } - transport_mode "air" + transport_mode StifTransportModeEnumerations.transport_modes.first + transport_submode StifTransportSubmodeEnumerations.transport_submodes.first association :compliance_control_set end end diff --git a/spec/features/compliance_ckeck_sets_spec.rb b/spec/features/compliance_ckeck_sets_spec.rb index 17902ed3f..f8421eba7 100644 --- a/spec/features/compliance_ckeck_sets_spec.rb +++ b/spec/features/compliance_ckeck_sets_spec.rb @@ -1,3 +1,5 @@ +require 'rails_helper' + RSpec.describe "ComplianceCheckSets", type: :feature do include ComplianceCheckSetsHelper @@ -22,7 +24,7 @@ RSpec.describe "ComplianceCheckSets", type: :feature do visit(compliance_check_set_path(compliance_check_set)) end - it 'we can see the expected content' do + xit 'we can see the expected content' do # Breadcrumbs expect_breadcrumb_links "Accueil", "Gestion de l'offre", " Rapports de contrôle" diff --git a/spec/models/compliance_check_block_spec.rb b/spec/models/compliance_check_block_spec.rb index 845056fac..0629a645d 100644 --- a/spec/models/compliance_check_block_spec.rb +++ b/spec/models/compliance_check_block_spec.rb @@ -2,4 +2,16 @@ RSpec.describe ComplianceCheckBlock, type: :model do it { should belong_to :compliance_check_set } it { should have_many :compliance_checks } + + it { should allow_values(*%w{bus metro rail tram funicular}).for(:transport_mode) } + it { should_not allow_values(*%w{bs mtro ril tramm Funicular}).for(:transport_mode) } + + + it { should allow_values( *%w{ demandAndResponseBus nightBus airportLinkBus highFrequencyBus expressBus + railShuttle suburbanRailway regionalRail interregionalRail }) + .for(:transport_submode) } + + it { should_not allow_values( *%w{ demandResponseBus nightus irportLinkBus highrequencyBus expressBUs + Shuttle suburban regioalRail interregion4lRail }) + .for(:transport_submode) } end diff --git a/spec/models/compliance_control_block_spec.rb b/spec/models/compliance_control_block_spec.rb index 6566baac0..4abe0ed9c 100644 --- a/spec/models/compliance_control_block_spec.rb +++ b/spec/models/compliance_control_block_spec.rb @@ -1,18 +1,20 @@ +require 'rails_helper' + RSpec.describe ComplianceControlBlock, type: :model do it { should belong_to :compliance_control_set } it { should have_many(:compliance_controls).dependent(:destroy) } it { should validate_presence_of(:transport_mode) } - xit { should allow_values(*%w{bus metro rail tram funicular}).for(:transport_mode) } - xit { should_not allow_values(*%w{bs mtro ril tramm Funicular}).for(:transport_mode) } + it { should allow_values(*%w{bus metro rail tram funicular}).for(:transport_mode) } + it { should_not allow_values(*%w{bs mtro ril tramm Funicular}).for(:transport_mode) } - xit { should allow_values( *%w{ demandAndResponseBus nightBus airportLinkBus highFrequencyBus expressBus + it { should allow_values( *%w{ demandAndResponseBus nightBus airportLinkBus highFrequencyBus expressBus railShuttle suburbanRailway regionalRail interregionalRail }) .for(:transport_submode) } - xit { should_not allow_values( *%w{ demandResponseBus nightus irportLinkBus highrequencyBus expressBUs + it { should_not allow_values( *%w{ demandResponseBus nightus irportLinkBus highrequencyBus expressBUs Shuttle suburban regioalRail interregion4lRail }) .for(:transport_submode) } end diff --git a/spec/models/line_referential_spec.rb b/spec/models/line_referential_spec.rb index 8c6cb018b..8f8714f8f 100644 --- a/spec/models/line_referential_spec.rb +++ b/spec/models/line_referential_spec.rb @@ -1,6 +1,4 @@ -require 'spec_helper' - -RSpec.describe LineReferential, :type => :model do +RSpec.describe LineReferential, type: :model do it 'should have a valid factory' do expect(FactoryGirl.build(:line_referential)).to be_valid end @@ -10,9 +8,4 @@ RSpec.describe LineReferential, :type => :model do it { is_expected.to have_many(:workbenches) } it { should validate_presence_of(:sync_interval) } - describe "#transport_modes" do - it 'returns a list of all transport modes' do - expect(FactoryGirl.create(:line_referential).class.transport_modes).to match_array(StifTransportModeEnumerations.transport_modes ) - end - end end -- cgit v1.2.3 From 5a1846208a2ef978c4582b91695be24ca5ee25cd Mon Sep 17 00:00:00 2001 From: Robert Date: Fri, 10 Nov 2017 07:41:07 +0100 Subject: Fixes #4823@1h; - I18n.t explicit in helper so that it can be used in specs. - Typo in spec db setup fixed and setup of blocks put into create instead of later update. --- app/helpers/transport_mode_helper.rb | 2 +- spec/features/compliance_ckeck_sets_spec.rb | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app/helpers/transport_mode_helper.rb b/app/helpers/transport_mode_helper.rb index b61057205..7a486fc2d 100644 --- a/app/helpers/transport_mode_helper.rb +++ b/app/helpers/transport_mode_helper.rb @@ -10,7 +10,7 @@ module TransportModeHelper private def translated_mode_name mode_type, value return "" if value.blank? - "[#{t("enumerize.transport_#{mode_type}.#{value}")}]" + "[#{I18n.t("enumerize.transport_#{mode_type}.#{value}")}]" end end diff --git a/spec/features/compliance_ckeck_sets_spec.rb b/spec/features/compliance_ckeck_sets_spec.rb index f8421eba7..9d04ef200 100644 --- a/spec/features/compliance_ckeck_sets_spec.rb +++ b/spec/features/compliance_ckeck_sets_spec.rb @@ -10,21 +10,22 @@ RSpec.describe "ComplianceCheckSets", type: :feature do # We setup a control_set with two blocks and one direct control (meaning that it is not attached to a block) # Then we add one control to the first block and two controls to the second block let( :compliance_check_set ){ create :compliance_check_set, name: random_string } - let(:blox){ - 2.times.map{ | _ | create :compliance_check_block, compliance_check_set: compliance_check_set } - } + let(:blox){[ + create( :compliance_check_block, + compliance_check_set: compliance_check_set, transport_mode: 'bus', transport_submode: 'demandAndResponseBus'), + create( :compliance_check_block, + compliance_check_set: compliance_check_set, transport_mode: 'rail', transport_submode: 'suburbanRailway') + ]} let!(:direct_checks){ make_check(nil, times: 2) + make_check(nil, severity: :error) } let!(:indirect_checks){ blox.map{ |block| make_check(block) } } context 'show' do before do - blox.first.update transport_mode: 'bus', transport_submode: 'demandAndResponseBus' - blox.second.update transport_mode: 'train', transport_submode: 'suburbanRailway' visit(compliance_check_set_path(compliance_check_set)) end - xit 'we can see the expected content' do + it 'we can see the expected content' do # Breadcrumbs expect_breadcrumb_links "Accueil", "Gestion de l'offre", " Rapports de contrôle" @@ -41,7 +42,6 @@ RSpec.describe "ComplianceCheckSets", type: :feature do expect( page ).to have_content("Objét") expect( page ).to have_content("Criticité") end - # Checks # Direct Children @@ -57,7 +57,7 @@ RSpec.describe "ComplianceCheckSets", type: :feature do # Indirect Children compliance_check_set.compliance_check_blocks.each do | block | within(:xpath, xpath_for_div_of_block(block)) do - block.checks.each do | check | + block.compliance_checks.each do | check | expect( page ).to have_content( check.code ) expect( page ).to have_content( check.name ) expect( page ).to have_content( check.criticity ) -- cgit v1.2.3 From 52f185193aea2e47feff0aa9b395ee67b86608f1 Mon Sep 17 00:00:00 2001 From: Robert Date: Fri, 10 Nov 2017 13:35:52 +0100 Subject: Refs: #4823@0.1h; Hotfix for ComplianceCheckController --- app/controllers/compliance_checks_controller.rb | 2 +- db/schema.rb | 73 +++++++++++-------------- 2 files changed, 34 insertions(+), 41 deletions(-) diff --git a/app/controllers/compliance_checks_controller.rb b/app/controllers/compliance_checks_controller.rb index 07438cf99..81749e292 100644 --- a/app/controllers/compliance_checks_controller.rb +++ b/app/controllers/compliance_checks_controller.rb @@ -1,4 +1,4 @@ -class ComplianceChecksController < ChouetteController +class ComplianceChecksController < InheritedResources::Base end diff --git a/db/schema.rb b/db/schema.rb index ff22ed2cb..b8c97f138 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -284,6 +284,22 @@ ActiveRecord::Schema.define(version: 20171114102438) do add_index "connection_links", ["objectid"], name: "connection_links_objectid_key", unique: true, using: :btree + create_table "delayed_jobs", id: :bigserial, force: :cascade do |t| + t.integer "priority", default: 0 + t.integer "attempts", default: 0 + t.text "handler" + t.text "last_error" + t.datetime "run_at" + t.datetime "locked_at" + t.datetime "failed_at" + t.string "locked_by", limit: 255 + t.string "queue", limit: 255 + t.datetime "created_at" + t.datetime "updated_at" + end + + add_index "delayed_jobs", ["priority", "run_at"], name: "delayed_jobs_priority", using: :btree + create_table "exports", id: :bigserial, force: :cascade do |t| t.integer "referential_id", limit: 8 t.string "status" @@ -405,11 +421,11 @@ ActiveRecord::Schema.define(version: 20171114102438) do t.datetime "started_at" t.datetime "ended_at" t.string "token_download" - t.string "type" + t.string "type", limit: 255 t.integer "parent_id", limit: 8 t.string "parent_type" - t.integer "current_step", default: 0 - t.integer "total_steps", default: 0 + t.integer "current_step", default: 0 + t.integer "total_steps", default: 0 t.datetime "notified_parent_at" t.string "creator" end @@ -431,18 +447,6 @@ ActiveRecord::Schema.define(version: 20171114102438) do add_index "journey_frequencies", ["timeband_id"], name: "index_journey_frequencies_on_timeband_id", using: :btree add_index "journey_frequencies", ["vehicle_journey_id"], name: "index_journey_frequencies_on_vehicle_journey_id", using: :btree - create_table "journey_pattern_sections", id: :bigserial, force: :cascade do |t| - t.integer "journey_pattern_id", limit: 8, null: false - t.integer "route_section_id", limit: 8, null: false - t.integer "rank", null: false - t.datetime "created_at" - t.datetime "updated_at" - end - - add_index "journey_pattern_sections", ["journey_pattern_id", "route_section_id", "rank"], name: "index_jps_on_journey_pattern_id_and_route_section_id_and_rank", unique: true, using: :btree - add_index "journey_pattern_sections", ["journey_pattern_id"], name: "index_journey_pattern_sections_on_journey_pattern_id", using: :btree - add_index "journey_pattern_sections", ["route_section_id"], name: "index_journey_pattern_sections_on_route_section_id", using: :btree - create_table "journey_patterns", id: :bigserial, force: :cascade do |t| t.integer "route_id", limit: 8 t.string "objectid", null: false @@ -562,6 +566,11 @@ ActiveRecord::Schema.define(version: 20171114102438) do add_index "networks", ["objectid"], name: "networks_objectid_key", unique: true, using: :btree add_index "networks", ["registration_number"], name: "networks_registration_number_key", using: :btree + create_table "object_id_factories", id: :bigserial, force: :cascade do |t| + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + create_table "organisations", id: :bigserial, force: :cascade do |t| t.string "name" t.datetime "created_at" @@ -652,20 +661,6 @@ ActiveRecord::Schema.define(version: 20171114102438) do add_index "referentials", ["created_from_id"], name: "index_referentials_on_created_from_id", using: :btree add_index "referentials", ["referential_suite_id"], name: "index_referentials_on_referential_suite_id", using: :btree - create_table "route_sections", id: :bigserial, force: :cascade do |t| - t.integer "departure_id", limit: 8 - t.integer "arrival_id", limit: 8 - t.geometry "input_geometry", limit: {:srid=>4326, :type=>"line_string"} - t.geometry "processed_geometry", limit: {:srid=>4326, :type=>"line_string"} - t.string "objectid", null: false - t.integer "object_version", limit: 8 - t.string "creator_id" - t.float "distance" - t.boolean "no_processing" - t.datetime "created_at" - t.datetime "updated_at" - end - create_table "routes", id: :bigserial, force: :cascade do |t| t.integer "line_id", limit: 8 t.string "objectid", null: false @@ -742,7 +737,7 @@ ActiveRecord::Schema.define(version: 20171114102438) do create_table "stop_areas", id: :bigserial, force: :cascade do |t| t.integer "parent_id", limit: 8 - t.string "objectid", null: false + t.string "objectid", null: false t.integer "object_version", limit: 8 t.string "creator_id" t.string "name" @@ -751,8 +746,8 @@ ActiveRecord::Schema.define(version: 20171114102438) do t.string "registration_number" t.string "nearest_topic_name" t.integer "fare_code" - t.decimal "longitude", precision: 19, scale: 16 - t.decimal "latitude", precision: 19, scale: 16 + t.decimal "longitude", precision: 19, scale: 16 + t.decimal "latitude", precision: 19, scale: 16 t.string "long_lat_type" t.string "country_code" t.string "street_name" @@ -770,7 +765,7 @@ ActiveRecord::Schema.define(version: 20171114102438) do t.datetime "deleted_at" t.datetime "created_at" t.datetime "updated_at" - t.string "stif_type" + t.string "stif_type", limit: 255 end add_index "stop_areas", ["name"], name: "index_stop_areas_on_name", using: :btree @@ -841,12 +836,12 @@ ActiveRecord::Schema.define(version: 20171114102438) do add_index "time_table_periods", ["time_table_id"], name: "index_time_table_periods_on_time_table_id", using: :btree create_table "time_tables", id: :bigserial, force: :cascade do |t| - t.string "objectid", null: false - t.integer "object_version", limit: 8, default: 1 + t.string "objectid", null: false + t.integer "object_version", limit: 8, default: 1 t.string "creator_id" t.string "version" t.string "comment" - t.integer "int_day_types", default: 0 + t.integer "int_day_types", default: 0 t.date "start_date" t.date "end_date" t.integer "calendar_id", limit: 8 @@ -999,18 +994,16 @@ ActiveRecord::Schema.define(version: 20171114102438) do add_foreign_key "compliance_controls", "compliance_control_blocks" add_foreign_key "compliance_controls", "compliance_control_sets" add_foreign_key "group_of_lines_lines", "group_of_lines", name: "groupofline_group_fkey", on_delete: :cascade + add_foreign_key "journey_frequencies", "timebands", name: "journey_frequencies_timeband_id_fk", on_delete: :nullify add_foreign_key "journey_frequencies", "timebands", on_delete: :nullify + add_foreign_key "journey_frequencies", "vehicle_journeys", name: "journey_frequencies_vehicle_journey_id_fk", on_delete: :nullify add_foreign_key "journey_frequencies", "vehicle_journeys", on_delete: :nullify - add_foreign_key "journey_pattern_sections", "journey_patterns", on_delete: :cascade - add_foreign_key "journey_pattern_sections", "route_sections", on_delete: :cascade add_foreign_key "journey_patterns", "routes", name: "jp_route_fkey", on_delete: :cascade add_foreign_key "journey_patterns", "stop_points", column: "arrival_stop_point_id", name: "arrival_point_fkey", on_delete: :nullify add_foreign_key "journey_patterns", "stop_points", column: "departure_stop_point_id", name: "departure_point_fkey", on_delete: :nullify add_foreign_key "journey_patterns_stop_points", "journey_patterns", name: "jpsp_jp_fkey", on_delete: :cascade add_foreign_key "journey_patterns_stop_points", "stop_points", name: "jpsp_stoppoint_fkey", on_delete: :cascade add_foreign_key "referentials", "referential_suites" - add_foreign_key "route_sections", "stop_areas", column: "arrival_id" - add_foreign_key "route_sections", "stop_areas", column: "departure_id" add_foreign_key "routes", "routes", column: "opposite_route_id", name: "route_opposite_route_fkey" add_foreign_key "stop_areas", "stop_areas", column: "parent_id", name: "area_parent_fkey", on_delete: :nullify add_foreign_key "stop_areas_stop_areas", "stop_areas", column: "child_id", name: "stoparea_child_fkey", on_delete: :cascade -- cgit v1.2.3 From e4d75876d5bd9a4560133395f119abc05dc00b3d Mon Sep 17 00:00:00 2001 From: Robert Date: Mon, 13 Nov 2017 13:19:06 +0100 Subject: Refs: #4823@1.7h; CodeReview #show -> #executed --- .../compliance_check_sets_controller.rb | 10 +-- app/helpers/compliance_check_sets_helper.rb | 4 + app/views/compliance_check_sets/executed.html.slim | 89 ++++++++++++++++++++++ app/views/compliance_check_sets/show.html.slim | 89 ---------------------- app/views/compliance_checks/_filters.html.slim | 2 +- config/routes.rb | 1 + db/schema.rb | 43 +++-------- .../compliance_check_sets_controller_spec.rb | 4 +- spec/features/compliance_ckeck_sets_spec.rb | 4 +- 9 files changed, 114 insertions(+), 132 deletions(-) create mode 100644 app/views/compliance_check_sets/executed.html.slim delete mode 100644 app/views/compliance_check_sets/show.html.slim diff --git a/app/controllers/compliance_check_sets_controller.rb b/app/controllers/compliance_check_sets_controller.rb index 56d1b9f1f..5f392ef82 100644 --- a/app/controllers/compliance_check_sets_controller.rb +++ b/app/controllers/compliance_check_sets_controller.rb @@ -19,8 +19,8 @@ class ComplianceCheckSetsController < InheritedResources::Base end end - def show - show!(&method(:implement_show)) + def executed + show!(&method(:implement_executed)) end @@ -28,11 +28,11 @@ class ComplianceCheckSetsController < InheritedResources::Base # Action Implementation # --------------------- - def implement_show format - format.html(&method(:implement_show_for_html)) + def implement_executed format + format.html(&method(:implement_executed_for_html)) end - def implement_show_for_html _mime_response + def implement_executed_for_html _mime_response @q_checks_form = @compliance_check_set.compliance_checks.ransack(params[:q]) @compliance_check_set = @compliance_check_set.decorate @compliance_checks = diff --git a/app/helpers/compliance_check_sets_helper.rb b/app/helpers/compliance_check_sets_helper.rb index 349ecae87..fc7165fed 100644 --- a/app/helpers/compliance_check_sets_helper.rb +++ b/app/helpers/compliance_check_sets_helper.rb @@ -3,6 +3,10 @@ module ComplianceCheckSetsHelper workbench_compliance_check_set_path(compliance_check_set.workbench, compliance_check_set) end + def executed_compliance_check_set_path(compliance_check_set) + executed_workbench_compliance_check_set_path(compliance_check_set.workbench, compliance_check_set) + end + def compliance_check_path(compliance_check) workbench_compliance_check_set_compliance_check_path( compliance_check.compliance_check_set.workbench, diff --git a/app/views/compliance_check_sets/executed.html.slim b/app/views/compliance_check_sets/executed.html.slim new file mode 100644 index 000000000..d02adc6b8 --- /dev/null +++ b/app/views/compliance_check_sets/executed.html.slim @@ -0,0 +1,89 @@ +- breadcrumb :compliance_check_set, @workbench, @compliance_check_set +/ PageHeader += pageheader 'jeux-de-donnees', + t('compliance_check_sets.show.title', name: @compliance_check_set.name), + 'Lorem ipsum dolor sit amet' +/ PageContent +.page_content + .container-fluid + .row + .col-lg-6.col-md-6.col-sm-12.col-xs-12 + = definition_list t('metadatas'), + ComplianceCheckSet.human_attribute_name(:name) => @compliance_check_set.name + + - if params[:q].present? || @compliance_checks.any? || @direct_compliance_checks + .row + .col-lg-12 + h2 + = render '/compliance_checks/filters' + + - if @direct_compliance_checks.try(:any?) + .row + .col-lg-12 + h2 + = transport_mode_text() + .row + .col-lg-12 + .select_table + = table_builder_2 @direct_compliance_checks, + [ \ + TableBuilderHelper::Column.new( \ + key: :code, \ + attribute: 'code' \ + ), \ + TableBuilderHelper::Column.new( \ + key: :name, \ + attribute: 'name', \ + link_to: lambda do |compliance_check| \ + compliance_check_path(compliance_check) \ + end \ + ), \ + TableBuilderHelper::Column.new( \ + key: :criticity, \ + attribute: 'criticity' \ + ), \ + TableBuilderHelper::Column.new( \ + key: :comment, \ + attribute: 'comment' \ + ), \ + ], + sortable: true, + cls: 'table has-filter has-search', + model: ComplianceCheck + + - @compliance_checks.each do |block, compliance_checks| + + - if compliance_checks.try(:any?) + .row + .col-lg-12 + h2 + = transport_mode_text(block) + .row + .col-lg-12 + .select_table + = table_builder_2 compliance_checks, + [ \ + TableBuilderHelper::Column.new( \ + key: :code, \ + attribute: 'code' \ + ), \ + TableBuilderHelper::Column.new( \ + key: :name, \ + attribute: 'name', \ + link_to: lambda do |compliance_check| \ + compliance_check_path(compliance_check) \ + end \ + ), \ + TableBuilderHelper::Column.new( \ + key: :criticity, \ + attribute: 'criticity' \ + ), \ + TableBuilderHelper::Column.new( \ + key: :comment, \ + attribute: 'comment' \ + ), \ + ], + sortable: true, + cls: 'table has-filter has-search', + model: ComplianceCheck + diff --git a/app/views/compliance_check_sets/show.html.slim b/app/views/compliance_check_sets/show.html.slim deleted file mode 100644 index d02adc6b8..000000000 --- a/app/views/compliance_check_sets/show.html.slim +++ /dev/null @@ -1,89 +0,0 @@ -- breadcrumb :compliance_check_set, @workbench, @compliance_check_set -/ PageHeader -= pageheader 'jeux-de-donnees', - t('compliance_check_sets.show.title', name: @compliance_check_set.name), - 'Lorem ipsum dolor sit amet' -/ PageContent -.page_content - .container-fluid - .row - .col-lg-6.col-md-6.col-sm-12.col-xs-12 - = definition_list t('metadatas'), - ComplianceCheckSet.human_attribute_name(:name) => @compliance_check_set.name - - - if params[:q].present? || @compliance_checks.any? || @direct_compliance_checks - .row - .col-lg-12 - h2 - = render '/compliance_checks/filters' - - - if @direct_compliance_checks.try(:any?) - .row - .col-lg-12 - h2 - = transport_mode_text() - .row - .col-lg-12 - .select_table - = table_builder_2 @direct_compliance_checks, - [ \ - TableBuilderHelper::Column.new( \ - key: :code, \ - attribute: 'code' \ - ), \ - TableBuilderHelper::Column.new( \ - key: :name, \ - attribute: 'name', \ - link_to: lambda do |compliance_check| \ - compliance_check_path(compliance_check) \ - end \ - ), \ - TableBuilderHelper::Column.new( \ - key: :criticity, \ - attribute: 'criticity' \ - ), \ - TableBuilderHelper::Column.new( \ - key: :comment, \ - attribute: 'comment' \ - ), \ - ], - sortable: true, - cls: 'table has-filter has-search', - model: ComplianceCheck - - - @compliance_checks.each do |block, compliance_checks| - - - if compliance_checks.try(:any?) - .row - .col-lg-12 - h2 - = transport_mode_text(block) - .row - .col-lg-12 - .select_table - = table_builder_2 compliance_checks, - [ \ - TableBuilderHelper::Column.new( \ - key: :code, \ - attribute: 'code' \ - ), \ - TableBuilderHelper::Column.new( \ - key: :name, \ - attribute: 'name', \ - link_to: lambda do |compliance_check| \ - compliance_check_path(compliance_check) \ - end \ - ), \ - TableBuilderHelper::Column.new( \ - key: :criticity, \ - attribute: 'criticity' \ - ), \ - TableBuilderHelper::Column.new( \ - key: :comment, \ - attribute: 'comment' \ - ), \ - ], - sortable: true, - cls: 'table has-filter has-search', - model: ComplianceCheck - diff --git a/app/views/compliance_checks/_filters.html.slim b/app/views/compliance_checks/_filters.html.slim index 189e3d787..902fb0735 100644 --- a/app/views/compliance_checks/_filters.html.slim +++ b/app/views/compliance_checks/_filters.html.slim @@ -1,6 +1,6 @@ / Compliance Check Filter = search_form_for @q_checks_form, - url: compliance_check_set_path(@compliance_check_set), + url: executed_compliance_check_set_path(@compliance_check_set), builder: SimpleForm::FormBuilder, class: 'form form-filter' do |f| diff --git a/config/routes.rb b/config/routes.rb index 8221dfe1a..8ea8168bf 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -12,6 +12,7 @@ ChouetteIhm::Application.routes.draw do end end resources :compliance_check_sets, only: [:index, :show] do + get :executed, on: :member resources :compliance_checks, only: [:show] end end diff --git a/db/schema.rb b/db/schema.rb index b8c97f138..477a2fbf4 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -284,22 +284,6 @@ ActiveRecord::Schema.define(version: 20171114102438) do add_index "connection_links", ["objectid"], name: "connection_links_objectid_key", unique: true, using: :btree - create_table "delayed_jobs", id: :bigserial, force: :cascade do |t| - t.integer "priority", default: 0 - t.integer "attempts", default: 0 - t.text "handler" - t.text "last_error" - t.datetime "run_at" - t.datetime "locked_at" - t.datetime "failed_at" - t.string "locked_by", limit: 255 - t.string "queue", limit: 255 - t.datetime "created_at" - t.datetime "updated_at" - end - - add_index "delayed_jobs", ["priority", "run_at"], name: "delayed_jobs_priority", using: :btree - create_table "exports", id: :bigserial, force: :cascade do |t| t.integer "referential_id", limit: 8 t.string "status" @@ -421,11 +405,11 @@ ActiveRecord::Schema.define(version: 20171114102438) do t.datetime "started_at" t.datetime "ended_at" t.string "token_download" - t.string "type", limit: 255 + t.string "type" t.integer "parent_id", limit: 8 t.string "parent_type" - t.integer "current_step", default: 0 - t.integer "total_steps", default: 0 + t.integer "current_step", default: 0 + t.integer "total_steps", default: 0 t.datetime "notified_parent_at" t.string "creator" end @@ -566,11 +550,6 @@ ActiveRecord::Schema.define(version: 20171114102438) do add_index "networks", ["objectid"], name: "networks_objectid_key", unique: true, using: :btree add_index "networks", ["registration_number"], name: "networks_registration_number_key", using: :btree - create_table "object_id_factories", id: :bigserial, force: :cascade do |t| - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - end - create_table "organisations", id: :bigserial, force: :cascade do |t| t.string "name" t.datetime "created_at" @@ -737,7 +716,7 @@ ActiveRecord::Schema.define(version: 20171114102438) do create_table "stop_areas", id: :bigserial, force: :cascade do |t| t.integer "parent_id", limit: 8 - t.string "objectid", null: false + t.string "objectid", null: false t.integer "object_version", limit: 8 t.string "creator_id" t.string "name" @@ -746,8 +725,8 @@ ActiveRecord::Schema.define(version: 20171114102438) do t.string "registration_number" t.string "nearest_topic_name" t.integer "fare_code" - t.decimal "longitude", precision: 19, scale: 16 - t.decimal "latitude", precision: 19, scale: 16 + t.decimal "longitude", precision: 19, scale: 16 + t.decimal "latitude", precision: 19, scale: 16 t.string "long_lat_type" t.string "country_code" t.string "street_name" @@ -765,7 +744,7 @@ ActiveRecord::Schema.define(version: 20171114102438) do t.datetime "deleted_at" t.datetime "created_at" t.datetime "updated_at" - t.string "stif_type", limit: 255 + t.string "stif_type" end add_index "stop_areas", ["name"], name: "index_stop_areas_on_name", using: :btree @@ -836,12 +815,12 @@ ActiveRecord::Schema.define(version: 20171114102438) do add_index "time_table_periods", ["time_table_id"], name: "index_time_table_periods_on_time_table_id", using: :btree create_table "time_tables", id: :bigserial, force: :cascade do |t| - t.string "objectid", null: false - t.integer "object_version", limit: 8, default: 1 + t.string "objectid", null: false + t.integer "object_version", limit: 8, default: 1 t.string "creator_id" t.string "version" t.string "comment" - t.integer "int_day_types", default: 0 + t.integer "int_day_types", default: 0 t.date "start_date" t.date "end_date" t.integer "calendar_id", limit: 8 @@ -994,9 +973,7 @@ ActiveRecord::Schema.define(version: 20171114102438) do add_foreign_key "compliance_controls", "compliance_control_blocks" add_foreign_key "compliance_controls", "compliance_control_sets" add_foreign_key "group_of_lines_lines", "group_of_lines", name: "groupofline_group_fkey", on_delete: :cascade - add_foreign_key "journey_frequencies", "timebands", name: "journey_frequencies_timeband_id_fk", on_delete: :nullify add_foreign_key "journey_frequencies", "timebands", on_delete: :nullify - add_foreign_key "journey_frequencies", "vehicle_journeys", name: "journey_frequencies_vehicle_journey_id_fk", on_delete: :nullify add_foreign_key "journey_frequencies", "vehicle_journeys", on_delete: :nullify add_foreign_key "journey_patterns", "routes", name: "jp_route_fkey", on_delete: :cascade add_foreign_key "journey_patterns", "stop_points", column: "arrival_stop_point_id", name: "arrival_point_fkey", on_delete: :nullify diff --git a/spec/controllers/compliance_check_sets_controller_spec.rb b/spec/controllers/compliance_check_sets_controller_spec.rb index 804b0a658..3ddb1dad1 100644 --- a/spec/controllers/compliance_check_sets_controller_spec.rb +++ b/spec/controllers/compliance_check_sets_controller_spec.rb @@ -5,9 +5,9 @@ RSpec.describe ComplianceCheckSetsController, type: :controller do let(:compliance_check_set) { create :compliance_check_set } - describe "GET show" do + describe "GET executed" do it 'should be successful' do - get :show, workbench_id: compliance_check_set.workbench.id, id: compliance_check_set.id + get :executed, workbench_id: compliance_check_set.workbench.id, id: compliance_check_set.id expect(response).to be_success end end diff --git a/spec/features/compliance_ckeck_sets_spec.rb b/spec/features/compliance_ckeck_sets_spec.rb index 9d04ef200..c8fb16c93 100644 --- a/spec/features/compliance_ckeck_sets_spec.rb +++ b/spec/features/compliance_ckeck_sets_spec.rb @@ -19,10 +19,10 @@ RSpec.describe "ComplianceCheckSets", type: :feature do let!(:direct_checks){ make_check(nil, times: 2) + make_check(nil, severity: :error) } let!(:indirect_checks){ blox.map{ |block| make_check(block) } } - context 'show' do + context 'executed' do before do - visit(compliance_check_set_path(compliance_check_set)) + visit(executed_compliance_check_set_path(compliance_check_set)) end it 'we can see the expected content' do -- cgit v1.2.3 From c656fe0c4bd1eeff0fb969819519034abeb84308 Mon Sep 17 00:00:00 2001 From: Robert Date: Mon, 13 Nov 2017 16:06:35 +0100 Subject: Refs: #4823@0.5h; Translations changed --- config/locales/compliance_check_blocks.en.yml | 6 +++--- config/locales/compliance_check_blocks.fr.yml | 6 +++--- config/locales/compliance_check_sets.en.yml | 13 +++++++------ config/locales/compliance_check_sets.fr.yml | 11 ++++------- config/locales/compliance_checks.fr.yml | 2 +- spec/features/compliance_ckeck_sets_spec.rb | 2 +- 6 files changed, 19 insertions(+), 21 deletions(-) diff --git a/config/locales/compliance_check_blocks.en.yml b/config/locales/compliance_check_blocks.en.yml index 9278823dc..a20fb483e 100644 --- a/config/locales/compliance_check_blocks.en.yml +++ b/config/locales/compliance_check_blocks.en.yml @@ -2,7 +2,7 @@ en: activerecord: models: compliance_check_block: - zero: "Control report groups" - one: "Control report group" - many: "Control report groups" + zero: Control blocks + one: Control block + other: Control blocks diff --git a/config/locales/compliance_check_blocks.fr.yml b/config/locales/compliance_check_blocks.fr.yml index 2ead24b2f..3d385aff6 100644 --- a/config/locales/compliance_check_blocks.fr.yml +++ b/config/locales/compliance_check_blocks.fr.yml @@ -2,6 +2,6 @@ fr: activerecord: models: compliance_check_block: - zero: "Groupe de rapport de contrôle" - one: "Groupe de rapport de contrôle" - many: "Groupes de rapport de contrôle" + zero: "Groupe de contrôle" + one: "Groupe de contrôle" + other: "Groupes de contrôles" diff --git a/config/locales/compliance_check_sets.en.yml b/config/locales/compliance_check_sets.en.yml index 0088cc6cc..931dc0131 100644 --- a/config/locales/compliance_check_sets.en.yml +++ b/config/locales/compliance_check_sets.en.yml @@ -9,9 +9,11 @@ en: name: Specify a control report name... error_period_filter: End date must be greater than or equal to begin date index: - title: Control reports - new: Creating a Control Report - edit: Update a Control Report + title: Compliance control set + new: New compliance control set + new_control: Creating a Control + select_types: Control Type Selection + edit: Edit compliance control set search_no_results: No control reports match your search show: title: Control report %{name} @@ -26,6 +28,5 @@ en: name: Name models: compliance_check_block: - zero: "Control report groups" - one: "Control report group" - many: "Control report groups" + one: compliance_control_set + other: compliance_control_sets diff --git a/config/locales/compliance_check_sets.fr.yml b/config/locales/compliance_check_sets.fr.yml index edf16d460..08c919590 100644 --- a/config/locales/compliance_check_sets.fr.yml +++ b/config/locales/compliance_check_sets.fr.yml @@ -9,12 +9,10 @@ fr: name: Indiquez un nom d'un objet associé... error_period_filter: La date de fin doit être supérieure ou égale à la date de début0 index: - title: Rapports de contrôle - new: Création d'un rapport de contrôle - edit: Édition d'un rapport de contrôle + title: "Liste des jeux de contrôles" search_no_results: Aucun rapport de contrôle ne correspond à votre recherche show: - title: Rapport de contrôle %{name} + title: Jeu de contrôle %{name} activerecord: attributes: compliance_check_set: @@ -26,6 +24,5 @@ fr: name: Nom models: compliance_check_block: - zero: "Groupe de rapport de contrôle" - one: "Groupe de rapport de contrôle" - many: "Groupes de rapport de contrôle" + many: "Groupes de jeux de contrôle" + other: "Groupe de jeux de contrôle" diff --git a/config/locales/compliance_checks.fr.yml b/config/locales/compliance_checks.fr.yml index 009c0a7e2..d11d37003 100644 --- a/config/locales/compliance_checks.fr.yml +++ b/config/locales/compliance_checks.fr.yml @@ -8,7 +8,7 @@ fr: comment: Commentaire compliance_checks: filters: - subclass: Objét + subclass: Objet criticity: Criticité name: Nom diff --git a/spec/features/compliance_ckeck_sets_spec.rb b/spec/features/compliance_ckeck_sets_spec.rb index c8fb16c93..df3dc729e 100644 --- a/spec/features/compliance_ckeck_sets_spec.rb +++ b/spec/features/compliance_ckeck_sets_spec.rb @@ -39,7 +39,7 @@ RSpec.describe "ComplianceCheckSets", type: :feature do # Filters within( 'form.form-filter' ) do expect( page ).to have_content("Groupe de rapport de contrôle") - expect( page ).to have_content("Objét") + expect( page ).to have_content("Objet") expect( page ).to have_content("Criticité") end -- cgit v1.2.3 From 85b3e2e7bed8257263c553d2b7ccd4995021ee6c Mon Sep 17 00:00:00 2001 From: Robert Date: Mon, 13 Nov 2017 16:12:50 +0100 Subject: Refs: #4823@0.2h; Changed title of compliance_check_set#executed --- app/views/compliance_check_sets/executed.html.slim | 2 +- config/locales/compliance_check_sets.en.yml | 4 ++-- config/locales/compliance_check_sets.fr.yml | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/views/compliance_check_sets/executed.html.slim b/app/views/compliance_check_sets/executed.html.slim index d02adc6b8..43b1fae05 100644 --- a/app/views/compliance_check_sets/executed.html.slim +++ b/app/views/compliance_check_sets/executed.html.slim @@ -1,7 +1,7 @@ - breadcrumb :compliance_check_set, @workbench, @compliance_check_set / PageHeader = pageheader 'jeux-de-donnees', - t('compliance_check_sets.show.title', name: @compliance_check_set.name), + t('compliance_check_sets.executed.title', name: @compliance_check_set.name), 'Lorem ipsum dolor sit amet' / PageContent .page_content diff --git a/config/locales/compliance_check_sets.en.yml b/config/locales/compliance_check_sets.en.yml index 931dc0131..4488a79ba 100644 --- a/config/locales/compliance_check_sets.en.yml +++ b/config/locales/compliance_check_sets.en.yml @@ -15,8 +15,8 @@ en: select_types: Control Type Selection edit: Edit compliance control set search_no_results: No control reports match your search - show: - title: Control report %{name} + executed: + title: Executed control report %{name} activerecord: attributes: compliance_check_set: diff --git a/config/locales/compliance_check_sets.fr.yml b/config/locales/compliance_check_sets.fr.yml index 08c919590..a901581ed 100644 --- a/config/locales/compliance_check_sets.fr.yml +++ b/config/locales/compliance_check_sets.fr.yml @@ -11,8 +11,8 @@ fr: index: title: "Liste des jeux de contrôles" search_no_results: Aucun rapport de contrôle ne correspond à votre recherche - show: - title: Jeu de contrôle %{name} + executed: + title: Jeu de contrôles executés %{name} activerecord: attributes: compliance_check_set: -- cgit v1.2.3 From 83f193ee59af778a46f43fee8e9092c39c1390b8 Mon Sep 17 00:00:00 2001 From: Robert Date: Mon, 13 Nov 2017 19:09:33 +0100 Subject: Refs: #4823@2h; Chasing and fixing regressions in feature specs --- config/locales/compliance_check_sets.fr.yml | 7 ++++--- spec/features/compliance_ckeck_sets_spec.rb | 6 +++--- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/config/locales/compliance_check_sets.fr.yml b/config/locales/compliance_check_sets.fr.yml index a901581ed..8ad5af904 100644 --- a/config/locales/compliance_check_sets.fr.yml +++ b/config/locales/compliance_check_sets.fr.yml @@ -12,7 +12,7 @@ fr: title: "Liste des jeux de contrôles" search_no_results: Aucun rapport de contrôle ne correspond à votre recherche executed: - title: Jeu de contrôles executés %{name} + title: Jeu de contrôles exécutés %{name} activerecord: attributes: compliance_check_set: @@ -24,5 +24,6 @@ fr: name: Nom models: compliance_check_block: - many: "Groupes de jeux de contrôle" - other: "Groupe de jeux de contrôle" + zero: "Groupe de contrôle" + one: "Groupe de contrôle" + other: "Groupes de contrôles" diff --git a/spec/features/compliance_ckeck_sets_spec.rb b/spec/features/compliance_ckeck_sets_spec.rb index df3dc729e..66cbcd8b6 100644 --- a/spec/features/compliance_ckeck_sets_spec.rb +++ b/spec/features/compliance_ckeck_sets_spec.rb @@ -27,10 +27,10 @@ RSpec.describe "ComplianceCheckSets", type: :feature do it 'we can see the expected content' do # Breadcrumbs - expect_breadcrumb_links "Accueil", "Gestion de l'offre", " Rapports de contrôle" + expect_breadcrumb_links "Accueil", "Gestion de l'offre", "Liste des jeux de contrôles" # Headline - expect( page ).to have_content("Rapport de contrôle #{compliance_check_set.name}") + expect( page ).to have_content("Jeu de contrôles exécutés #{compliance_check_set.name}") # Information Definition List expect( page.first('.dl-term') ).to have_content("Nom") @@ -38,7 +38,7 @@ RSpec.describe "ComplianceCheckSets", type: :feature do # Filters within( 'form.form-filter' ) do - expect( page ).to have_content("Groupe de rapport de contrôle") + expect( page ).to have_content("Groupe de contrôle") expect( page ).to have_content("Objet") expect( page ).to have_content("Criticité") end -- cgit v1.2.3 From c0fa9f7de85fe32e95c7a923bb791525e0674c5d Mon Sep 17 00:00:00 2001 From: Robert Date: Tue, 14 Nov 2017 09:20:10 +0100 Subject: Fixes: #4823@0.5h; Fixed regression in Ransack button "Effacer" implicit path does not work anymore --- app/views/compliance_checks/_filters.html.slim | 2 +- spec/features/compliance_ckeck_sets_spec.rb | 26 ++++++++++++++++++++++++-- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/app/views/compliance_checks/_filters.html.slim b/app/views/compliance_checks/_filters.html.slim index 902fb0735..0d747da27 100644 --- a/app/views/compliance_checks/_filters.html.slim +++ b/app/views/compliance_checks/_filters.html.slim @@ -43,5 +43,5 @@ wrapper_html: {class: 'checkbox_list'} .actions - = link_to t('actions.erase'), @compliance_check_set, class: 'btn btn-link' + = link_to t('actions.erase'), executed_compliance_check_set_path(@compliance_check_set), class: 'btn btn-link' = f.submit t('actions.filter'), class: 'btn btn-default', id: 'compliance_check_set_compliance_checks_filter_btn' diff --git a/spec/features/compliance_ckeck_sets_spec.rb b/spec/features/compliance_ckeck_sets_spec.rb index 66cbcd8b6..7ba64b6b8 100644 --- a/spec/features/compliance_ckeck_sets_spec.rb +++ b/spec/features/compliance_ckeck_sets_spec.rb @@ -17,7 +17,9 @@ RSpec.describe "ComplianceCheckSets", type: :feature do compliance_check_set: compliance_check_set, transport_mode: 'rail', transport_submode: 'suburbanRailway') ]} let!(:direct_checks){ make_check(nil, times: 2) + make_check(nil, severity: :error) } - let!(:indirect_checks){ blox.map{ |block| make_check(block) } } + let!(:indirect_checks){ blox.flat_map{ |block| make_check(block) } } + let( :all_checks ){ direct_checks + indirect_checks } + context 'executed' do @@ -66,9 +68,29 @@ RSpec.describe "ComplianceCheckSets", type: :feature do end end end + + it 'can filter the results and remove the filter' do + # Filter + check('error') + click_on('Filtrer') + all_checks.each do | check | + if check.criticity == 'error' + expect( page ).to have_content(check.code) + else + expect( page ).not_to have_content(check.code) + end + end + + # Remove filter + click_on('Effacer') + all_checks.each do | check | + expect( page ).to have_content(check.code) + end + + end end - def make_check ccblock=nil, times: 1, severity: :error + def make_check ccblock=nil, times: 1, severity: :warning times.times.map do make_one_check ccblock, severity end -- cgit v1.2.3 From 21faf9940a6f7a9f685788eba2bdd267528cb0aa Mon Sep 17 00:00:00 2001 From: Robert Date: Thu, 16 Nov 2017 07:45:22 +0100 Subject: Refs: #4823@0.6h; Code Review Part I --- app/decorators/compliance_check_decorator.rb | 2 +- app/views/compliance_check_sets/executed.html.slim | 73 +++++++++++----------- 2 files changed, 36 insertions(+), 39 deletions(-) diff --git a/app/decorators/compliance_check_decorator.rb b/app/decorators/compliance_check_decorator.rb index 09984aa2e..5431f5796 100644 --- a/app/decorators/compliance_check_decorator.rb +++ b/app/decorators/compliance_check_decorator.rb @@ -2,7 +2,7 @@ class ComplianceCheckDecorator < Draper::Decorator delegate_all def action_links - links = [] + [] end end diff --git a/app/views/compliance_check_sets/executed.html.slim b/app/views/compliance_check_sets/executed.html.slim index 43b1fae05..84601e17c 100644 --- a/app/views/compliance_check_sets/executed.html.slim +++ b/app/views/compliance_check_sets/executed.html.slim @@ -24,44 +24,7 @@ = transport_mode_text() .row .col-lg-12 - .select_table - = table_builder_2 @direct_compliance_checks, - [ \ - TableBuilderHelper::Column.new( \ - key: :code, \ - attribute: 'code' \ - ), \ - TableBuilderHelper::Column.new( \ - key: :name, \ - attribute: 'name', \ - link_to: lambda do |compliance_check| \ - compliance_check_path(compliance_check) \ - end \ - ), \ - TableBuilderHelper::Column.new( \ - key: :criticity, \ - attribute: 'criticity' \ - ), \ - TableBuilderHelper::Column.new( \ - key: :comment, \ - attribute: 'comment' \ - ), \ - ], - sortable: true, - cls: 'table has-filter has-search', - model: ComplianceCheck - - - @compliance_checks.each do |block, compliance_checks| - - - if compliance_checks.try(:any?) - .row - .col-lg-12 - h2 - = transport_mode_text(block) - .row - .col-lg-12 - .select_table - = table_builder_2 compliance_checks, + = table_builder_2 @direct_compliance_checks, [ \ TableBuilderHelper::Column.new( \ key: :code, \ @@ -86,4 +49,38 @@ sortable: true, cls: 'table has-filter has-search', model: ComplianceCheck + + - @compliance_checks.each do |block, compliance_checks| + - if compliance_checks.try(:any?) + .row + .col-lg-12 + h2 + = transport_mode_text(block) + .row + .col-lg-12 + = table_builder_2 compliance_checks, + [ \ + TableBuilderHelper::Column.new( \ + key: :code, \ + attribute: 'code' \ + ), \ + TableBuilderHelper::Column.new( \ + key: :name, \ + attribute: 'name', \ + link_to: lambda do |compliance_check| \ + compliance_check_path(compliance_check) \ + end \ + ), \ + TableBuilderHelper::Column.new( \ + key: :criticity, \ + attribute: 'criticity' \ + ), \ + TableBuilderHelper::Column.new( \ + key: :comment, \ + attribute: 'comment' \ + ), \ + ], + sortable: true, + cls: 'table has-filter has-search', + model: ComplianceCheck -- cgit v1.2.3 From d8c0303c4f00998c546e9d3d06c0b13ed89b0391 Mon Sep 17 00:00:00 2001 From: Robert Date: Thu, 16 Nov 2017 07:55:12 +0100 Subject: Refs: #4823@0.2h; Code Review Part II --- config/locales/compliance_check_sets.en.yml | 2 +- spec/features/compliance_check_sets_spec.rb | 110 ++++++++++++++++++++++++++++ spec/features/compliance_ckeck_sets_spec.rb | 110 ---------------------------- 3 files changed, 111 insertions(+), 111 deletions(-) create mode 100644 spec/features/compliance_check_sets_spec.rb delete mode 100644 spec/features/compliance_ckeck_sets_spec.rb diff --git a/config/locales/compliance_check_sets.en.yml b/config/locales/compliance_check_sets.en.yml index 4488a79ba..5aa6f9740 100644 --- a/config/locales/compliance_check_sets.en.yml +++ b/config/locales/compliance_check_sets.en.yml @@ -20,7 +20,7 @@ en: activerecord: attributes: compliance_check_set: - ref: réf + ref: ref creation_date: Created at associated_object: Associated object assigned_to: Assigned to diff --git a/spec/features/compliance_check_sets_spec.rb b/spec/features/compliance_check_sets_spec.rb new file mode 100644 index 000000000..7ba64b6b8 --- /dev/null +++ b/spec/features/compliance_check_sets_spec.rb @@ -0,0 +1,110 @@ +require 'rails_helper' + +RSpec.describe "ComplianceCheckSets", type: :feature do + + include ComplianceCheckSetsHelper + include TransportModeHelper + + login_user + + # We setup a control_set with two blocks and one direct control (meaning that it is not attached to a block) + # Then we add one control to the first block and two controls to the second block + let( :compliance_check_set ){ create :compliance_check_set, name: random_string } + let(:blox){[ + create( :compliance_check_block, + compliance_check_set: compliance_check_set, transport_mode: 'bus', transport_submode: 'demandAndResponseBus'), + create( :compliance_check_block, + compliance_check_set: compliance_check_set, transport_mode: 'rail', transport_submode: 'suburbanRailway') + ]} + let!(:direct_checks){ make_check(nil, times: 2) + make_check(nil, severity: :error) } + let!(:indirect_checks){ blox.flat_map{ |block| make_check(block) } } + let( :all_checks ){ direct_checks + indirect_checks } + + + context 'executed' do + + before do + visit(executed_compliance_check_set_path(compliance_check_set)) + end + + it 'we can see the expected content' do + # Breadcrumbs + expect_breadcrumb_links "Accueil", "Gestion de l'offre", "Liste des jeux de contrôles" + + # Headline + expect( page ).to have_content("Jeu de contrôles exécutés #{compliance_check_set.name}") + + # Information Definition List + expect( page.first('.dl-term') ).to have_content("Nom") + expect( page.first('.dl-def') ).to have_content(compliance_check_set.name) + + # Filters + within( 'form.form-filter' ) do + expect( page ).to have_content("Groupe de contrôle") + expect( page ).to have_content("Objet") + expect( page ).to have_content("Criticité") + end + + # Checks + # Direct Children + within(:xpath, xpath_for_div_of_block) do + direct_checks.each do | direct_check | + expect( page ).to have_content( direct_check.code ) + expect( page ).to have_content( direct_check.name ) + expect( page ).to have_content( direct_check.criticity ) + expect( page ).to have_content( direct_check.comment ) + end + + end + # Indirect Children + compliance_check_set.compliance_check_blocks.each do | block | + within(:xpath, xpath_for_div_of_block(block)) do + block.compliance_checks.each do | check | + expect( page ).to have_content( check.code ) + expect( page ).to have_content( check.name ) + expect( page ).to have_content( check.criticity ) + expect( page ).to have_content( check.comment ) + end + end + end + end + + it 'can filter the results and remove the filter' do + # Filter + check('error') + click_on('Filtrer') + all_checks.each do | check | + if check.criticity == 'error' + expect( page ).to have_content(check.code) + else + expect( page ).not_to have_content(check.code) + end + end + + # Remove filter + click_on('Effacer') + all_checks.each do | check | + expect( page ).to have_content(check.code) + end + + end + end + + def make_check ccblock=nil, times: 1, severity: :warning + times.times.map do + make_one_check ccblock, severity + end + end + + def make_one_check ccblock, severity + create( :compliance_check, + code: random_string, + compliance_check_block: ccblock, + compliance_check_set: compliance_check_set, + criticity: severity) + end + + def xpath_for_div_of_block(block = nil) + %{.//div[@class="col-lg-12"]/h2[contains(text(),"#{transport_mode_text(block)}")]/../../..} + end +end diff --git a/spec/features/compliance_ckeck_sets_spec.rb b/spec/features/compliance_ckeck_sets_spec.rb deleted file mode 100644 index 7ba64b6b8..000000000 --- a/spec/features/compliance_ckeck_sets_spec.rb +++ /dev/null @@ -1,110 +0,0 @@ -require 'rails_helper' - -RSpec.describe "ComplianceCheckSets", type: :feature do - - include ComplianceCheckSetsHelper - include TransportModeHelper - - login_user - - # We setup a control_set with two blocks and one direct control (meaning that it is not attached to a block) - # Then we add one control to the first block and two controls to the second block - let( :compliance_check_set ){ create :compliance_check_set, name: random_string } - let(:blox){[ - create( :compliance_check_block, - compliance_check_set: compliance_check_set, transport_mode: 'bus', transport_submode: 'demandAndResponseBus'), - create( :compliance_check_block, - compliance_check_set: compliance_check_set, transport_mode: 'rail', transport_submode: 'suburbanRailway') - ]} - let!(:direct_checks){ make_check(nil, times: 2) + make_check(nil, severity: :error) } - let!(:indirect_checks){ blox.flat_map{ |block| make_check(block) } } - let( :all_checks ){ direct_checks + indirect_checks } - - - context 'executed' do - - before do - visit(executed_compliance_check_set_path(compliance_check_set)) - end - - it 'we can see the expected content' do - # Breadcrumbs - expect_breadcrumb_links "Accueil", "Gestion de l'offre", "Liste des jeux de contrôles" - - # Headline - expect( page ).to have_content("Jeu de contrôles exécutés #{compliance_check_set.name}") - - # Information Definition List - expect( page.first('.dl-term') ).to have_content("Nom") - expect( page.first('.dl-def') ).to have_content(compliance_check_set.name) - - # Filters - within( 'form.form-filter' ) do - expect( page ).to have_content("Groupe de contrôle") - expect( page ).to have_content("Objet") - expect( page ).to have_content("Criticité") - end - - # Checks - # Direct Children - within(:xpath, xpath_for_div_of_block) do - direct_checks.each do | direct_check | - expect( page ).to have_content( direct_check.code ) - expect( page ).to have_content( direct_check.name ) - expect( page ).to have_content( direct_check.criticity ) - expect( page ).to have_content( direct_check.comment ) - end - - end - # Indirect Children - compliance_check_set.compliance_check_blocks.each do | block | - within(:xpath, xpath_for_div_of_block(block)) do - block.compliance_checks.each do | check | - expect( page ).to have_content( check.code ) - expect( page ).to have_content( check.name ) - expect( page ).to have_content( check.criticity ) - expect( page ).to have_content( check.comment ) - end - end - end - end - - it 'can filter the results and remove the filter' do - # Filter - check('error') - click_on('Filtrer') - all_checks.each do | check | - if check.criticity == 'error' - expect( page ).to have_content(check.code) - else - expect( page ).not_to have_content(check.code) - end - end - - # Remove filter - click_on('Effacer') - all_checks.each do | check | - expect( page ).to have_content(check.code) - end - - end - end - - def make_check ccblock=nil, times: 1, severity: :warning - times.times.map do - make_one_check ccblock, severity - end - end - - def make_one_check ccblock, severity - create( :compliance_check, - code: random_string, - compliance_check_block: ccblock, - compliance_check_set: compliance_check_set, - criticity: severity) - end - - def xpath_for_div_of_block(block = nil) - %{.//div[@class="col-lg-12"]/h2[contains(text(),"#{transport_mode_text(block)}")]/../../..} - end -end -- cgit v1.2.3 From 05223891b456d043b8999b8ebce6a7b2eaf6ec6d Mon Sep 17 00:00:00 2001 From: Robert Date: Thu, 16 Nov 2017 08:13:24 +0100 Subject: Refs: #4823@0.3h; Code Review Part III --- app/controllers/compliance_check_sets_controller.rb | 15 ++++++++------- app/controllers/compliance_control_sets_controller.rb | 16 ++++++++-------- app/views/compliance_check_sets/executed.html.slim | 4 ++-- app/views/compliance_control_sets/show.html.slim | 4 ++-- 4 files changed, 20 insertions(+), 19 deletions(-) diff --git a/app/controllers/compliance_check_sets_controller.rb b/app/controllers/compliance_check_sets_controller.rb index 5f392ef82..175c22191 100644 --- a/app/controllers/compliance_check_sets_controller.rb +++ b/app/controllers/compliance_check_sets_controller.rb @@ -20,7 +20,10 @@ class ComplianceCheckSetsController < InheritedResources::Base end def executed - show!(&method(:implement_executed)) + show! do |format| + # But now nobody is aware anymore that `format.html` passes a parameter into the block + format.html { executed_for_html } + end end @@ -28,17 +31,15 @@ class ComplianceCheckSetsController < InheritedResources::Base # Action Implementation # --------------------- - def implement_executed format - format.html(&method(:implement_executed_for_html)) - end - def implement_executed_for_html _mime_response + def executed_for_html @q_checks_form = @compliance_check_set.compliance_checks.ransack(params[:q]) @compliance_check_set = @compliance_check_set.decorate - @compliance_checks = + compliance_checks = decorate_compliance_checks( @q_checks_form.result) .group_by(&:compliance_check_block) - @direct_compliance_checks = @compliance_checks.delete nil + @direct_compliance_checks = compliance_checks.delete nil + @blocks_to_compliance_checks_map = compliance_checks end # Decoration diff --git a/app/controllers/compliance_control_sets_controller.rb b/app/controllers/compliance_control_sets_controller.rb index 65aa1e81f..83a345c6f 100644 --- a/app/controllers/compliance_control_sets_controller.rb +++ b/app/controllers/compliance_control_sets_controller.rb @@ -16,7 +16,10 @@ class ComplianceControlSetsController < InheritedResources::Base end def show - show!(&method(:implement_show)) + show! do |format| + # But now nobody is aware anymore that `format.html` passes a parameter into the block + format.html { show_for_html } + end end @@ -52,16 +55,13 @@ class ComplianceControlSetsController < InheritedResources::Base params.require(:compliance_control_set).permit(:name, :id) end - def implement_show format - format.html(&method(:implement_show_for_html)) - end - - def implement_show_for_html _mime_response + def show_for_html @q_controls_form = @compliance_control_set.compliance_controls.ransack(params[:q]) @compliance_control_set = @compliance_control_set.decorate - @compliance_controls = + compliance_controls = decorate_compliance_controls( @q_controls_form.result) .group_by(&:compliance_control_block) - @direct_compliance_controls = @compliance_controls.delete nil + @direct_compliance_controls = compliance_controls.delete nil + @blocks_to_compliance_controls_map = compliance_controls end end diff --git a/app/views/compliance_check_sets/executed.html.slim b/app/views/compliance_check_sets/executed.html.slim index 84601e17c..8afb1d545 100644 --- a/app/views/compliance_check_sets/executed.html.slim +++ b/app/views/compliance_check_sets/executed.html.slim @@ -11,7 +11,7 @@ = definition_list t('metadatas'), ComplianceCheckSet.human_attribute_name(:name) => @compliance_check_set.name - - if params[:q].present? || @compliance_checks.any? || @direct_compliance_checks + - if params[:q].present? || @blocks_to_compliance_checks_map.any? || @direct_compliance_checks .row .col-lg-12 h2 @@ -50,7 +50,7 @@ cls: 'table has-filter has-search', model: ComplianceCheck - - @compliance_checks.each do |block, compliance_checks| + - @blocks_to_compliance_checks_map.each do |block, compliance_checks| - if compliance_checks.try(:any?) .row diff --git a/app/views/compliance_control_sets/show.html.slim b/app/views/compliance_control_sets/show.html.slim index 12be42ea6..e152c189f 100644 --- a/app/views/compliance_control_sets/show.html.slim +++ b/app/views/compliance_control_sets/show.html.slim @@ -26,7 +26,7 @@ ComplianceControlSet.human_attribute_name(:name) => @compliance_control_set.name, I18n.t('activerecord.attributes.compliance_control_set.owner_jdc') => @compliance_control_set.organisation.name - - if params[:q].present? || @compliance_controls.any? || @direct_compliance_controls + - if params[:q].present? || @blocks_to_compliance_controls_map.any? || @direct_compliance_controls .row .col-lg-12 = render '/compliance_controls/filters' @@ -66,7 +66,7 @@ cls: 'table has-filter has-search', model: ComplianceControl - - @compliance_controls.each do |block, compliance_controls| + - @blocks_to_compliance_controls_map.each do |block, compliance_controls| - if compliance_controls.try(:any?) .row -- cgit v1.2.3 From 9eecb15fb3381e67c28e0978016eb5ac1ec472ca Mon Sep 17 00:00:00 2001 From: Robert Date: Thu, 16 Nov 2017 08:17:12 +0100 Subject: Refs: #4823@0.1h; Code Review Part IV --- app/views/compliance_check_sets/executed.html.slim | 3 +-- app/views/compliance_control_sets/show.html.slim | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/app/views/compliance_check_sets/executed.html.slim b/app/views/compliance_check_sets/executed.html.slim index 8afb1d545..5550fbb25 100644 --- a/app/views/compliance_check_sets/executed.html.slim +++ b/app/views/compliance_check_sets/executed.html.slim @@ -1,8 +1,7 @@ - breadcrumb :compliance_check_set, @workbench, @compliance_check_set / PageHeader = pageheader 'jeux-de-donnees', - t('compliance_check_sets.executed.title', name: @compliance_check_set.name), - 'Lorem ipsum dolor sit amet' + t('compliance_check_sets.executed.title', name: @compliance_check_set.name) / PageContent .page_content .container-fluid diff --git a/app/views/compliance_control_sets/show.html.slim b/app/views/compliance_control_sets/show.html.slim index e152c189f..27f8b4e2c 100644 --- a/app/views/compliance_control_sets/show.html.slim +++ b/app/views/compliance_control_sets/show.html.slim @@ -1,8 +1,7 @@ - breadcrumb :compliance_control_set, @compliance_control_set / PageHeader = pageheader 'jeux-de-controle', - t('compliance_control_sets.show.title', name: @compliance_control_set.name), - 'Lorem ipsum dolor sit amet' + t('compliance_control_sets.show.title', name: @compliance_control_set.name) / Below is secondary actions & optional contents (filters, ...) .row.mb-sm -- cgit v1.2.3 From dd4c7df4193c32d20f9772159217741c14d1184e Mon Sep 17 00:00:00 2001 From: Robert Date: Fri, 17 Nov 2017 09:42:35 +0100 Subject: Refs: #4823@0.2h; Code Review Part V --- app/views/compliance_check_sets/executed.html.slim | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/views/compliance_check_sets/executed.html.slim b/app/views/compliance_check_sets/executed.html.slim index 5550fbb25..bb055272d 100644 --- a/app/views/compliance_check_sets/executed.html.slim +++ b/app/views/compliance_check_sets/executed.html.slim @@ -13,8 +13,7 @@ - if params[:q].present? || @blocks_to_compliance_checks_map.any? || @direct_compliance_checks .row .col-lg-12 - h2 - = render '/compliance_checks/filters' + = render '/compliance_checks/filters' - if @direct_compliance_checks.try(:any?) .row -- cgit v1.2.3 From 371968fbe6365667bc83ac7e5b01a7782b62e1b7 Mon Sep 17 00:00:00 2001 From: Robert Date: Fri, 17 Nov 2017 09:58:22 +0100 Subject: Refs: #4823@0.2h; Last CR --- app/views/compliance_control_sets/show.html.slim | 105 +++++++++++++---------- 1 file changed, 58 insertions(+), 47 deletions(-) diff --git a/app/views/compliance_control_sets/show.html.slim b/app/views/compliance_control_sets/show.html.slim index 27f8b4e2c..71b71f842 100644 --- a/app/views/compliance_control_sets/show.html.slim +++ b/app/views/compliance_control_sets/show.html.slim @@ -31,15 +31,58 @@ = render '/compliance_controls/filters' - - if @direct_compliance_controls.try(:any?) + - if @direct_compliance_controls.try(:any?) + .row + .col-lg-12 + h2 + = transport_mode_text() + .row + .col-lg-12 + .select_table + = table_builder_2 @direct_compliance_controls, + [ \ + TableBuilderHelper::Column.new( \ + key: :code, \ + attribute: 'code' \ + ), \ + TableBuilderHelper::Column.new( \ + key: :name, \ + attribute: 'name', \ + link_to: lambda do |compliance_control| \ + compliance_control_set_compliance_control_path(@compliance_control_set, compliance_control) \ + end \ + ), \ + TableBuilderHelper::Column.new( \ + key: :criticity, \ + attribute: 'criticity' \ + ), \ + TableBuilderHelper::Column.new( \ + key: :comment, \ + attribute: 'comment' \ + ), \ + ], + sortable: true, + cls: 'table has-filter has-search', + model: ComplianceControl + + - @blocks_to_compliance_controls_map.each do |block, compliance_controls| + + - if compliance_controls.try(:any?) .row .col-lg-12 h2 - = transport_mode_text() + = transport_mode_text(block) + .btn-group + .btn.dropdown-toggle{ data-toggle="dropdown" } + .span.fa.fa-cog + ul.dropdown-menu + li + = link_to t('compliance_control_sets.actions.edit'), edit_compliance_control_set_compliance_control_block_path(@compliance_control_set.id, block.id) + = link_to t('compliance_control_sets.actions.destroy'), compliance_control_set_compliance_control_block_path(@compliance_control_set.id, block.id), :method => :delete, :data => {:confirm => t('compliance_control_sets.actions.destroy_confirm')} .row .col-lg-12 .select_table - = table_builder_2 @direct_compliance_controls, + = table_builder_2 compliance_controls, [ \ TableBuilderHelper::Column.new( \ key: :code, \ @@ -65,47 +108,15 @@ cls: 'table has-filter has-search', model: ComplianceControl - - @blocks_to_compliance_controls_map.each do |block, compliance_controls| - - - if compliance_controls.try(:any?) - .row - .col-lg-12 - h2 - = transport_mode_text(block) - .btn-group - .btn.dropdown-toggle{ data-toggle="dropdown" } - .span.fa.fa-cog - ul.dropdown-menu - li - = link_to t('compliance_control_sets.actions.edit'), edit_compliance_control_set_compliance_control_block_path(@compliance_control_set.id, block.id) if policy(ComplianceControlBlock).update? if policy(ComplianceControlBlock).update? - = link_to t('compliance_control_sets.actions.destroy'), compliance_control_set_compliance_control_block_path(@compliance_control_set.id, block.id), :method => :delete, :data => {:confirm => t('compliance_control_sets.actions.destroy_confirm')} if policy(ComplianceControlBlock).destroy? - .row - .col-lg-12 - .select_table - = table_builder_2 compliance_controls, - [ \ - TableBuilderHelper::Column.new( \ - key: :code, \ - attribute: 'code' \ - ), \ - TableBuilderHelper::Column.new( \ - key: :name, \ - attribute: 'name', \ - link_to: lambda do |compliance_control| \ - compliance_control_set_compliance_control_path(@compliance_control_set, compliance_control) \ - end \ - ), \ - TableBuilderHelper::Column.new( \ - key: :criticity, \ - attribute: 'criticity' \ - ), \ - TableBuilderHelper::Column.new( \ - key: :comment, \ - attribute: 'comment' \ - ), \ - ], - sortable: true, - cls: 'table has-filter has-search', - model: ComplianceControl - - = flotted_links(@compliance_control_set.id) \ No newline at end of file + .select_toolbox + ul + li.st_action.with_text + = link_to select_type_compliance_control_set_compliance_controls_path(@compliance_control_set.id) + span.fa.fa-plus + span + = t('compliance_control_sets.actions.add_compliance_control') + li.st_action.with_text + = link_to new_compliance_control_set_compliance_control_block_path(@compliance_control_set.id) + span.fa.fa-plus + span + = t('compliance_control_sets.actions.add_compliance_control_block') -- cgit v1.2.3 From 8eec4e215f969ba416c7b0e31852f9200b9abd59 Mon Sep 17 00:00:00 2001 From: Robert Date: Fri, 17 Nov 2017 15:18:09 +0100 Subject: bup --- app/views/compliance_control_sets/show.html.slim | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/app/views/compliance_control_sets/show.html.slim b/app/views/compliance_control_sets/show.html.slim index 71b71f842..013b08270 100644 --- a/app/views/compliance_control_sets/show.html.slim +++ b/app/views/compliance_control_sets/show.html.slim @@ -107,16 +107,3 @@ sortable: true, cls: 'table has-filter has-search', model: ComplianceControl - - .select_toolbox - ul - li.st_action.with_text - = link_to select_type_compliance_control_set_compliance_controls_path(@compliance_control_set.id) - span.fa.fa-plus - span - = t('compliance_control_sets.actions.add_compliance_control') - li.st_action.with_text - = link_to new_compliance_control_set_compliance_control_block_path(@compliance_control_set.id) - span.fa.fa-plus - span - = t('compliance_control_sets.actions.add_compliance_control_block') -- cgit v1.2.3 From b5536b6f8d7e5fbfe52d24e0b71bcc4984b87262 Mon Sep 17 00:00:00 2001 From: Robert Date: Fri, 17 Nov 2017 15:48:22 +0100 Subject: Refs: #4823; Rebase fixed --- app/views/compliance_control_sets/show.html.slim | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/app/views/compliance_control_sets/show.html.slim b/app/views/compliance_control_sets/show.html.slim index 013b08270..71b71f842 100644 --- a/app/views/compliance_control_sets/show.html.slim +++ b/app/views/compliance_control_sets/show.html.slim @@ -107,3 +107,16 @@ sortable: true, cls: 'table has-filter has-search', model: ComplianceControl + + .select_toolbox + ul + li.st_action.with_text + = link_to select_type_compliance_control_set_compliance_controls_path(@compliance_control_set.id) + span.fa.fa-plus + span + = t('compliance_control_sets.actions.add_compliance_control') + li.st_action.with_text + = link_to new_compliance_control_set_compliance_control_block_path(@compliance_control_set.id) + span.fa.fa-plus + span + = t('compliance_control_sets.actions.add_compliance_control_block') -- cgit v1.2.3