diff --git a/lib/tasks/etl.rake b/lib/tasks/etl.rake index b990dd511..ca3c07b0c 100644 --- a/lib/tasks/etl.rake +++ b/lib/tasks/etl.rake @@ -80,12 +80,13 @@ namespace :etl do end end - desc "Run ETL Main process across a range of dates" + desc "Run ETL Main process across a range of dates or a single date" task :rerun_main, %i[from to] => [:environment] do |_t, args| from = args[:from].to_date - to = args[:to].to_date + to = args[:to]&.to_date date_range = (from..to) - date_range.each do |date| + + date_range.compact.each do |date| puts "Running Etl::Main process for #{date}" unless Etl::Main::MainProcessor.process(date:) abort("Etl::Main::MainProcessor failed") diff --git a/spec/tasks/etl_spec.rb b/spec/tasks/etl_spec.rb index a807caad3..189a1b943 100644 --- a/spec/tasks/etl_spec.rb +++ b/spec/tasks/etl_spec.rb @@ -92,26 +92,35 @@ end before do - edition = create :edition, date: "2018-10-03" - create :metric, edition:, date: "2018-10-30" - create :metric, edition:, date: "2018-10-31" - create :metric, edition:, date: "2018-11-01" - create :metric, edition:, date: "2018-11-02" - create :metric, edition:, date: "2018-11-03" Rake::Task["etl:rerun_main"].reenable - Rake::Task["etl:rerun_main"].invoke("2018-10-31", "2018-11-02") end - it "calls Etl::Main::MainProcessor.process with each date" do + it "calls Etl::Main::MainProcessor.process with each date when a range is provided" do + Rake::Task["etl:rerun_main"].invoke("2018-10-31", "2018-11-02") + [Date.new(2018, 10, 31), Date.new(2018, 11, 1), Date.new(2018, 11, 2)].each do |date| expect(processor).to have_received(:process).once.with(date:) end end it "runs the aggregations process for each month in the range" do + Rake::Task["etl:rerun_main"].invoke("2018-10-31", "2018-11-02") + [Date.new(2018, 10, 31), Date.new(2018, 11, 30)].each do |date| expect(processor).to have_received(:process_aggregations).once.with(date:) end end + + it "calls Etl::Main::MainProcessor.process for a single date" do + Rake::Task["etl:rerun_main"].invoke("2018-08-22") + + expect(processor).to have_received(:process).once.with(Date.new(2018, 8, 22)) + end + + # it "runs the aggregations process for a month" do + # Rake::Task["etl:rerun_main"].invoke("2018-08-23") + + # expect(processor).to have_received(:process_aggregations).once.with(Date.new(2018, 8, 23)) + # end end end