diff options
4 files changed, 100 insertions, 72 deletions
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/TimetableSelect2.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/TimetableSelect2.js index 0d8e54b1e..5157300ba 100644 --- a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/TimetableSelect2.js +++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/TimetableSelect2.js @@ -36,7 +36,7 @@ class BSelect4 extends React.Component{ let newParmas = params.term.split(" ") return { q: { - objectid_end_any: newParmas, + objectid_cont_any: newParmas, comment_cont_any: newParmas, m: 'or' } diff --git a/app/models/import.rb b/app/models/import.rb index 5f83ed255..9daff0494 100644 --- a/app/models/import.rb +++ b/app/models/import.rb @@ -33,11 +33,11 @@ class Import < ActiveRecord::Base end def notify_parent - parent.child_change(self) + parent.child_change update(notified_parent_at: DateTime.now) end - def child_change(child) + def child_change return if self.class.finished_statuses.include?(status) update_status diff --git a/app/views/time_table_combinations/_form.html.slim b/app/views/time_table_combinations/_form.html.slim index 581f00457..8e2d77d46 100644 --- a/app/views/time_table_combinations/_form.html.slim +++ b/app/views/time_table_combinations/_form.html.slim @@ -7,7 +7,7 @@ abbr title='Champ requis' * = f.input :combined_type, as: :boolean, checked_value: 'time_table', unchecked_value: 'calendar', required: false, label: content_tag(:span, t("time_table_combinations.combined_type.#{@combination.combined_type}"), class: 'switch-label', data: { checkedValue: 'Calendriers', uncheckedValue: 'Modèles de calendriers' }), wrapper_html: { class: 'col-sm-8 col-xs-7' } - = f.input :time_table_id, as: :select, input_html: {class: 'tt_combination_target', style: "width: 100%", data: { 'select2-ajax': 'true', 'select2ed-placeholder': 'Indiquez un calendrier...', term: 'comment_or_objectid_cont', url: referential_autocomplete_time_tables_path(@referential, format: :json, :source_id => @combination.source_id)}}, wrapper_html: {class: @combination.combined_type != 'time_table' ? 'hidden' : ''} + = f.input :time_table_id, as: :select, input_html: {class: 'tt_combination_target', style: "width: 100%", data: { 'select2-ajax': 'true', 'select2ed-placeholder': 'Indiquez un calendrier...', term: 'comment_cont_or_objectid_cont', url: referential_autocomplete_time_tables_path(@referential, format: :json, :source_id => @combination.source_id)}}, wrapper_html: {class: @combination.combined_type != 'time_table' ? 'hidden' : ''} = f.input :calendar_id, as: :select, input_html: { class: 'tt_combination_target', style: "width: 100%", data: { 'select2-ajax': 'true', 'select2ed-placeholder': 'Indiquez un modèle de calendrier...', term: 'name_cont', url: autocomplete_calendars_path}}, wrapper_html: {class: @combination.combined_type != 'calendar' ? 'hidden' : ''} diff --git a/spec/models/import_spec.rb b/spec/models/import_spec.rb index 69c77da91..941e5b386 100644 --- a/spec/models/import_spec.rb +++ b/spec/models/import_spec.rb @@ -1,4 +1,4 @@ -RSpec.describe Import, :type => :model do +RSpec.describe Import, type: :model do it { should belong_to(:referential) } it { should belong_to(:workbench) } @@ -48,12 +48,27 @@ RSpec.describe Import, :type => :model do end end - # TODO: Move most of these to #update_status - describe "#child_change", skip: "THE CODE CHANGED AND THESE SPECS NO LONGER WORK. FIX THEM ASAP!!!~!~!@~" do + describe "#child_change" do + it "calls #update_status" do + allow(workbench_import).to receive(:update) + + expect(workbench_import).to receive(:update_status) + workbench_import.child_change + end + + it "calls #update_referentials" do + allow(workbench_import).to receive(:update) + + expect(workbench_import).to receive(:update_referentials) + workbench_import.child_change + end + end + + describe "#update_status" do shared_examples( - "updates :status to failed when child status indicates failure" + "updates :status to failed when >=1 child has failing status" ) do |failure_status| - it "updates :status to failed when child status indicates failure" do + it "updates :status to failed when >=1 child has failing status" do workbench_import = create(:workbench_import) create( :netex_import, @@ -61,102 +76,115 @@ RSpec.describe Import, :type => :model do status: failure_status ) - expect(workbench_import).to receive(:update).with( - current_step: 1, - status: 'failed' - ) + workbench_import.update_status - workbench_import.child_change + expect(workbench_import.status).to eq('failed') end end include_examples( - "updates :status to failed when child status indicates failure", + "updates :status to failed when >=1 child has failing status", "failed" ) include_examples( - "updates :status to failed when child status indicates failure", + "updates :status to failed when >=1 child has failing status", "aborted" ) include_examples( - "updates :status to failed when child status indicates failure", + "updates :status to failed when >=1 child has failing status", "canceled" ) - # TODO: rewrite these for new #update_status - # it "updates :status to successful when #ready?" do - # expect(workbench_import).to receive(:update).with(status: 'successful') - # - # workbench_import.child_change - # end - # - # it "updates :status to failed when #ready? and child is failed" do - # build_stubbed( - # :netex_import, - # parent: workbench_import, - # status: :failed - # ) - # - # expect(workbench_import).to receive(:update).with(status: 'failed') - # - # workbench_import.child_change - # end + it "updates :status to successful when all children are successful" do + workbench_import = create(:workbench_import) + create_list( + :netex_import, + 2, + parent: workbench_import, + status: 'successful' + ) + + workbench_import.update_status + + expect(workbench_import.status).to eq('successful') + end + + it "Updates :status to failed when any child has failed" do + workbench_import = create(:workbench_import) + [ + 'failed', + 'successful' + ].each do |status| + create( + :netex_import, + parent: workbench_import, + status: status + ) + end + + workbench_import.update_status + + expect(workbench_import.status).to eq('failed') + end + + it "updates :ended_at to now when status is finished" do + workbench_import = create(:workbench_import) + create( + :netex_import, + parent: workbench_import, + status: 'failed' + ) + + Timecop.freeze(Time.now) do + workbench_import.update_status + + expect(workbench_import.ended_at).to eq(Time.now) + end + end + end + + describe "#update_referentials" do + it "doesn't update referentials if parent status isn't finished" do + workbench_import = create(:workbench_import, status: 'pending') + netex_import = create(:netex_import, parent: workbench_import) + netex_import.referential.update(ready: false) + + workbench_import.update_referentials + netex_import.referential.reload + + expect(netex_import.referential.ready).to be false + end shared_examples( - "doesn't update :status if parent import status is finished" + "makes child referentials `ready` when status is finished" ) do |finished_status| - it "doesn't update :status if parent import status is finished" do - workbench_import = build_stubbed( - :workbench_import, - total_steps: 2, - current_step: 2, - status: finished_status - ) - double('Import') + it "makes child referentials `ready` when status is finished" do + workbench_import = create(:workbench_import, status: finished_status) + netex_import = create(:netex_import, parent: workbench_import) + netex_import.referential.update(ready: false) - expect(workbench_import).not_to receive(:update) + workbench_import.update_referentials + netex_import.referential.reload - workbench_import.child_change + expect(netex_import.referential.ready).to be true end end include_examples( - "doesn't update :status if parent import status is finished", + "makes child referentials `ready` when status is finished", "successful" ) include_examples( - "doesn't update :status if parent import status is finished", + "makes child referentials `ready` when status is finished", "failed" ) include_examples( - "doesn't update :status if parent import status is finished", + "makes child referentials `ready` when status is finished", "aborted" ) include_examples( - "doesn't update :status if parent import status is finished", + "makes child referentials `ready` when status is finished", "canceled" ) - - it "calls #update_status" do - allow(workbench_import).to receive(:update) - - expect(workbench_import).to receive(:update_status) - workbench_import.child_change - end - - it "calls #update_referential" do - allow(workbench_import).to receive(:update) - - expect(workbench_import).to receive(:update_referential) - workbench_import.child_change - end end - - describe "#update_status" do - it "updates :ended_at to now when status is finished" do - skip "Redo the `#update_status` code to make it easier to write this." - end - end - - # TODO: specs for #update_referential end |
